📄 jvdyncontrolenginedbtools.pas
字号:
begin
FForm.ClientWidth := ChangedSize;
end;
procedure TJvDynControlDataSourceEditDialog.ArrangePanelChangedHeight(Sender: TObject; ChangedSize: Integer);
begin
if Assigned(FNavigatorPanel) then
FForm.ClientHeight := ChangedSize + FButtonPanel.Height + FNavigatorPanel.Height + 35
else
FForm.ClientHeight := ChangedSize + FButtonPanel.Height + 35;
end;
type
TAccessControl = class(TControl);
function TJvDynControlDataSourceEditDialog.CreateDynControlDialog(var AMainPanel: TWinControl): TCustomForm;
var
DynControlEngine: TJvDynControlEngine;
Form: TCustomForm;
PostButton, CancelButton, CloseButton: TButtonControl;
LeftPos: Integer;
DynCtrlButton: IJvDynControlButton;
DynCtrlAction: IJvDynControlAction;
function CalcButtonWidth (ACaptionWidth: Integer; AGlyph: TBitmap) : Integer;
begin
Result := 4;
if Assigned(AGlyph) then
Result := Result + AGlyph.Width;
if ACaptionWidth > 0 then
begin
Result := Result + ACaptionWidth;
if ACaptionWidth > 0 then
Result := Result + 4;
end;
end;
begin
DynControlEngine := DynControlEngineDB.DynControlEngine;
Form := DynControlEngine.CreateForm(DialogCaption, '');
TForm(Form).Position := Position;
TForm(Form).BorderStyle := BorderStyle;
TForm(Form).Top := Top;
TForm(Form).Left := Left;
TForm(Form).Height := Height;
TForm(Form).Width := Width;
with TForm(Form) do
begin
FormStyle := fsNormal;
BorderIcons := [];
end;
FButtonPanel := DynControlEngine.CreatePanelControl(Form, Form, '', '', alBottom);
FButtonPanel.Width := Form.ClientWidth;
AMainPanel := DynControlEngine.CreatePanelControl(Form, Form, '', '', alClient);
LeftPos := FButtonPanel.Width;
if (CloseButtonCaption <> '') or Assigned(CloseButtonGlyph) then
begin
CloseButton := DynControlEngine.CreateButton(Form, FButtonPanel, '', CloseButtonCaption, '', OnCloseButtonClick,
True, False);
FButtonPanel.Height := CloseButton.Height + 6;
CloseButton.Top := 3;
CloseButton.Anchors := [akTop, akRight];
CloseButton.Width := CalcButtonWidth(Form.Canvas.TextWidth(CloseButtonCaption), CloseButtonGlyph);
CloseButton.Left := LeftPos - CloseButton.Width - 5;
LeftPos := CloseButton.Left;
CloseButton.TabOrder := 0;
if Supports(CloseButton, IJvDynControlButton, DynCtrlButton) then
begin
DynCtrlButton.ControlSetDefault(True);
DynCtrlButton.ControlSetCancel(True);
if Assigned(CloseButtonGlyph) then
DynCtrlButton.ControlSetGlyph(CloseButtonGlyph);
end;
end;
if (CancelButtonCaption <> '') or Assigned(CancelButtonGlyph) then
begin
CancelButton := DynControlEngine.CreateButton(Form, FButtonPanel, '', CancelButtonCaption, '', OnCancelButtonClick,
True, False);
if Supports(CancelButton, IJvDynControlAction, DynCtrlAction) then
begin
FCancelAction := TJvDatabaseCancelAction.Create (Form);
FCancelAction.Caption := CancelButtonCaption;
DynCtrlAction.ControlSetAction(FCancelAction);
end
else
FCancelAction := nil;
FButtonPanel.Height := CancelButton.Height + 6;
CancelButton.Top := 3;
CancelButton.Anchors := [akTop, akRight];
CancelButton.Width := CalcButtonWidth(Form.Canvas.TextWidth(CancelButtonCaption), CancelButtonGlyph);
CancelButton.Left := LeftPos - CancelButton.Width - 5;
LeftPos := CancelButton.Left;
CancelButton.TabOrder := 0;
if Supports(CancelButton, IJvDynControlButton, DynCtrlButton) then
begin
DynCtrlButton.ControlSetDefault (False);
DynCtrlButton.ControlSetCancel(False);
if Assigned(CancelButtonGlyph) then
DynCtrlButton.ControlSetGlyph(CancelButtonGlyph);
end;
end;
if (PostButtonCaption <> '') or Assigned(PostButtonGlyph) then
begin
PostButton := DynControlEngine.CreateButton(Form, FButtonPanel, '', PostButtonCaption, '', OnPostButtonClick, True,
False);
FButtonPanel.Height := PostButton.Height + 6;
if Supports(PostButton, IJvDynControlAction, DynCtrlAction) then
begin
FPostAction := TJvDatabasePostAction.Create (Form);
FPostAction.Caption := PostButtonCaption;
DynCtrlAction.ControlSetAction(FPostAction);
end
else
FPostAction := nil;
PostButton.Top := 3;
PostButton.Anchors := [akTop, akRight];
PostButton.Width := CalcButtonWidth(Form.Canvas.TextWidth(PostButtonCaption), PostButtonGlyph);
PostButton.Left := LeftPos - PostButton.Width - 5;
PostButton.TabOrder := 0;
if Supports(PostButton, IJvDynControlButton, DynCtrlButton) then
begin
DynCtrlButton.ControlSetDefault (False);
DynCtrlButton.ControlSetCancel(False);
if Assigned(PostButtonGlyph) then
DynCtrlButton.ControlSetGlyph(PostButtonGlyph);
end;
end;
Result := Form;
end;
function TJvDynControlDataSourceEditDialog.ShowDialog: TModalResult;
var
MainPanel: TWinControl;
ArrangePanel: TJvPanel;
Navigator: TControl;
begin
FForm := CreateDynControlDialog(MainPanel);
try
FScrollBox := TScrollBox.Create(FForm);
FScrollBox.Parent := MainPanel;
FScrollBox.Align := alClient;
FScrollBox.BorderStyle := bsNone;
FScrollBox.AutoScroll := True;
FForm.Constraints := ArrangeConstraints;
ArrangePanel := TJvPanel.Create(FForm);
with ArrangePanel do
begin
Align := alTop;
BevelInner := bvNone;
BevelOuter := bvNone;
Parent := FScrollBox;
OnChangedWidth := ArrangePanelChangedWidth;
OnChangedHeight := ArrangePanelChangedHeight;
end;
ArrangePanel.ArrangeSettings := ArrangeSettings;
if ArrangeSettings.MaxWidth = 0 then
ArrangePanel.ArrangeSettings.MaxWidth := ArrangeConstraints.MaxWidth;
if ArrangeSettings.MaxWidth = 0 then
ArrangeSettings.MaxWidth := Screen.Width;
if IncludeNavigator then
begin
FNavigatorPanel := TJvPanel.Create(FForm);
Navigator := DynControlEngineDB.CreateDBNavigatorControl(FForm, FNavigatorPanel, '', DataSource);
Navigator.Left := 3;
Navigator.Top := 3;
with FNavigatorPanel do
begin
Align := alBottom;
BevelInner := bvNone;
BevelOuter := bvNone;
Parent := MainPanel;
Height := Navigator.Height + 6;
end;
end
else
FNavigatorPanel := nil;
if Assigned(OnCreateDataControlsEvent) then
OnCreateDataControlsEvent(DynControlEngineDB, ArrangePanel, FieldCreateOptions)
else
DynControlEngineDB.CreateControlsFromDataComponentOnControl(DataComponent, ArrangePanel, FieldCreateOptions);
if Assigned (FCancelAction) then
TJvDatabaseCancelAction(FCancelAction).DataComponent := DataComponent;
if Assigned (FPostAction) then
TJvDatabaseCancelAction(FPostAction).DataComponent := DataComponent;
// ArrangePanel.ArrangeControls;
ArrangePanel.ArrangeSettings.AutoArrange := True;
MainPanel.TabOrder := 0;
Result := FForm.ShowModal;
finally
FForm.Free;
end;
end;
function ShowDataSourceEditDialog(ADataComponent: TComponent;
const ADialogCaption, APostButtonCaption, ACancelButtonCaption, ACloseButtonCaption: string;
AIncludeNavigator: Boolean;
AFieldCreateOptions: TJvCreateDBFieldsOnControlOptions = nil;
AArrangeConstraints: TSizeConstraints = nil;
AArrangeSettings: TJvArrangeSettings = nil;
ADynControlEngineDB: TJvDynControlEngineDB = nil): TModalResult;
var
Dialog: TJvDynControlDataSourceEditDialog;
begin
Dialog := TJvDynControlDataSourceEditDialog.Create;
try
Dialog.DataComponent := ADataComponent;
Dialog.DialogCaption := ADialogCaption;
Dialog.PostButtonCaption := APostButtonCaption;
Dialog.CancelButtonCaption := ACancelButtonCaption;
Dialog.CloseButtonCaption := ACloseButtonCaption;
Dialog.IncludeNavigator := AIncludeNavigator;
Dialog.DynControlEngineDB := ADynControlEngineDB;
if Assigned(AFieldCreateOptions) then
Dialog.FieldCreateOptions := AFieldCreateOptions;
if Assigned(AArrangeSettings) then
Dialog.ArrangeSettings := AArrangeSettings;
if Assigned(AArrangeConstraints) then
Dialog.ArrangeConstraints := AArrangeConstraints;
Result := Dialog.ShowDialog;
finally
Dialog.Free;
end;
end;
{$IFDEF UNITVERSIONING}
initialization
RegisterUnitVersion(HInstance, UnitVersioning);
finalization
UnregisterUnitVersion(HInstance);
{$ENDIF UNITVERSIONING}
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -