📄 testeditmasterform.pas
字号:
unit TestEditMasterForm;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
DB, DBTables, Grids, ComCtrls, dbTree, DBGrids, DBCGrids, ExtCtrls, DBCtrls,
StdCtrls, Mask, dbTreeCBox, TestSelectForm, Menus;
type
TfrmEditMaster = class(TForm)
tblMaster: TTable;
dsMaster: TDataSource;
tblMasterNumber: TAutoIncField;
tblMasterTestLookup: TIntegerField;
tblMasterText: TStringField;
tblDetail: TTable;
dsDetail: TDataSource;
tblDetailID: TIntegerField;
tblDetailParent: TIntegerField;
tblDetailText: TStringField;
tblDetailTestCalc: TStringField; { to test calculated fields }
DbTreeLookupComboBox1: TDbTreeLookupComboBox;
DbTreeLookupComboBox2: TDbTreeLookupComboBox;
DbTreeLookupComboBox3: TDbTreeLookupComboBox;
DBGrid2: TDBGrid;
DBNavigator1: TDBNavigator;
DBNavigator2: TDBNavigator;
DBNavigator3: TDBNavigator;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Bevel1: TBevel;
Button1: TButton;
DBLookupComboBox1: TDBLookupComboBox;
TreeView1: TTreeView;
Label5: TLabel;
Label6: TLabel;
CheckBox1: TCheckBox;
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
function DbTreeLookupComboBox2CreateTreeSelect: TTreeSelect;
procedure DbTreeLookupComboBox3AcceptNode(Node: TTreeNode;
var Accept: Boolean);
procedure FormDestroy(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure tblDetailCalcFields(DataSet: TDataSet);
procedure Button1Click(Sender: TObject);
procedure CheckBox1Click(Sender: TObject);
end;
var
frmEditMaster: TfrmEditMaster;
implementation
{$R *.DFM}
procedure OpenTable(Table: TTable);
var
TableName: String;
begin
if Table.Active then
exit;
if (Table.DatabaseName = '') then
begin
TableName := Table.TableName;
if (Pos('.DB', UpperCase(TableName)) = 0) then
TableName := TableName + '.DB';
if FileExists(ExtractFilePath(Application.ExeName) +
TableName) then
Table.DatabaseName := ExtractFileDir(Application.ExeName)
else
begin
ShowMessage(
'Please set ' + Table.Name + '.DatabaseName to the location of ' +
TableName + ' or copy ' + TableName +
' to the location of ' + Application.ExeName);
halt;
end;
end;
Table.Open;
end;
procedure TfrmEditMaster.FormCreate(Sender: TObject);
begin
Screen.Cursor := crHourglass;
try
OpenTable(tblDetail);
OpenTable(tblMaster);
finally
{ We better stop the demo if something is wrong: }
if not (tblMaster.Active and tblDetail.Active) then
begin
Screen.Cursor := crDefault;
halt;
end;
end;
{ Create a special TreeSelect-form for DbTreeLookupComboBox2: }
{ If we give the special TreeSelect-form to DbTreeLookupComboBox2 now
(after the tables are open), the first dropdown of DbTreeLookupComboBox2
gets faster.
Look at unit TestSelectForm for details of TSampleTreeSelect. }
DbTreeLookupComboBox2.TreeSelect := TSampleTreeSelect.Create(self);
{ The first dropdown of DbTreeLookupComboBox1 gets faster too: }
DbTreeLookupComboBox1.PrepareDropdown;
Screen.Cursor := crDefault;
end;
procedure TfrmEditMaster.FormDestroy(Sender: TObject);
begin
tblDetail.Close;
tblMaster.Close;
end;
procedure TfrmEditMaster.FormCloseQuery(Sender: TObject;
var CanClose: Boolean);
begin
with tblMaster do
if (State in [dsEdit, dsInsert]) then
case MessageDlg(TableName + ' is still in edit-mode.' + #10 +
'Save changes ?',
mtConfirmation, mbYesNoCancel, 0) of
mrYes: Post;
mrNo: Cancel;
else CanClose := false;
end;
end;
function TfrmEditMaster.DbTreeLookupComboBox2CreateTreeSelect: TTreeSelect;
begin
result := nil; { no warning please, this event is for documentation only }
{ We can use this event to create a special TreeSelect-form for
DbTreeLookupComboBox2.
TDbTreeLookupComboBox.OnCreateTreeSelect gets called before the first
dropdown. This form will get destroyed at TfrmEditMaster.Destroy: }
{ result := TSampleTreeSelect.Create(self); }
end;
procedure TfrmEditMaster.DbTreeLookupComboBox3AcceptNode(Node: TTreeNode;
var Accept: Boolean);
begin
{ We will only accept the leaves of the tree: }
{ Obsolete since version 0.4 because dtAcceptLeavesOnly in Options: }
{ Accept := not Node.HasChildren; }
end;
procedure TfrmEditMaster.tblDetailCalcFields(DataSet: TDataSet);
begin
tblDetailTestCalc.Value := tblDetailText.Value;
end;
procedure TfrmEditMaster.Button1Click(Sender: TObject);
begin
close;
end;
procedure TfrmEditMaster.CheckBox1Click(Sender: TObject);
begin
with DbTreeLookupComboBox2.DBTreeView do
if CheckBox1.Checked then
Options := Options + [dtMouseMoveSelect]
else
Options := Options - [dtMouseMoveSelect];
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -