⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 treedbed.pas

📁 第三方控件:PaintGrid.pas 网格型仪表控件源文件 Mymeter.pas 圆型仪表控件源文件 Project1是这两个控件的使用范例。 该
💻 PAS
📖 第 1 页 / 共 2 页
字号:
{**********************************************}
{   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 + -