📄 jvqparameterlist.pas
字号:
Data: Variant;
begin
IEnable := 0;
if AEnableReasons.Count > 0 then
begin
for J := 0 to AEnableReasons.Count - 1 do
begin
Reason := TJvParameterListEnableDisableReason(AEnableReasons.Objects[J]);
if not Assigned(Reason) then
Continue;
if VarIsNull(Reason.AsVariant) then
Continue;
SearchParameter := ParameterByName(Reason.RemoteParameterName);
if not Assigned(SearchParameter) then
Continue;
if not Assigned(SearchParameter.WinControl) then
Continue;
Data := SearchParameter.GetWinControlData;
if VarIsEmpty(Data) and Reason.IsEmpty and (IEnable <> -1) then
IEnable := 1;
if (not VarIsEmpty(Data)) and Reason.IsNotEmpty and (IEnable <> -1) then
IEnable := 1;
try
if (Reason.AsVariant = Data) and (IEnable <> -1) then
IEnable := 1;
except
end;
end;
if IEnable = 0 then
IEnable := -1;
end;
if ADisableReasons.Count > 0 then
begin
for J := 0 to ADisableReasons.Count - 1 do
begin
Reason := TJvParameterListEnableDisableReason(ADisableReasons.Objects[J]);
if not Assigned(Reason) then
Continue;
if VarIsNull(Reason.AsVariant) then
Continue;
SearchParameter := ParameterByName(Reason.RemoteParameterName);
if not Assigned(SearchParameter) then
Continue;
if not Assigned(SearchParameter.WinControl) then
Continue;
Data := SearchParameter.GetWinControlData;
if (VarIsEmpty(Data) or (VarToStr(Data) = '')) and Reason.IsEmpty then
IEnable := -1;
if (not (VarIsEmpty(Data) or (VarToStr(Data) = ''))) and Reason.IsNotEmpty then
IEnable := -1;
try
if Reason.AsVariant = Data then
IEnable := -1;
except
end;
end;
if IEnable = 0 then
IEnable := 1;
end;
Result := IEnable;
end;
procedure TJvParameterList.HandleEnableDisable;
var
I: Integer;
Parameter: TJvBaseParameter;
IEnable: Integer;
begin
for I := 0 to Count - 1 do
if Assigned(ParameterByIndex(I).WinControl) then
begin
Parameter := ParameterByIndex(I);
IEnable := GetEnableDisableReasonState(Parameter.DisableReasons, Parameter.EnableReasons);
case IEnable of
-1:
Parameter.Enabled := False;
1:
Parameter.Enabled := True;
end;
end;
if Assigned(OkButton) then
begin
IEnable := GetEnableDisableReasonState(OkButtonDisableReasons, OkButtonEnableReasons);
case IEnable of
-1:
OkButton.Enabled := False;
1:
OkButton.Enabled := True;
end;
end;
end;
procedure TJvParameterList.CreateWinControlsOnParent(ParameterParent: TWinControl);
var
I: Integer;
begin
FreeAndNil(ScrollBox);
ScrollBox := TScrollBox.Create(Self);
ScrollBox.Parent := ParameterParent;
with ScrollBox do
begin
AutoScroll := False;
BorderStyle := bsNone;
Align := alClient;
Width := ParameterParent.Width;
end;
RightPanel := TJvPanel.Create(Self);
RightPanel.Parent := ScrollBox;
with RightPanel do
begin
Align := alRight;
BorderStyle := bsNone;
BevelInner := bvNone;
BevelOuter := bvNone;
Width := 22; // asn: need to check this
Visible := False;
end;
FreeAndNil(ArrangePanel);
ArrangePanel := TJvPanel.Create(Self);
ArrangePanel.Parent := ScrollBox;
ArrangePanel.Name := 'MainArrangePanel';
with ArrangePanel do
begin
Transparent := False;
Align := alNone;
BorderStyle := bsNone;
BevelInner := bvNone;
BevelOuter := bvNone;
Caption := '';
Left := 0;
Top := 0;
OnResizeParent := ResizeDialogAfterArrange;
end;
ArrangePanel.ArrangeSettings := ArrangeSettings;
case ArrangePanel.ArrangeSettings.AutoSize of
asNone:
ArrangePanel.ArrangeSettings.AutoSize := asHeight;
asWidth:
ArrangePanel.ArrangeSettings.AutoSize := asBoth;
end;
if (Width > 0) and (ArrangePanel.ArrangeSettings.AutoSize = asHeight) then
ArrangePanel.Width := ScrollBox.Width - RightPanel.Width;
if MaxWidth > 0 then
ArrangePanel.ArrangeSettings.MaxWidth := MaxWidth - RightPanel.Width - 2;
try
ArrangePanel.DisableArrange;
for I := 0 to Count - 1 do
if Parameters[I].Visible then
begin
Parameters[I].CreateWinControlOnParent(
GetParentByName(ArrangePanel, Parameters[I].ParentParameterName));
Parameters[I].WinControlData := Parameters[I].AsVariant;
end;
for I := 0 to Count - 1 do
if Parameters[I].Visible and
(Parameters[I] is TJvArrangeParameter) then
TJvArrangeParameter(Parameters[I]).ArrangeControls;
HandleEnableDisable;
finally
ArrangePanel.EnableArrange;
end;
ArrangePanel.ArrangeControls;
end;
procedure TJvParameterList.DestroyWinControls;
begin
FreeAndNil(ArrangePanel);
FreeAndNil(ScrollBox);
end;
procedure TJvParameterList.GetDataFromWinControls;
var
I: Integer;
begin
for I := 0 to Count - 1 do
if Parameters[I].Visible then
Parameters[I].GetData;
end;
procedure TJvParameterList.SetDataToWinControls;
var
I: Integer;
begin
for I := 0 to Count - 1 do
if Parameters[I].Visible then
Parameters[I].SetData;
end;
function TJvParameterList.ValidateDataAtWinControls: Boolean;
var
I: Integer;
V: Variant;
B: Boolean;
begin
Result := False;
for I := 0 to Count - 1 do
if Parameters[I].Visible then
begin
V := Parameters[I].WinControlData;
B := Parameters[I].Validate(V);
Parameters[I].WinControlData := V;
if not B then
begin
if Assigned(Parameters[I].WinControl) then
Parameters[I].WinControl.SetFocus;
Exit;
end;
end;
Result := True;
end;
function TJvParameterList.GetCount: Integer;
begin
Result := IntParameterList.Count;
end;
function TJvParameterList.AddObject(const S: string; AObject: TObject): Integer;
begin
if not (AObject is TJvBaseParameter) then
raise EJVCLException.CreateRes(@RsEAddObjectWrongObjectType);
if TJvBaseParameter(AObject).SearchName = '' then
raise EJVCLException.CreateRes(@RsEAddObjectSearchNameNotDefined);
if IntParameterList.IndexOf(S) >= 0 then
raise Exception.CreateResFmt(@RsEAddObjectDuplicateSearchNamesNotAllowed, [S]);
TJvBaseParameter(AObject).ParameterList := Self;
Result := IntParameterList.AddObject(S, AObject);
end;
procedure TJvParameterList.SetArrangeSettings(Value: TJvArrangeSettings);
begin
FArrangeSettings.Assign(Value);
if Assigned(ArrangePanel) then
ArrangePanel.ArrangeSettings := ArrangeSettings;
end;
procedure TJvParameterList.SetParameters(Index: Integer; Value: TJvBaseParameter);
begin
if (Index >= 0) and (Index < IntParameterList.Count) then
IntParameterList.Objects[Index] := Value;
end;
function TJvParameterList.GetParameters(Index: Integer): TJvBaseParameter;
begin
if (Index >= 0) and (Index < IntParameterList.Count) then
Result := TJvBaseParameter(IntParameterList.Objects[Index])
else
Result := nil;
end;
function TJvParameterList.GetCurrentWidth: Integer;
begin
if Width > 0 then
Result := Width
else
if Assigned(ArrangePanel) then
if ArrangePanel.Align in [alTop, alBottom, alClient] then
Result := ArrangePanel.ArrangeWidth
else
Result := ArrangePanel.Width
else
Result := 0;
if Result > MaxWidth then
Result := MaxWidth;
end;
function TJvParameterList.GetCurrentHeight: Integer;
begin
if Height > 0 then
Result := Height
else
if Assigned(ArrangePanel) then
begin
if ArrangePanel.Align in [alLeft, alRight, alClient] then
Result := ArrangePanel.ArrangeHeight
else
Result := ArrangePanel.Height;
end
else
Result := 0;
if Result > MaxHeight then
Result := MaxHeight;
end;
procedure TJvParameterList.Clear;
begin
IntParameterList.Clear;
end;
//=== { TJvParameterListPropertyStore } ======================================
procedure TJvParameterListPropertyStore.LoadData;
var
I: Integer;
begin
if Assigned(AppStorage) then
with ParameterList do
for I := 0 to ParameterList.Count - 1 do
if not (Parameters[I] is TJvNoDataParameter) then
with Parameters[I] do
if StoreValueToAppStorage then
begin
if StoreValueCrypted then
AppStorage.EnablePropertyValueCrypt;
if Parameters[I] is TJvListParameter then
with TJvListParameter(Parameters[I]) do
ItemIndex := AppStorage.ReadInteger(AppStorage.ConcatPaths([AppStoragePath, SearchName]), ItemIndex)
else
AsString := AppStorage.ReadString(AppStorage.ConcatPaths([AppStoragePath, SearchName]), AsString);
if StoreValueCrypted then
AppStorage.DisablePropertyValueCrypt;
end;
end;
procedure TJvParameterListPropertyStore.StoreData;
var
I: Integer;
begin
if Assigned(AppStorage) then
with ParameterList do
for I := 0 to ParameterList.Count - 1 do
if not (Parameters[I] is TJvNoDataParameter) then
with Parameters[I] do
if StoreValueToAppStorage then
begin
if StoreValueCrypted then
AppStorage.EnablePropertyValueCrypt;
if Parameters[I] is TJvListParameter then
with TJvListParameter(Parameters[I]) do
AppStorage.WriteInteger(AppStorage.ConcatPaths([AppStoragePath, SearchName]), ItemIndex)
else
AppStorage.WriteString(AppStorage.ConcatPaths([AppStoragePath, SearchName]), AsString);
if StoreValueCrypted then
AppStorage.DisablePropertyValueCrypt;
end;
end;
//=== { TJvParameterListSelectList } =========================================
function TJvParameterListSelectList.GetDynControlEngine: TJvDynControlEngine;
begin
Result := FParameterList.DynControlEngine;
end;
function TJvParameterListSelectList.GetParameterList: TJvParameterList;
begin
Result := FParameterList;
end;
procedure TJvParameterListSelectList.SetParameterList(Value: TJvParameterList);
begin
FParameterList := Value;
end;
function TJvParameterListSelectList.GetAppStorage: TJvCustomAppStorage;
begin
if Assigned(FParameterList) then
Result := FParameterList.AppStorage
else
Result := nil;
end;
procedure TJvParameterListSelectList.SetAppStorage(Value: TJvCustomAppStorage);
begin
if Assigned(FParameterList) then
FParameterList.AppStorage := Value;
end;
procedure TJvParameterListSelectList.Notification(AComponent: TComponent; Operation: TOperation);
begin
inherited Notification(AComponent, Operation);
if (Operation = opRemove) and (AComponent = FParameterList) then
FParameterList := nil;
end;
procedure TJvParameterListSelectList.RestoreParameterList(const ACaption: string = '');
var
SavePath: string;
begin
if not Assigned(ParameterList) then
Exit;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -