📄 jvqparameterlist.pas
字号:
begin
if Value then
AsVariant := cTrue
else
AsVariant := cFalse;
end;
function TJvBaseParameter.GetAsBoolean: Boolean;
var
S: string;
begin
if VarIsNull(FValue) then
Result := False
else
begin
S := AsVariant;
Result := UpperCase(S) = cTrue;
end;
end;
procedure TJvBaseParameter.SetAsDate(Value: TDateTime);
begin
AsVariant := VarFromDateTime(Value);
end;
function TJvBaseParameter.GetAsDate: TDateTime;
begin
if VarIsNull(FValue) then
Result := 0
else
Result := VarToDateTime(FValue);
end;
procedure TJvBaseParameter.SetAsVariant(Value: Variant);
begin
FValue := Value;
// if Assigned(FJvDynControlData) then
// FJvDynControlData.Value := Value;
end;
function TJvBaseParameter.GetAsVariant: Variant;
begin
// if Assigned(FJvDynControlData) then
// Result := FJvDynControlData.Value
// else
Result := FValue;
end;
procedure TJvBaseParameter.Notification(AComponent: TComponent; Operation: TOperation);
begin
inherited Notification(AComponent, Operation);
if (AComponent = FWinControl) and (Operation = opRemove) then
begin
FWinControl := nil;
FJvDynControl := nil;
FJvDynControlData := nil;
end;
end;
function TJvBaseParameter.GetWinControlData: Variant;
begin
Result := Null;
if Assigned(JvDynControlData) then
Result := JvDynControlData.ControlValue;
end;
procedure TJvBaseParameter.SetWinControlData(Value: Variant);
begin
if Assigned(JvDynControlData) then
try
JvDynControlData.ControlValue := Value;
except
on E: EVariantTypeCastError do
;
end;
end;
procedure TJvBaseParameter.SetSearchName(Value: string);
begin
FSearchName := Trim(Value);
end;
function TJvBaseParameter.GetDynControlEngine: TJvDynControlEngine;
begin
Result := nil;
if Assigned(ParameterList) then
Result := ParameterList.DynControlEngine;
end;
//type
// TWinControlAccessProtected = class(TWinControl);
procedure TJvBaseParameter.SetWinControl(Value: TWinControl);
begin
FJvDynControl := nil;
FWinControl := Value;
if not Assigned(Value) then
Exit;
Supports(FWinControl, IJvDynControl, FJvDynControl);
Supports(FWinControl, IJvDynControlData, FJvDynControlData);
SetWinControlProperties;
end;
procedure TJvBaseParameter.SetWinControlProperties;
var
IDynControlReadOnly: IJvDynControlReadOnly;
begin
if Assigned(WinControl) then
begin
JvDynControl.ControlSetCaption(Caption);
if Supports(FWinControl, IJvDynControlReadOnly, IDynControlReadOnly) then
begin
IDynControlReadOnly.ControlSetReadOnly(ReadOnly);
SetEnabled(FEnabled);
end
else
SetEnabled(FEnabled and not ReadOnly);
SetVisible(FVisible);
if FTabOrder >= 0 then
SetTabOrder(FTabOrder);
if FWidth > 0 then
SetWidth(FWidth);
if FHeight > 0 then
SetHeight(FHeight);
WinControl.Hint := Hint;
WinControl.Tag := Tag;
WinControl.HelpContext := HelpContext;
JvDynControl.ControlSetOnEnter(ParameterList.OnExitParameterControl);
JvDynControl.ControlSetOnExit(ParameterList.OnExitParameterControl);
if Assigned(JvDynControlData) then
JvDynControlData.ControlSetOnChange(ParameterList.OnChangeParameterControl);
end;
end;
function TJvBaseParameter.GetWinControl: TWinControl;
begin
Result := FWinControl
end;
procedure TJvBaseParameter.SetEnabled(Value: Boolean);
begin
FEnabled := Value;
if Assigned(WinControl) then
WinControl.Enabled := Value;
end;
procedure TJvBaseParameter.SetVisible(Value: Boolean);
begin
FVisible := Value;
if Assigned(WinControl) then
WinControl.Visible := Value;
end;
function TJvBaseParameter.GetHeight: Integer;
begin
if Assigned(ParameterList) and (FHeight <= 0) then
Result := ParameterList.DefaultParameterHeight
else
Result := FHeight;
end;
procedure TJvBaseParameter.SetHeight(Value: Integer);
begin
FHeight := Value;
if Assigned(WinControl) then
WinControl.Height := Value;
end;
function TJvBaseParameter.GetWidth: Integer;
begin
if Assigned(ParameterList) and (FWidth <= 0) then
Result := ParameterList.DefaultParameterWidth
else
Result := FWidth;
end;
procedure TJvBaseParameter.SetWidth(Value: Integer);
begin
FWidth := Value;
if Assigned(WinControl) then
WinControl.Width := Value;
end;
procedure TJvBaseParameter.SetTabOrder(Value: Integer);
begin
FTabOrder := Value;
if Assigned(WinControl) then
WinControl.TabOrder := Value;
end;
procedure TJvBaseParameter.GetData;
begin
AsVariant := Null;
if Assigned(WinControl) then
// FValue := WinControlData;
AsVariant := WinControlData;
end;
procedure TJvBaseParameter.SetData;
begin
if Assigned(WinControl) then
// WinControlData := FValue;
WinControlData := AsVariant;
end;
procedure TJvBaseParameter.Assign(Source: TPersistent);
begin
if Source is TJvBaseParameter then
begin
AsVariant := TJvBaseParameter(Source).AsVariant;
Caption := TJvBaseParameter(Source).Caption;
SearchName := TJvBaseParameter(Source).SearchName;
Width := TJvBaseParameter(Source).Width;
Height := TJvBaseParameter(Source).Height;
Required := TJvBaseParameter(Source).Required;
ParentParameterName := TJvBaseParameter(Source).ParentParameterName;
StoreValueToAppStorage := TJvBaseParameter(Source).StoreValueToAppStorage;
StoreValueCrypted := TJvBaseParameter(Source).StoreValueCrypted;
TabOrder := TJvBaseParameter(Source).TabOrder;
FParameterList := TJvBaseParameter(Source).ParameterList;
Color := TJvBaseParameter(Source).Color;
ReadOnly := TJvBaseParameter(Source).ReadOnly;
Enabled := TJvBaseParameter(Source).Enabled;
FEnableReasons.Assign(TJvBaseParameter(Source).FEnableReasons);
FDisableReasons.Assign(TJvBaseParameter(Source).FDisableReasons);
end
else
inherited Assign(Source);
end;
function TJvBaseParameter.Validate(var AData: Variant): Boolean;
begin
if not Required or not Enabled then
Result := True
else
Result := not VarIsNull(AData);
if not Result then
DSADialogsMessageDlg(Format(RsErrParameterMustBeEntered, [Caption]), mtError, [mbOK], 0);
end;
function TJvBaseParameter.GetParameterNameExt: string;
begin
Result := '';
end;
function TJvBaseParameter.GetParameterNameBase: string;
begin
Result := 'ParameterItem' + StrReplaceButChars(SearchName, cAllowedChars, '_');
end;
function TJvBaseParameter.GetParameterName: string;
begin
Result := GetParameterNameBase + GetParameterNameExt;
end;
//=== { TJvParameterList } ===================================================
constructor TJvParameterList.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FMessages := TJvParameterListMessages.Create;
FParameterListPropertyStore := TJvParameterListPropertyStore.Create(nil);
FParameterListPropertyStore.ParameterList := Self;
FIntParameterList := TStringList.Create;
FDynControlEngine := DefaultDynControlEngine;
FArrangeSettings := TJvArrangeSettings.Create(nil);
with FArrangeSettings do
begin
AutoArrange := True;
WrapControls := True;
AutoSize := asBoth;
DistanceVertical := 3;
DistanceHorizontal := 3;
BorderLeft := 5;
BorderTop := 5;
end;
ScrollBox := nil;
RightPanel := nil;
ArrangePanel := nil;
FMaxWidth := 600;
FMaxHeight := 400;
FDefaultParameterHeight := 0;
FDefaultParameterWidth := 0;
FDefaultParameterLabelWidth := 0;
FOkButtonVisible := True;
FCancelButtonVisible := True;
FHistoryEnabled := False;
FLastHistoryName := '';
FParameterListSelectList := TJvParameterListSelectList.Create(Self);
FParameterListSelectList.ParameterList := Self;
FOkButtonDisableReasons := TJvParameterListEnableDisableReasonList.Create;
FOkButtonEnableReasons := TJvParameterListEnableDisableReasonList.Create;
end;
destructor TJvParameterList.Destroy;
begin
DestroyWinControls;
FreeAndNil(FParameterListSelectList);
FreeAndNil(FIntParameterList);
FreeAndNil(FParameterListPropertyStore);
FreeAndNil(FArrangeSettings);
FreeAndNil(FMessages);
FreeAndNil(FOkButtonDisableReasons);
FreeAndNil(FOkButtonEnableReasons);
inherited Destroy;
end;
function TJvParameterList.GetIntParameterList: TStrings;
begin
Result := FIntParameterList;
end;
procedure TJvParameterList.AddParameter(AParameter: TJvBaseParameter);
begin
AddObject(AParameter.SearchName, AParameter);
end;
function TJvParameterList.ExistsParameter(const ASearchName: string): Boolean;
begin
Result := Assigned(ParameterByName(ASearchName));
end;
function TJvParameterList.ParameterByName(const ASearchName: string): TJvBaseParameter;
var
I: Integer;
begin
Result := nil;
for I := 0 to Count - 1 do
if UpperCase(Parameters[I].SearchName) = UpperCase(Trim(ASearchName)) then
begin
Result := Parameters[I];
Break;
end;
end;
function TJvParameterList.ParameterByIndex(AIndex: Integer): TJvBaseParameter;
begin
Result := Parameters[AIndex];
end;
procedure TJvParameterList.Assign(Source: TPersistent);
begin
if Source is TJvParameterList then
begin
Messages.Assign(TJvParameterList(Source).Messages);
ArrangeSettings := TJvParameterList(Source).ArrangeSettings;
AppStorage := TJvParameterList(Source).AppStorage;
Width := TJvParameterList(Source).Width;
Height := TJvParameterList(Source).Height;
MaxWidth := TJvParameterList(Source).MaxWidth;
MaxHeight := TJvParameterList(Source).MaxHeight;
OkButtonVisible := TJvParameterList(Source).OkButtonVisible;
CancelButtonVisible := TJvParameterList(Source).CancelButtonVisible;
FIntParameterList.Assign(TJvParameterList(Source).IntParameterList);
HistoryEnabled := TJvParameterList(Source).HistoryEnabled;
AppStoragePath := TJvParameterList(Source).AppStoragePath;
end
else
inherited Assign(Source);
end;
procedure TJvParameterList.SetAppStoragePath(const Value: string);
begin
FParameterListPropertyStore.AppStoragePath := Value;
if Assigned(AppStorage) then
FParameterListSelectList.SelectPath := AppStorage.ConcatPaths([Value, RsHistorySelectPath])
end;
function TJvParameterList.GetAppStoragePath: string;
begin
Result := FParameterListPropertyStore.AppStoragePath;
end;
function TJvParameterList.GetJvAppStorage: TJvCustomAppStorage;
begin
Result := FParameterListPropertyStore.AppStorage;
end;
procedure TJvParameterList.SetJvAppStorage(Value: TJvCustomAppStorage);
begin
FParameterListPropertyStore.AppStorage := Value;
if Assigned(Value) then
FParameterListSelectList.SelectPath := Value.ConcatPaths([FParameterListPropertyStore.AppStoragePath, RsHistorySelectPath])
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -