📄 jvqparameterlist.pas
字号:
end;
procedure TJvParameterList.Notification(AComponent: TComponent; Operation: TOperation);
begin
inherited Notification(AComponent, Operation);
if Operation = opRemove then
begin
if AComponent = ScrollBox then
ScrollBox := nil;
if AComponent = RightPanel then
RightPanel := nil;
if AComponent = ArrangePanel then
ArrangePanel := nil;
if AComponent = FParameterListPropertyStore then
FParameterListPropertyStore := nil;
if AComponent = OkButton then
OkButton := nil;
end;
end;
procedure TJvParameterList.SetDynControlEngine(Value: TJvDynControlEngine);
begin
FDynControlEngine := Value;
end;
procedure TJvParameterList.StoreData;
begin
if (AppStoragePath <> '') and Assigned(AppStorage) then
FParameterListPropertyStore.StoreData;
end;
procedure TJvParameterList.LoadData;
begin
if (AppStoragePath <> '') and Assigned(AppStorage) then
FParameterListPropertyStore.LoadData;
end;
procedure TJvParameterList.OnOkButtonClick(Sender: TObject);
begin
if ValidateDataAtWinControls then
ParameterDialog.ModalResult := mrOk;
end;
procedure TJvParameterList.OnCancelButtonClick(Sender: TObject);
begin
ParameterDialog.ModalResult := mrCancel;
end;
procedure TJvParameterList.OnEnterParameterControl(Sender: TObject);
var
I: Integer;
begin
if Assigned(Sender) then
for I := 0 to Count - 1 do
if Parameters[I].WinControl = Sender then
begin
if Assigned(Parameters[I].OnEnterParameter) then
Parameters[I].OnEnterParameter(Self, Parameters[I]);
Break;
end;
end;
procedure TJvParameterList.OnExitParameterControl(Sender: TObject);
var
I: Integer;
begin
if Assigned(Sender) then
for I := 0 to Count - 1 do
if Parameters[I].WinControl = Sender then
begin
if Assigned(Parameters[I].OnExitParameter) then
Parameters[I].OnExitParameter(Self, Parameters[I]);
Break;
end;
HandleEnableDisable;
end;
procedure TJvParameterList.OnChangeParameterControl(Sender: TObject);
begin
HandleEnableDisable;
end;
procedure TJvParameterList.OnClickParameterControl(Sender: TObject);
begin
end;
type
TCustomControlAccessProtected = class(TCustomControl);
procedure TJvParameterList.CreateParameterDialog;
var
CancelButton: TWinControl;
LoadButton, SaveButton, ClearButton: TWinControl;
ButtonLeft: Integer;
ITmpPanel: IJvDynControlPanel;
begin
FreeAndNil(FParameterDialog);
FParameterDialog := DynControlEngine.CreateForm(Messages.Caption, '');
with TForm(ParameterDialog) do
begin
BorderIcons := [];
BorderStyle := fbsDialog;
FormStyle := fsNormal;
Position := poScreenCenter;
OnShow := DialogShow;
end;
if Height > 0 then
ParameterDialog.Height := Height;
if Width > 0 then
ParameterDialog.Width := Width;
BottomPanel := DynControlEngine.CreatePanelControl(Self, ParameterDialog, 'BottomPanel', '', alBottom);
if not Supports(BottomPanel, IJvDynControlPanel, ITmpPanel) then
raise EIntfCastError.CreateRes(@RsEIntfCastError);
with ITmpPanel do
ControlSetBorder(bvNone, bvRaised, 1, bsNone, 0);
MainPanel := DynControlEngine.CreatePanelControl(Self, ParameterDialog, 'MainPanel', '', alClient);
if not Supports(MainPanel, IJvDynControlPanel, ITmpPanel) then
raise EIntfCastError.CreateRes(@RsEIntfCastError);
with ITmpPanel do
ControlSetBorder(bvNone, bvRaised, 1, bsNone, 3);
ButtonPanel := DynControlEngine.CreatePanelControl(Self, BottomPanel, 'BottonPanel', '', alRight);
if not Supports(ButtonPanel, IJvDynControlPanel, ITmpPanel) then
raise EIntfCastError.CreateRes(@RsEIntfCastError);
with ITmpPanel do
ControlSetBorder(bvNone, bvNone, 0, bsNone, 0);
OkButton := DynControlEngine.CreateButton(Self, ButtonPanel, 'OkButton', Messages.OkButton, '',
OnOkButtonClick, True, False);
CancelButton := DynControlEngine.CreateButton(Self, ButtonPanel, 'CancelButton', Messages.CancelButton, '',
OnCancelButtonClick, False, True);
BottomPanel.Height := OkButton.Height + 6 + 2;
OkButton.Top := 3;
OkButton.Left := 3;
OkButton.Visible := OkButtonVisible;
OkButton.Enabled := OkButtonVisible;
if OkButton.Visible then
ButtonLeft := OkButton.Left + OkButton.Width + 3
else
ButtonLeft := 0;
CancelButton.Top := 3;
CancelButton.Left := ButtonLeft + 3;
CancelButton.Visible := CancelButtonVisible;
CancelButton.Enabled := CancelButtonVisible;
if CancelButton.Visible then
ButtonLeft := ButtonLeft + 3 + CancelButton.Width + 3;
ButtonPanel.Width := ButtonLeft + 3;
OrgButtonPanelWidth := ButtonLeft + 3;
OkButton.Anchors := [akTop, akRight];
CancelButton.Anchors := [akTop, akRight];
if HistoryEnabled and (AppStoragePath <> '') then
begin
HistoryPanel := DynControlEngine.CreatePanelControl(Self, BottomPanel, 'HistoryPanel', '', alLeft);
if not Supports(HistoryPanel, IJvDynControlPanel, ITmpPanel) then
raise EIntfCastError.CreateRes(@RsEIntfCastError);
with ITmpPanel do
ControlSetBorder(bvNone, bvNone, 0, bsNone, 0);
with HistoryPanel do
Height := 25;
LoadButton := DynControlEngine.CreateButton(Self, HistoryPanel, 'LoadButton', Messages.HistoryLoadButton, '',
HistoryLoadClick, False, False);
with LoadButton do
begin
Left := 6;
Top := 5;
Height := 20;
Width := TCustomControlAccessProtected(HistoryPanel).Canvas.TextWidth(Messages.HistoryLoadButton) + 5;
ButtonLeft := Left + Width + 5;
end;
SaveButton := DynControlEngine.CreateButton(Self, HistoryPanel, 'SaveButton', Messages.HistorySaveButton, '',
HistorySaveClick, False, False);
with SaveButton do
begin
Left := ButtonLeft;
Top := 5;
Height := 20;
Width := TCustomControlAccessProtected(HistoryPanel).Canvas.TextWidth(Messages.HistorySaveButton) + 5;
ButtonLeft := Left + Width + 5;
end;
ClearButton := DynControlEngine.CreateButton(Self, HistoryPanel, 'ClearButton', Messages.HistoryClearButton, '',
HistoryClearClick, False, False);
with ClearButton do
begin
Left := ButtonLeft;
Top := 5;
Height := 20;
Width := TCustomControlAccessProtected(HistoryPanel).Canvas.TextWidth(Messages.HistoryClearButton) + 5;
ButtonLeft := Left + Width + 5;
end;
HistoryPanel.Width := ButtonLeft;
OrgHistoryPanelWidth := ButtonLeft;
end
else
HistoryPanel := nil;
CreateWinControlsOnParent(MainPanel);
with MainPanel do
ResizeDialogAfterArrange(nil, Left, Top, Width, Height);
end;
procedure TJvParameterList.ResizeDialogAfterArrange(Sender: TObject; nLeft, nTop, nWidth, nHeight: Integer);
begin
if (Width <= 0) or (ArrangeSettings.AutoSize in [asWidth, asBoth]) then
if ArrangePanel.Width > TForm(ParameterDialog).ClientWidth then
if ArrangePanel.Width > MaxWidth then
TForm(ParameterDialog).ClientWidth := MaxWidth
else
TForm(ParameterDialog).ClientWidth := ArrangePanel.Width+5
else
TForm(ParameterDialog).ClientWidth := ArrangePanel.Width+5;
if Assigned(HistoryPanel) and
(TForm(ParameterDialog).ClientWidth < HistoryPanel.Width) then
TForm(ParameterDialog).ClientWidth := HistoryPanel.Width
else
if TForm(ParameterDialog).ClientWidth < ButtonPanel.Width then
TForm(ParameterDialog).ClientWidth := ButtonPanel.Width;
if (Height <= 0) or (ArrangeSettings.AutoSize in [asHeight, asBoth]) then
if ArrangePanel.Height + BottomPanel.Height > TForm(ParameterDialog).ClientHeight then
if ArrangePanel.Height + BottomPanel.Height > MaxHeight then
TForm(ParameterDialog).ClientHeight := MaxHeight + 10
else
TForm(ParameterDialog).ClientHeight := ArrangePanel.Height + BottomPanel.Height + 10
else
TForm(ParameterDialog).ClientHeight := ArrangePanel.Height + BottomPanel.Height + 10;
if Assigned(HistoryPanel) then
if (OrgButtonPanelWidth + OrgHistoryPanelWidth) > BottomPanel.Width then
begin
ButtonPanel.Align := alBottom;
ButtonPanel.Height := OkButton.Height + 6 + 2;
BottomPanel.Height := ButtonPanel.Height * 2 + 1;
HistoryPanel.Align := alClient;
end
else
begin
ButtonPanel.Align := alRight;
ButtonPanel.Width := OrgButtonPanelWidth;
HistoryPanel.Align := alLeft;
HistoryPanel.Width := OrgHistoryPanelWidth;
BottomPanel.Height := OkButton.Height + 6 + 2;
end;
CheckScrollBoxAutoScroll;
end;
procedure TJvParameterList.CheckScrollBoxAutoScroll;
begin
if not Assigned(ScrollBox) then
Exit;
if not Assigned(ArrangePanel) then
Exit;
RightPanel.Visible := False;
ScrollBox.AutoScroll := False;
if (ArrangePanel.Width >= (TForm(ParameterDialog).ClientWidth)) or
(ArrangePanel.Height > (TForm(ParameterDialog).ClientHeight-BottomPanel.Height))then
begin
RightPanel.Visible := True;
TForm(ParameterDialog).ClientWidth := TForm(ParameterDialog).ClientWidth + RightPanel.Width+4;
ScrollBox.AutoScroll := True;
end;
// if (ArrangePanel.Height > (ScrollBox.Height+3)) {OR
/// (ArrangePanel.Height > MaxHeight) }then
// ScrollBox.AutoScroll := True;
end;
function TJvParameterList.ShowParameterDialog: Boolean;
begin
if Count = 0 then
EJVCLException.CreateRes(@RsENoParametersDefined);
CreateParameterDialog;
try
SetDataToWinControls;
ParameterDialog.ShowModal;
Result := ParameterDialog.ModalResult = mrOk;
if Result then
GetDataFromWinControls;
finally
FreeAndNil(FParameterDialog);
end;
end;
procedure TJvParameterList.ShowParameterDialogThread;
begin
ParameterDialog.ShowModal;
end;
type
TAccessThread = class(TThread);
function TJvParameterList.ShowParameterDialog(SynchronizeThread: TThread): Boolean;
begin
if Count = 0 then
EJVCLException.CreateRes(@RsENoParametersDefined);
CreateParameterDialog;
try
SetDataToWinControls;
if Assigned(SynchronizeThread) then
TAccessThread(SynchronizeThread).Synchronize(ShowParameterDialogThread)
else
ParameterDialog.ShowModal;
Result := ParameterDialog.ModalResult = mrOk;
if Result then
GetDataFromWinControls;
finally
FreeAndNil(FParameterDialog);
end;
end;
function TJvParameterList.GetParentByName(MainParent: TWinControl; const ASearchName: string): TWinControl;
var
Parameter: TJvBaseParameter;
I: Integer;
begin
Result := MainParent;
if (Trim(ASearchName) = '') or not Assigned(MainParent) then
Exit;
for I := 0 to Count - 1 do
if Parameters[I].Visible then
if UpperCase(Parameters[I].SearchName) = UpperCase(Trim(ASearchName)) then
begin
Parameter := Parameters[I];
if Parameter is TJvArrangeParameter then
begin
Result := TJvArrangeParameter(Parameter).ParentControl;
Break;
end;
end;
// else
// if Parameters[I] is TJvTabControlParameter then
// for J := 0 to TJvTabControlParameter(Parameters[I]).Tabs.Count - 1 do
// if Uppercase(Parameters[I].SearchName + '.' + TJvTabControlParameter(Parameters[I]).Tabs[J]) = Uppercase(SearchName) then
// begin
// Result := TWinControl(TJvTabControlParameter(Parameters[I]).TabWinControls.Objects[J]);
// break;
// end {*** IF Uppercase(TJvBaseParameter(Objects[I]).SearchName) = Uppercase(ASearchName) THEN ***}
end;
procedure TJvParameterList.HistoryLoadClick(Sender: TObject);
begin
ParameterListSelectList.RestoreParameterList(Messages.HistoryLoadCaption);
end;
procedure TJvParameterList.HistorySaveClick(Sender: TObject);
begin
ParameterListSelectList.SaveParameterList(Messages.HistorySaveCaption);
end;
procedure TJvParameterList.HistoryClearClick(Sender: TObject);
begin
ParameterListSelectList.ManageSelectList(Messages.HistoryClearCaption);
end;
procedure TJvParameterList.DialogShow(Sender: TObject);
var
I: Integer;
begin
for I := 0 to Count - 1 do
if Parameters[I].Visible then
if Assigned(Parameters[I].WinControl) then
if Parameters[I].WinControl.CanFocus then
begin
Parameters[I].WinControl.SetFocus;
Break;
end;
end;
function TJvParameterList.GetEnableDisableReasonState(ADisableReasons: TJvParameterListEnableDisableReasonList;
AEnableReasons: TJvParameterListEnableDisableReasonList): Integer;
var
J: Integer;
IEnable: Integer;
Reason: TJvParameterListEnableDisableReason;
SearchParameter: TJvBaseParameter;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -