cximagecomboboxitemseditor.pas
来自「胜天进销存源码,国产优秀的进销存」· PAS 代码 · 共 599 行 · 第 1/2 页
PAS
599 行
procedure TfmImageComboBoxItemsEditor.FillGridViewRecords(
AImageComboBoxItems: TcxImageComboBoxItems);
function ValueToStr(AValue: Variant): string;
begin
if VarIsNull(AValue) then
Result := cxImageComboNullValue
else
case VarType(AValue) of
varBoolean:
Result := BooleanIdents[AValue = True];
varCurrency:
Result := CurrToStr(AValue);
varDispatch:
Result := cxImageComboErrorVarTypeName;
else
Result := VarToStr(AValue);
end;
end;
procedure InitRecord(ARecordIndex: Integer;
AImageComboBoxItem: TcxImageComboBoxItem);
var
ARec: TcxCustomGridRecord;
begin
ARec := tvImageComboBoxItems.ViewData.Records[ARecordIndex];
tvImageComboBoxItems.BeginUpdate;
try
ARec.Values[clnImage.Index] := AImageComboBoxItem.ImageIndex;
ARec.Values[clnValue.Index] := ValueToStr(AImageComboBoxItem.Value);
ARec.Values[clnValueType.Index] :=
GetVarTypeName(VarType(AImageComboBoxItem.Value));
ARec.Values[clnDescription.Index] := AImageComboBoxItem.Description;
ARec.Values[clnTag.Index] := AImageComboBoxItem.Tag;
finally
tvImageComboBoxItems.EndUpdate;
end;
end;
var
I: Integer;
begin
tvImageComboBoxItems.DataController.RecordCount :=
AImageComboBoxItems.Count;
if tvImageComboBoxItems.DataController.RecordCount > 0 then
begin
tvImageComboBoxItems.BeginUpdate;
try
for I := 0 to tvImageComboBoxItems.DataController.RecordCount - 1 do
InitRecord(I, AImageComboBoxItems[I])
finally
tvImageComboBoxItems.EndUpdate;
end;
end
else
begin
tvImageComboBoxItems.DataController.RecordCount := 1;
InitNewRecord(0);
end;
end;
procedure TfmImageComboBoxItemsEditor.FocusAndSelectRecord(ARecordIndex: Integer);
begin
tvImageComboBoxItems.DataController.ClearSelection;
tvImageComboBoxItems.DataController.FocusedRecordIndex :=
ARecordIndex;
tvImageComboBoxItems.Controller.FocusedRecord.Selected := True;
end;
function TfmImageComboBoxItemsEditor.GetVarTypeName(AVarType: Word): string;
begin
AVarType := AVarType and varTypeMask;
case AVarType of
Low(cxImageComboVarTypeNames)..High(cxImageComboVarTypeNames):
Result := cxImageComboVarTypeNames[AVarType];
varString:
Result := cxImageComboStringVarTypeName;
else
Result := cxImageComboUnknownVarTypeName;
end;
end;
function TfmImageComboBoxItemsEditor.GetVarTypeByName(AVarTypeName: string): Word;
var
I: Integer;
begin
Result := varError;
if AVarTypeName = cxImageComboStringVarTypeName then
Result := varString
else
for I := Low(cxImageComboVarTypeNames) to High(cxImageComboVarTypeNames) do
if cxImageComboVarTypeNames[I] = AVarTypeName then
begin
Result := I;
Break;
end;
end;
procedure TfmImageComboBoxItemsEditor.InitNewRecord(ARecordIndex: Integer);
begin
tvImageComboBoxItems.BeginUpdate;
try
SetItemValueType(ARecordIndex, varNull);
tvImageComboBoxItems.DataController.Values[ARecordIndex, clnTag.Index] := 0;
if ARecordIndex <
TcxImageComboBoxProperties(clnImage.Properties).Items.Count then
tvImageComboBoxItems.DataController.Values[ARecordIndex, clnImage.Index] := ARecordIndex
else
tvImageComboBoxItems.DataController.Values[ARecordIndex, clnImage.Index] := -1;
finally
tvImageComboBoxItems.EndUpdate;
end;
end;
procedure TfmImageComboBoxItemsEditor.PopulateImages(AImages, ALargeImages: TCustomImageList);
var
I: Integer;
ACurrentImages: TCustomImageList;
AImageComboBoxProperties: TcxImageComboBoxProperties;
begin
if (AImages = nil) and (ALargeImages = nil) then
Exit;
AImageComboBoxProperties := TcxImageComboBoxProperties(clnImage.Properties);
AImageComboBoxProperties.Images := AImages;
AImageComboBoxProperties.LargeImages := ALargeImages;
if ALargeImages <> nil then
ACurrentImages := ALargeImages
else
ACurrentImages := AImages;
AImageComboBoxProperties.Items.Clear;
with TcxImageComboBoxItem(AImageComboBoxProperties.Items.Add) do
begin
ImageIndex := -1;
Value := -1;
end;
for I := 0 to ACurrentImages.Count - 1 do
with TcxImageComboBoxItem(AImageComboBoxProperties.Items.Add) do
begin
ImageIndex := I;
Value := I;
end;
end;
procedure TfmImageComboBoxItemsEditor.PopulateValueTypeNames;
procedure AddValueTypeToDropDownMenu(AValuetypeName: string; AValue: Integer);
var
AMenuItem: TMenuItem;
begin
AMenuItem := TMenuItem.Create(mnuValueTypes);
AMenuItem.Caption := AValuetypeName;
AMenuItem.OnClick := miValueTypeClick;
AMenuItem.Tag := AValue;
mnuValueTypes.Items.Add(AMenuItem);
end;
procedure AddValueTypeToValueTypeColumn(AValuetypeName: string; AValue: Integer);
var
AComboBoxProperties: TcxComboBoxProperties;
begin
AComboBoxProperties :=
TcxComboBoxProperties(clnValueType.Properties);
AComboBoxProperties.Items.AddObject(AValuetypeName, TObject(AValue));
end;
var
I: Integer;
begin
TcxComboBoxProperties(clnValueType.Properties).Items.Clear;
mnuValueTypes.Items.Clear;
for I := Low(cxImageComboVarTypeNames) to High(cxImageComboVarTypeNames) do
if cxImageComboVarTypeNames[I] <> '' then
begin
AddValueTypeToDropDownMenu(cxImageComboVarTypeNames[I], I);
AddValueTypeToValueTypeColumn(cxImageComboVarTypeNames[I], I);
end;
AddValueTypeToDropDownMenu(cxImageComboStringVarTypeName, varString);
AddValueTypeToValueTypeColumn(cxImageComboStringVarTypeName, varString);
end;
procedure TfmImageComboBoxItemsEditor.SetItemValueType(ARecordIndex: Integer; AValueType: Word);
var
AValue: Variant;
begin
tvImageComboBoxItems.BeginUpdate;
try
tvImageComboBoxItems.DataController.Values[ARecordIndex, clnValueType.Index] :=
GetVarTypeName(AValueType);
AValue := tvImageComboBoxItems.DataController.Values[ARecordIndex, clnValue.Index];
ValueToValueType(AValue, AValueType);
tvImageComboBoxItems.DataController.Values[ARecordIndex, clnValue.Index] := AValue;
finally
tvImageComboBoxItems.EndUpdate;
end;
end;
procedure TfmImageComboBoxItemsEditor.SetSelectionValueType(AValueType: Word);
var
I: Integer;
begin
tvImageComboBoxItems.BeginUpdate;
try
for I := 0 to tvImageComboBoxItems.Controller.SelectedRecordCount -1 do
SetItemValueType(
tvImageComboBoxItems.Controller.SelectedRecords[I].RecordIndex, AValueType);
finally
tvImageComboBoxItems.EndUpdate;
end;
end;
function TfmImageComboBoxItemsEditor.ValueToValueType(var AValue: Variant; AValueType: Word): Boolean;
var
AStringValue: string;
begin
Result := True;
case AValueType of
varEmpty:
if not VarIsSoftNull(AValue) then
begin
Result := False;
VarClear(AValue);
end;
varNull:
if not VarEquals(AValue, cxImageComboNullValue) then
begin
AValue := cxImageComboNullValue;
Result := False;
end;
varString, varOleStr:
if VarEquals(AValue, cxImageComboNullValue) or VarIsNull(AValue) then
AValue := '';
else
if Result then
try
AStringValue := VarToStr(AValue);
VarCast(AValue, AValue, AValueType);
Result := (AValueType in [varDate, varCurrency, varDouble, varBoolean]) or
(VarToStr(AValue) = AStringValue);
except
Result := False;
VarClear(AValue);
VarCast(AValue, AValue, AValueType);
end;
end;
end;
procedure TfmImageComboBoxItemsEditor.tvImageComboBoxItemsKeyDown(
Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if (Key = VK_INSERT) and (Shift = []) then
begin
btnInsertClick(Self);
Key := 0;
end;
end;
procedure TfmImageComboBoxItemsEditor.tvImageComboBoxItemsDataControllerRecordChanged(
ADataController: TcxCustomDataController; ARecordIndex,
AItemIndex: Integer);
function GetFocusedItemValueType: Word;
begin
Result := GetVarTypeByName(ADataController.GetValue(ARecordIndex, clnValueType.Index));
end;
var
AValue: Variant;
begin
if AItemIndex = clnValue.Index then
begin
ADataController.OnRecordChanged := nil;
try
AValue := clnValue.EditValue;
if VarIsSoftNull(AValue) then
ADataController.SetValue(ARecordIndex, clnValueType.Index, GetVarTypeName(varEmpty))
else
if VarEquals(AValue, cxImageComboNullValue) then
ADataController.SetValue(ARecordIndex, clnValueType.Index, GetVarTypeName(varNull))
else
if not ValueToValueType(AValue, GetFocusedItemValueType) then
ADataController.SetValue(ARecordIndex, clnValueType.Index, cxImageComboStringVarTypeName)
else
ADataController.SetValue(ARecordIndex, clnValue.Index, VarToStr(AValue));
finally
ADataController.OnRecordChanged := tvImageComboBoxItemsDataControllerRecordChanged;
end;
end;
end;
procedure TfmImageComboBoxItemsEditor.tvImageComboBoxItemsEditKeyDown(
Sender: TcxCustomGridTableView; AItem: TcxCustomGridTableItem;
AEdit: TcxCustomEdit; var Key: Word; Shift: TShiftState);
begin
tvImageComboBoxItemsKeyDown(Sender, Key, Shift);
end;
end.
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?