?? unit1.pas
字號:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, VirtualTrees, Buttons, ExtCtrls, DB, DBTables, ImgList,
StdCtrls, ComCtrls;
const
gpMainRegionName = '某公司';
type
TForm1 = class(TForm)
Panel6: TPanel;
Panel5: TPanel;
SpeedButton1: TSpeedButton;
Query1: TQuery;
Query2: TQuery;
LargeImages: TImageList;
ControlTree: TVirtualStringTree;
Splitter1: TSplitter;
RichEdit1: TRichEdit;
procedure FormCreate(Sender: TObject);
procedure ControlTreeGetText(Sender: TBaseVirtualTree;
Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
var CellText: WideString);
procedure ControlTreeGetImageIndex(Sender: TBaseVirtualTree;
Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex;
var Ghosted: Boolean; var ImageIndex: Integer);
procedure ControlTreeGetHint(Sender: TBaseVirtualTree;
Node: PVirtualNode; Column: TColumnIndex;
var LineBreakStyle: TVTTooltipLineBreakStyle;
var HintText: WideString);
procedure SpeedButton1Click(Sender: TObject);
procedure ControlTreeFocusChanged(Sender: TBaseVirtualTree;
Node: PVirtualNode; Column: TColumnIndex);
private
{ Private declarations }
public
{ Public declarations }
procedure LoadGroup;
end;
NodeKind = (nkCompany, nkDepartment, nkEmployee);
PEntry = ^TEntry;
TEntry = record
Caption: string;
ID: Word;
Kind: NodeKind;
ImageIndex: Byte;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function FindChild(Sender: TBaseVirtualTree; hParent: PVirtualNode; EMPID: integer): PVirtualNode;
var
llhChild: PVirtualNode;
Data: PEntry;
begin
Result := nil;
llhChild := hParent.FirstChild; //獲取hParent的第一個子節(jié)點
while Assigned(llhChild) do begin
Data := Sender.GetNodeData(llhChild);
if (Data.Kind = nkEmployee) and (Data.ID = EMPID) then begin
Result := llhChild;
Exit;
end;
{對llhChild節(jié)點進行處理}
Result := FindChild(Sender, llhChild, EMPID);
if Result <> nil then Exit;
llhChild := llhChild.NextSibling;
end;
end;
procedure TForm1.LoadGroup;
var
MainNodeLevel, ChildNodeLevel1, ChildNodeLevel2: PVirtualNode;
Data: PEntry;
begin
ControlTree.Clear;
ControlTree.NodeDataSize := SizeOf(TEntry);
MainNodeLevel := ControlTree.AddChild(nil);
MainNodeLevel.States := MainNodeLevel.States + [vsExpanded];
Data := ControlTree.GetNodeData(MainNodeLevel);
Data.Caption := gpMainRegionName;
Data.ImageIndex := 1;
Data.Kind := nkCompany;
Query2.DisableControls;
Query2.Close;
Query2.SQL.Clear;
Query2.SQL.Add('SELECT * FROM Department.db');
Query2.Prepare;
Query2.Open;
Query2.First;
while not Query2.Eof do begin
ChildNodeLevel1 := ControlTree.AddChild(MainNodeLevel);
Data := ControlTree.GetNodeData(ChildNodeLevel1);
Data.Caption := Query2.FieldByName('DEPNAME').AsString;
Data.ID := Query2.FieldByName('DEPID').AsInteger;
Data.Kind := nkDepartment;
Data.ImageIndex := 0;
Query1.DisableControls;
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('SELECT * FROM Employee.db WHERE(DEPID=:InputData)');
Query1.ParamByName('InputData').AsInteger := Data.ID;
Query1.Prepare;
Query1.Open;
Query1.First;
while not Query1.Eof do begin
ChildNodeLevel2 := ControlTree.AddChild(ChildNodeLevel1);
Data := ControlTree.GetNodeData(ChildNodeLevel2);
Data.Caption := Query1.FieldByName('EMPNAME').AsString;
Data.ID := Query1.FieldByName('EMPID').AsInteger;
Data.Kind := nkEmployee;
Data.ImageIndex := 2;
Query1.Next;
end;
Query1.EnableControls;
Query1.SQL.Clear;
Query1.Close;
Query2.Next;
end;
Query2.EnableControls;
Query2.SQL.Clear;
Query2.Close;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Query1.DatabaseName := GetCurrentDir + '\' + 'DataBase';
Query2.DatabaseName := GetCurrentDir + '\' + 'DataBase';
LoadGroup;
end;
procedure TForm1.ControlTreeGetText(Sender: TBaseVirtualTree;
Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
var CellText: WideString);
var
Data: PEntry;
begin
Data := Sender.GetNodeData(Node);
if Data.Kind = nkEmployee then
CellText := Data.Caption + '(' + IntToStr(Data.ID) + ')'
else
CellText := Data.Caption;
end;
procedure TForm1.ControlTreeGetImageIndex(Sender: TBaseVirtualTree;
Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex;
var Ghosted: Boolean; var ImageIndex: Integer);
var
Data: PEntry;
begin
Data := Sender.GetNodeData(Node);
case Kind of
ikNormal, ikSelected:
begin
ImageIndex := Data.ImageIndex;
end;
end;
end;
procedure TForm1.ControlTreeGetHint(Sender: TBaseVirtualTree;
Node: PVirtualNode; Column: TColumnIndex;
var LineBreakStyle: TVTTooltipLineBreakStyle; var HintText: WideString);
var
Data: PEntry;
begin
Data := ControlTree.GetNodeData(Node);
if not Assigned(Data) then Exit;
with Query1 do begin
try
DisableControls;
Close;
SQL.Clear;
SQL.Add('SELECT DISTINCT d.*, d1.DEPNAME');
SQL.Add('FROM "Employee.DB" d,"Department.DB" d1');
SQL.Add('where (d.EMPID=:Para1) and (d.DEPID=d1.DEPID)');
ParamByName('Para1').AsInteger := Data.ID;
Prepare;
Open;
if Data.Kind = nkEmployee then
HintText := '職員編號: ' + IntToStr(Data.ID) + #13#10 +
'姓名: ' + Data.Caption + #13#10 +
'工資:' + IntToStr(FieldByName('Pay').AsInteger)
else if Data.Kind = nkDepartment then
HintText := '部門名稱: ' + Data.Caption
else
HintText := '公司名稱: ' + Data.Caption;
finally
SQL.Clear;
Close;
DisableControls;
end;
end;
end;
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
PNode: PVirtualNode;
AStr: string;
EMPID: integer;
begin
if not InputQuery('公司職員','請輸入職員編號:', AStr) then Exit;
try
EMPID := StrToInt(AStr);
except
MessageDlg('輸入的編號無效!',mtError,[mbOK],0);
Exit;
end;
PNode := FindChild(Controltree,Controltree.RootNode,EMPID);
if PNode<>nil then begin
Controltree.SetFocus;
Controltree.Selected[PNode] := True;
Controltree.FocusedNode := PNode;
end
else
MessageDlg('該職員編號不存在!',mtError,[mbOK],0);
end;
procedure TForm1.ControlTreeFocusChanged(Sender: TBaseVirtualTree;
Node: PVirtualNode; Column: TColumnIndex);
var
Data: PEntry;
EMPPAY: integer;
S: string;
begin
Data := ControlTree.GetNodeData(Node);
if not Assigned(Data) then Exit;
if Data.Kind = nkEmployee then begin
with Query1 do begin
try
DisableControls;
Close;
SQL.Clear;
SQL.Text := 'SELECT pay FROM Employee.DB WHERE(EMPID=:Para1)';
ParamByName('Para1').AsInteger := Data.ID;
Prepare;
Open;
EMPPAY := FieldByName('pay').AsInteger;
finally
SQL.Clear;
Close;
DisableControls;
end;
end;
S := '職員編號: ' + IntToStr(Data.ID) + #13#10 +
'姓名: ' + Data.Caption + #13#10 +
'工資:' + IntToStr(EMPPAY);
Showmessage(S);
end;
end;
end.
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -