cximagecomboboxitemseditor.pas
来自「胜天进销存源码,国产优秀的进销存」· PAS 代码 · 共 599 行 · 第 1/2 页
PAS
599 行
{********************************************************************}
{ }
{ Developer Express Visual Component Library }
{ ExpressEditors }
{ }
{ Copyright (c) 1998-2008 Developer Express Inc. }
{ ALL RIGHTS RESERVED }
{ }
{ The entire contents of this file is protected by U.S. and }
{ International Copyright Laws. Unauthorized reproduction, }
{ reverse-engineering, and distribution of all or any portion of }
{ the code contained in this file is strictly prohibited and may }
{ result in severe civil and criminal penalties and will be }
{ prosecuted to the maximum extent possible under the law. }
{ }
{ RESTRICTIONS }
{ }
{ THIS SOURCE CODE AND ALL RESULTING INTERMEDIATE FILES }
{ (DCU, OBJ, DLL, ETC.) ARE CONFIDENTIAL AND PROPRIETARY TRADE }
{ SECRETS OF DEVELOPER EXPRESS INC. THE REGISTERED DEVELOPER IS }
{ LICENSED TO DISTRIBUTE THE EXPRESSEDITORS AND ALL }
{ ACCOMPANYING VCL CONTROLS AS PART OF AN EXECUTABLE PROGRAM ONLY. }
{ }
{ THE SOURCE CODE CONTAINED WITHIN THIS FILE AND ALL RELATED }
{ FILES OR ANY PORTION OF ITS CONTENTS SHALL AT NO TIME BE }
{ COPIED, TRANSFERRED, SOLD, DISTRIBUTED, OR OTHERWISE MADE }
{ AVAILABLE TO OTHER INDIVIDUALS WITHOUT EXPRESS WRITTEN CONSENT }
{ AND PERMISSION FROM DEVELOPER EXPRESS INC. }
{ }
{ CONSULT THE END USER LICENSE AGREEMENT FOR INFORMATION ON }
{ ADDITIONAL RESTRICTIONS. }
{ }
{********************************************************************}
unit cxImageComboBoxItemsEditor;
{$I cxVer.inc}
interface
uses
{$IFDEF DELPHI6}
Variants,
{$ENDIF}
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, cxStyles, cxCustomData, cxGraphics, cxFilter, cxData,
cxDataStorage, cxEdit, cxImageComboBox, cxLookAndFeels,
cxGridCustomTableView, cxGridTableView, cxControls, cxGridCustomView,
cxClasses, cxGridLevel, cxGrid, Menus, StdCtrls, ExtCtrls, cxTextEdit,
cxMaskEdit, cxDropDownEdit, cxContainer, cxGroupBox,
cxLookAndFeelPainters, cxButtons, cxCalendar, ImgList;
type
TfmImageComboBoxItemsEditor = class(TForm)
Panel1: TPanel;
btnAdd: TcxButton;
btnDelete: TcxButton;
btnInsert: TcxButton;
mnuValueTypes: TPopupMenu;
miAdd: TMenuItem;
miInsert: TMenuItem;
miDelete: TMenuItem;
N1: TMenuItem;
miHelp: TMenuItem;
Panel3: TPanel;
cxgImageComboBoxItems: TcxGrid;
tvImageComboBoxItems: TcxGridTableView;
clnImage: TcxGridColumn;
clnValue: TcxGridColumn;
clnDescription: TcxGridColumn;
clnTag: TcxGridColumn;
lvImageComboBoxItems: TcxGridLevel;
Bevel1: TBevel;
btnOk: TcxButton;
btnCancel: TcxButton;
clnValueType: TcxGridColumn;
btnSelectAll: TcxButton;
btnValueType: TcxButton;
procedure FormCreate(Sender: TObject);
procedure btnAddClick(Sender: TObject);
procedure btnDeleteClick(Sender: TObject);
procedure btnInsertClick(Sender: TObject);
procedure btnOkClick(Sender: TObject);
procedure btnSelectAllClick(Sender: TObject);
procedure clnValueTypePropertiesEditValueChanged(Sender: TObject);
procedure miValueTypeClick(Sender: TObject);
procedure tvImageComboBoxItemsKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure tvImageComboBoxItemsDataControllerRecordChanged(
ADataController: TcxCustomDataController; ARecordIndex,
AItemIndex: Integer);
procedure tvImageComboBoxItemsEditKeyDown(Sender: TcxCustomGridTableView;
AItem: TcxCustomGridTableItem; AEdit: TcxCustomEdit; var Key: Word;
Shift: TShiftState);
private
{ Private declarations }
FImageComboBoxItems: TcxImageComboBoxItems;
FImages, FLargeImages: TCustomImageList;
procedure FillGridViewRecords(AImageComboBoxItems: TcxImageComboBoxItems);
procedure FocusAndSelectRecord(ARecordIndex: Integer);
function GetVarTypeName(AVarType: Word): string;
function GetVarTypeByName(AVarTypeName: string): Word;
procedure InitNewRecord(ARecordIndex: Integer);
procedure PopulateImages(AImages, ALargeImages: TCustomImageList);
procedure PopulateValueTypeNames;
procedure SetItemValueType(ARecordIndex: Integer; AValueType: Word);
procedure SetSelectionValueType(AValueType: Word);
function ValueToValueType(var AValue: Variant; AValueType: Word): Boolean;
public
{ Public declarations }
constructor Create(AItems: TcxImageComboBoxItems;
AImages, ALargeImages: TCustomImageList); reintroduce; overload;
end;
implementation
uses
cxVariants, TypInfo;
{$R *.dfm}
const
cxImageComboErrorVarTypeName = 'ERROR';
cxImageComboNullValue = '(Null)';
cxImageComboOleStrVarTypeName = 'OleStr';
cxImageComboStringVarTypeName = 'String';
cxImageComboUnknownVarTypeName = '(Unknown)';
var
cxImageComboVarTypeNames: array[varEmpty..{$IFDEF DELPHI6}varInt64{$ELSE}varByte{$ENDIF}]
of string = (
'Unassigned', // varEmpty
'Null', // varNull
'Smallint', // varSmallint
'Integer', // varInteger
'Single', // varSingle
'Double', // varDouble
'Currency', // varCurrency
'Date', // varDate
'OleStr', // varOleStr
'', // varDispatch
'', // varError
'Boolean', // varBoolean
'', // varVariant
'', // varUnknown
'', // [varDecimal]
'', // [undefined]
{$IFDEF DELPHI6}
'Shortint', // varShortInt
{$ELSE}
'',
{$ENDIF}
'Byte' // varByte
{$IFDEF DELPHI6}
,'Word', // varWord
'LongWord', // varLongWord
'Int64' // varInt64
{$ENDIF}
);
constructor TfmImageComboBoxItemsEditor.Create(AItems: TcxImageComboBoxItems;
AImages, ALargeImages: TCustomImageList);
begin
FImageComboBoxItems := AItems;
FImages := AImages;
FLargeImages := ALargeImages;
inherited Create(Application);
end;
procedure TfmImageComboBoxItemsEditor.FormCreate(Sender: TObject);
begin
PopulateValueTypeNames;
PopulateImages(FImages, FLargeImages);
FillGridViewRecords(FImageComboBoxItems);
clnImage.ApplyBestFit;
tvImageComboBoxItems.Controller.GoToLast(False);
end;
procedure TfmImageComboBoxItemsEditor.btnAddClick(Sender: TObject);
begin
tvImageComboBoxItems.DataController.Post;
tvImageComboBoxItems.BeginUpdate;
try
tvImageComboBoxItems.DataController.AppendRecord;
InitNewRecord(tvImageComboBoxItems.DataController.RecordCount - 1);
finally
tvImageComboBoxItems.EndUpdate;
end;
FocusAndSelectRecord(tvImageComboBoxItems.DataController.RecordCount - 1);
end;
procedure TfmImageComboBoxItemsEditor.btnDeleteClick(Sender: TObject);
var
AIndex: Integer;
begin
if tvImageComboBoxItems.DataController.RecordCount = 0 then
Exit;
AIndex := tvImageComboBoxItems.Controller.FocusedRecordIndex;
tvImageComboBoxItems.DataController.DeleteSelection;
if tvImageComboBoxItems.DataController.RecordCount > AIndex then
begin
tvImageComboBoxItems.Controller.FocusedRecordIndex := AIndex;
tvImageComboBoxItems.Controller.FocusedRecord.Selected := True;
end
else
tvImageComboBoxItems.Controller.GoToLast(False);
end;
procedure TfmImageComboBoxItemsEditor.btnOkClick(Sender: TObject);
procedure InitImageComboBoxItem(AItem: TcxImageComboBoxItem;
ARecord: TcxCustomGridRecord);
function VarToInteger(AValue: Variant): Integer;
begin
if VarIsNull(AValue) then
Result := 0
else
Result := AValue;
end;
var
AValue: Variant;
AVarType: Word;
begin
AItem.Description := VarToStr(ARecord.Values[clnDescription.Index]);
AItem.Tag := VarToInteger(ARecord.Values[clnTag.Index]);
AItem.ImageIndex := VarToInteger(ARecord.Values[clnImage.Index]);
AValue := ARecord.Values[clnValue.Index];
AVarType := GetVarTypeByName(ARecord.Values[clnValueType.Index]);
case AVarType of
varNull:
AValue := Null;
varEmpty:
VarClear(AValue);
varError:
begin
AValue := Null;
raise EVariantError.Create('Invalid value type');
end;
else
VarCast(AValue, AValue, AVarType);
end;
AItem.Value := AValue;
end;
var
I: Integer;
begin
FImageComboBoxItems.Clear;
for I := 0 to tvImageComboBoxItems.ViewData.RecordCount - 1 do
InitImageComboBoxItem(
FImageComboBoxItems.Add as TcxImageComboBoxItem,
tvImageComboBoxItems.ViewData.Records[I]);
end;
procedure TfmImageComboBoxItemsEditor.btnInsertClick(Sender: TObject);
function InsertRecordBeforeFocused: Integer;
begin
Result := tvImageComboBoxItems.DataController.InsertRecord(
tvImageComboBoxItems.Controller.FocusedRecord.Index);
end;
var
ARecordIndex: Integer;
begin
tvImageComboBoxItems.DataController.Post;
if tvImageComboBoxItems.Controller.FocusedRecord = nil then
btnAddClick(nil)
else
begin
tvImageComboBoxItems.BeginUpdate;
try
ARecordIndex := InsertRecordBeforeFocused;
InitNewRecord(ARecordIndex);
finally
tvImageComboBoxItems.EndUpdate;
end;
FocusAndSelectRecord(ARecordIndex);
end;
end;
procedure TfmImageComboBoxItemsEditor.btnSelectAllClick(Sender: TObject);
begin
tvImageComboBoxItems.DataController.SelectAll;
end;
procedure TfmImageComboBoxItemsEditor.clnValueTypePropertiesEditValueChanged(
Sender: TObject);
begin
SetItemValueType(tvImageComboBoxItems.DataController.FocusedRecordIndex,
GetVarTypeByName(TcxComboBox(Sender).Text));
end;
procedure TfmImageComboBoxItemsEditor.miValueTypeClick(Sender: TObject);
begin
SetSelectionValueType(TMenuItem(Sender).Tag);
end;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?