📄 treedbed.pas
字号:
{**********************************************}
{ TTree Component - DBTree Editor dialog }
{ Copyright (c) 1998-2002 by David Berneda }
{**********************************************}
{$I TeeDefs.inc}
unit TreeDBEd;
interface
uses
{$IFNDEF LINUX}
Windows, Messages,
{$ENDIF}
SysUtils, Classes,
{$IFDEF CLX}
QGraphics, QControls, QForms, QDialogs, QStdCtrls, QExtCtrls, QMenus,
{$ELSE}
Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Menus,
{$ENDIF}
{$IFDEF CLR}
Contnrs,
{$ENDIF}
TeeTree, TeeProcs, TeeDBTre, DB, TeCanvas;
type
TFormDBTree = class(TForm)
Panel1: TPanel;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Panel2: TPanel;
Label1: TLabel;
RadioButton1: TRadioButton;
Memo2: TMemo;
RadioButton2: TRadioButton;
Memo4: TMemo;
RadioButton3: TRadioButton;
Memo6: TMemo;
Panel3: TPanel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
CBDataSet: TComboFlat;
ComboBox2: TComboFlat;
ComboBox3: TComboFlat;
ComboBox4: TComboFlat;
Label6: TLabel;
ComboBox5: TComboFlat;
Label7: TLabel;
ComboBox6: TComboFlat;
Button4: TButton;
Button5: TButton;
BApply: TButton;
Button7: TButton;
CheckBox1: TCheckBox;
Panel4: TPanel;
Label8: TLabel;
Label9: TLabel;
Memo1: TMemo;
Memo3: TMemo;
Memo5: TMemo;
TreePreview: TTree;
TreeShape1: TTreeNodeShape;
TreeShape2: TTreeNodeShape;
TreeShape3: TTreeNodeShape;
TreeShape4: TTreeNodeShape;
TreeShape1_TreeShape2: TTreeConnection;
TreeShape1_TreeShape3: TTreeConnection;
TreeShape1_TreeShape4: TTreeConnection;
BNewDataSet: TButton;
Button6: TButton;
Button8: TButton;
Button9: TButton;
Button10: TButton;
procedure RadioButton1Click(Sender: TObject);
procedure RadioButton2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure RadioButton3Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Memo2Click(Sender: TObject);
procedure Memo4Click(Sender: TObject);
procedure Memo6Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure CBDataSetChange(Sender: TObject);
procedure ComboBox5Change(Sender: TObject);
procedure ComboBox2Change(Sender: TObject);
procedure ComboBox3Change(Sender: TObject);
procedure ComboBox4Change(Sender: TObject);
procedure ComboBox6Change(Sender: TObject);
procedure BApplyClick(Sender: TObject);
procedure Button7Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure CheckBox1Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure Button8Click(Sender: TObject);
procedure Button9Click(Sender: TObject);
procedure Button10Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
ADataSet : TDataSet;
ACodeField : String;
AParentField : String;
ATextFields : String;
ADetail : TDataSet;
ADetailFields : String;
AFormatMaster : TTreeNodeShape;
AHeaderMaster : TTreeNodeShape;
AFormatDetail : TTreeNodeShape;
AHeaderDetail : TTreeNodeShape;
Procedure Changed;
procedure EditShape(AShape:TTreeNodeShape);
Procedure FillDataSets(AItems:TStrings; MastersOnly:Boolean; AMaster:TDataSet);
Procedure FillFields(tmpDataSet:TDataSet; AItems:TStrings; OnlyNumeric:Boolean);
procedure OnShowEditor(Sender:TObject);
public
{ Public declarations }
Tree1 : TCustomDBTree;
Procedure FillControls;
procedure FillTree;
end;
Const
TreeMsg_FieldSeparator = ';';
Procedure EditDBTree(Owner:TComponent; ATree:TCustomDBTree);
Procedure ShowDBTreeEditor(Owner:TComponent; ADBTree:TCustomDBTree);
Function ChooseFields( Const AText:String; AItems:TStrings;
Const ACaption:String):String;
implementation
{$IFNDEF CLX}
{$R *.DFM}
{$ELSE}
{$R *.xfm}
{$ENDIF}
Uses TreeConst, TreeShEd, TreeEd, TeeSelectList, TeePenDlg, TeeTranslate;
Procedure ShowDBTreeEditor(Owner:TComponent; ADBTree:TCustomDBTree);
begin
With TFormDBTree.Create(Owner) do
try
Tree1:=ADBTree;
ShowModal;
finally
Free;
end;
end;
type TDBTreeMenuItem=class(TMenuItem)
private
Procedure ClickedDBItem(Sender:TObject);
end;
Procedure TDBTreeMenuItem.ClickedDBItem(Sender:TObject);
Var AOwner:TComponent;
begin
AOwner:=TComponent(Sender).Owner;
ShowDBTreeEditor(AOwner,TCustomDBTree(TTreeEditor(AOwner).TheTree));
end;
Procedure DBTreeNotifyEdit(Sender:TTreeEditor);
var m:TDBTreeMenuItem;
begin
With Sender do
begin
m:=TDBTreeMenuItem.Create(Sender);
m.Caption:=TeeMsg_TreeDBWizard;
m.OnClick:=m.ClickedDBItem;
Tools1.Add(m);
end;
end;
Procedure EditDBTree(Owner:TComponent; ATree:TCustomDBTree);
begin
EditTreeEvent(Owner,ATree as TCustomTree,DBTreeNotifyEdit);
end;
procedure TFormDBTree.RadioButton1Click(Sender: TObject);
begin
Memo1.Visible:=True;
Memo3.Visible:=False;
Memo5.Visible:=False;
ADetail:=nil;
ADetailFields:='';
FillTree;
if Panel3.Visible then FillControls;
end;
procedure TFormDBTree.RadioButton2Click(Sender: TObject);
begin
ACodeField:='';
ADetail:=nil;
ADetailFields:='';
ComboBox2.Text:='';
ComboBox2.ItemIndex:=-1;
Memo1.Visible:=False;
Memo3.Visible:=True;
Memo5.Visible:=False;
FillTree;
if Panel3.Visible then FillControls;
end;
procedure TFormDBTree.FillTree;
begin
With TreePreview do
if RadioButton1.Checked then
begin
Clear;
With AddRoot('Continents') do
begin
With AddChild('Africa') do
AddChild('SouthAfrica');
With AddChild('America') do
begin
With AddChild('USA') do
AddChild('California');
end;
With AddChild('Australia') do
AddChild('Sydney');
end;
end
else
if RadioButton2.Checked then
begin
Clear;
With AddRoot('Country') do
begin
With AddChild('Australia') do
begin
AddChild('Camberra');
AddChild('Sydney');
end;
With AddChild('UK') do
begin
AddChild('Manchester');
AddChild('Liverpool');
AddChild('London');
end;
With AddChild('USA') do
begin
AddChild('Chicago');
AddChild('Michigan');
AddChild('New York');
end;
end;
end
else
if RadioButton3.Checked then
begin
Clear;
With AddRoot('Department') do
begin
With AddChild('Accounting') do
With AddChild('John') do
AddChild('April $1000');
With AddChild('Management') do
With AddChild('Chris') do
begin
AddChild('March $900');
AddChild('April $700');
end;
With AddChild('Sales') do
With AddChild('Anne') do
AddChild('June $500');
end;
end;
TreePreview.FullExpandCollapse(True);
end;
procedure TFormDBTree.Button3Click(Sender: TObject);
begin
if (not BApply.Enabled) or TeeYesNo(TreeMsg_SureToCancel) then
ModalResult:=mrCancel;
end;
procedure TFormDBTree.FormShow(Sender: TObject);
begin
if Assigned(Tree1) then
With Tree1 do
begin
ADataSet :=DataSet;
ACodeField :=CodeField;
AParentField :=ParentField;
ATextFields :=TextFields;
ADetail :=Detail;
ADetailFields :=DetailFields;
AFormatMaster :=TTreeNodeShape.Create(nil);
AFormatDetail :=TTreeNodeShape.Create(nil);
AHeaderMaster :=TTreeNodeShape.Create(nil);
AHeaderDetail :=TTreeNodeShape.Create(nil);
if Layout.Count>0 then
begin
AFormatMaster.Assign(Layout[0].Format);
AHeaderMaster.Assign(Layout[0].HeaderFormat);
if Layout.Count>1 then
begin
AFormatDetail.Assign(Layout[1].Format);
AHeaderDetail.Assign(Layout[1].HeaderFormat);
end;
end;
CheckBox1.Checked:=MultiLineText;
end;
if ACodeField<>'' then
RadioButton1.Checked:=True
else
if Assigned(ADetail) then
RadioButton3.Checked:=True
else
RadioButton2.Checked:=True;
if Assigned(ADataSet) then Button1Click(Self)
else FillTree;
BApply.Enabled:=False;
end;
procedure TFormDBTree.RadioButton3Click(Sender: TObject);
begin
Memo1.Visible:=False;
Memo3.Visible:=False;
Memo5.Visible:=True;
FillTree;
if Panel3.Visible then FillControls;
end;
procedure TFormDBTree.FormCreate(Sender: TObject);
begin
TeeTranslateControl(Self);
BApply.Enabled:=False;
Button2.Enabled:=False;
Panel3.Visible:=False;
Panel4.Visible:=True;
Panel3.SendToBack;
Panel4.BringToFront;
Panel4.Align:=alClient;
with TreePreview.GlobalFormat do
begin
Border.Visible:=False;
Transparent:=True;
end;
end;
procedure TFormDBTree.Memo2Click(Sender: TObject);
begin
RadioButton1.Checked:=True;
RadioButton1Click(Sender);
end;
procedure TFormDBTree.Memo4Click(Sender: TObject);
begin
RadioButton2.Checked:=True;
RadioButton2Click(Sender);
end;
procedure TFormDBTree.Memo6Click(Sender: TObject);
begin
RadioButton3.Checked:=True;
RadioButton3Click(Sender);
end;
Procedure TFormDBTree.FillControls;
Procedure SetComboIndex(ACombo:TComboBox; Const AText:String);
var tmp:Integer;
begin
ACombo.ItemIndex:=-1;
if AText='' then ACombo.Text:=''
else
begin
tmp:=ACombo.Items.IndexOf(AText);
if tmp<>-1 then ACombo.ItemIndex:=tmp
else ACombo.Text:=AText;
end;
end;
begin
TreePreview.Visible:=False;
Panel4.Visible:=False;
Panel4.SendToBack;
Panel3.Visible:=True;
Panel3.BringToFront;
Panel3.Align:=alClient;
Button1.Caption:=TreeMsg_Finish;
Button2.Enabled:=True;
Label3.Visible:=RadioButton1.Checked;
ComboBox2.Visible:=Label3.Visible;
if RadioButton1.Checked then Label4.Caption:=TreeMsg_ParentField
else Label4.Caption:=TreeMsg_GroupField;
if RadioButton3.Checked then Label5.Caption:=TreeMsg_MasterFields
else Label5.Caption:=TreeMsg_TextFields;
if RadioButton3.Checked then Label2.Caption:=TreeMsg_MasterDataSet
else Label2.Caption:=TreeMsg_DataSet;
ShowControls(RadioButton3.Checked,
[Label6,Label7,ComboBox5,ComboBox6,Button5,Button9,Button10]);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -