cxgridcommon.pas
来自「胜天进销存源码,国产优秀的进销存」· PAS 代码 · 共 614 行 · 第 1/2 页
PAS
614 行
var
I: Integer;
begin
for I := 0 to Items.Count - 1 do
TOptionTreeNodeData(Items[I].Data).Free;
Items.Clear;
end;
function TcxGridOptionsTreeView.FindNodeByID(AID: Integer): TTreeNode;
var
I: Integer;
begin
for I := 0 to Items.Count - 1 do
begin
Result := Items[I];
if GetNodeID(Result) = AID then Exit;
end;
Result := nil;
end;
function TcxGridOptionsTreeView.GetItemImageIndex(AKind: TcxGridOptionsTreeViewItemKind;
AChecked: Boolean): Integer;
begin
Result := 2 * Ord(AKind) + Ord(AChecked);
end;
function TcxGridOptionsTreeView.GetNodeID(ANode: TTreeNode): Integer;
begin
Result := TOptionTreeNodeData(ANode.Data).ID;
end;
function TcxGridOptionsTreeView.GetNodeKind(ANode: TTreeNode): TcxGridOptionsTreeViewItemKind;
begin
Result := TOptionTreeNodeData(ANode.Data).Kind;
end;
function TcxGridOptionsTreeView.GetNodeParentID(ANode: TTreeNode): Integer;
begin
if ANode.Parent = nil then
Result := -1
else
Result := GetNodeID(ANode.Parent);
end;
procedure TcxGridOptionsTreeView.KeyDown(var Key: Word; Shift: TShiftState);
begin
inherited;
if (Key = VK_SPACE) and (Selected <> nil) then
NodeClicked(Selected);
end;
procedure TcxGridOptionsTreeView.MouseDown(Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
ANode: TTreeNode;
begin
if Button = mbLeft then
begin
ANode := GetNodeAt(X, Y);
if (ANode <> nil) and (htOnItem in GetHitTestInfoAt(X, Y)) then
NodeClicked(ANode);
end;
inherited;
end;
procedure TcxGridOptionsTreeView.NodeClicked(ANode: TTreeNode);
begin
ItemValuesUpdateLocked := True;
try
ItemClicked(GetNodeParentID(ANode), GetNodeID(ANode));
finally
ItemValuesUpdateLocked := False;
end;
RefreshItemValues;
end;
procedure TcxGridOptionsTreeView.RefreshImages;
var
AImage: TBitmap;
AImageCanvas: TcxCanvas;
AImageRect: TRect;
AItemKind: TcxGridOptionsTreeViewItemKind;
AChecked: Boolean;
begin
if IsDestroying then Exit;
Images.Clear;
with CalculateImagesSize do
begin
Images.Width := cx;
Images.Height := cy;
end;
AImage := TBitmap.Create;
try
AImage.Width := Images.Width;
AImage.Height := Images.Height;
AImageCanvas := TcxCanvas.Create(AImage.Canvas);
try
AImageRect := Rect(0, 0, AImage.Width, AImage.Height);
for AItemKind := Low(AItemKind) to High(AItemKind) do
for AChecked := Low(AChecked) to High(AChecked) do
begin
AImage.Canvas.Brush.Color := Color;
AImage.Canvas.FillRect(AImageRect);
DrawImage(AImageCanvas, AImageRect, AItemKind, AChecked);
Images.Add(AImage, nil);
end;
finally
AImageCanvas.Free;
end;
finally
AImage.Free;
end;
end;
procedure TcxGridOptionsTreeView.RefreshItemImageIndexes;
var
I: Integer;
ANode: TTreeNode;
begin
Items.BeginUpdate;
try
for I := 0 to Items.Count - 1 do
begin
ANode := Items[I];
ANode.ImageIndex := GetItemImageIndex(GetNodeKind(ANode),
IsItemChecked(GetNodeParentID(ANode), GetNodeID(ANode)));
ANode.SelectedIndex := ANode.ImageIndex;
end;
finally
Items.EndUpdate;
end;
end;
procedure TcxGridOptionsTreeView.ResetMaxID;
begin
FMaxID := OptionsTreeViewMaxInternalID;
end;
function TcxGridOptionsTreeView.CalculateImagesSize: TSize;
begin
Result := GetCategorySize;
Result.cx := Max(Result.cx, Max(GetCheckBoxSize.cx, GetRadioButtonSize.cx));
Result.cy := Max(Result.cy, Max(GetCheckBoxSize.cy, GetRadioButtonSize.cy));
end;
procedure TcxGridOptionsTreeView.DrawImage(ACanvas: TcxCanvas; const ARect: TRect;
AItemKind: TcxGridOptionsTreeViewItemKind; AChecked: Boolean);
var
R: TRect;
B: TBitmap;
begin
R := ARect;
case AItemKind of
otikCategory:
begin
R := cxRectCenter(R, GetCategorySize);
B := GetCategoryBitmap;
try
if AChecked then
ACanvas.RotateBitmap(B, raMinus90);
ACanvas.DrawGlyph(R.Left, R.Top, B);
finally
B.Free;
end;
end;
otikCheckBox:
begin
R := cxRectCenter(R, GetCheckBoxSize);
LookAndFeelPainter.DrawCheckButton(ACanvas, R, cxbsNormal, AChecked);
end;
otikRadioButton:
begin
R := cxRectCenter(R, GetRadioButtonSize);
LookAndFeelPainter.DrawRadioButton(ACanvas, R.Left, R.Top, cxbsNormal,
AChecked, False, ACanvas.Brush.Color);
end;
end;
end;
function TcxGridOptionsTreeView.GetCategoryBitmap: TBitmap;
begin
Result := TBitmap.Create;
Result.LoadFromResourceName(HInstance, 'CXGRIDOPTIONSTREEVIEWCATEGORYBITMAP');
end;
function TcxGridOptionsTreeView.GetCategorySize: TSize;
begin
with GetCategoryBitmap do
try
Result.cx := Width;
Result.cy := Height;
finally
Free;
end;
end;
function TcxGridOptionsTreeView.GetCheckBoxSize: TSize;
begin
Result := LookAndFeelPainter.CheckButtonSize;
end;
function TcxGridOptionsTreeView.GetRadioButtonSize: TSize;
begin
Result := LookAndFeelPainter.RadioButtonSize;
end;
function TcxGridOptionsTreeView.AddCategory(AParentID, AID: Integer;
const ACaption: string): Integer;
begin
Result := AddItem(AParentID, AID, ACaption, otikCategory);
end;
function TcxGridOptionsTreeView.AddCheckBox(AParentID, AID: Integer;
const ACaption: string): Integer;
begin
Result := AddItem(AParentID, AID, ACaption, otikCheckBox);
end;
function TcxGridOptionsTreeView.AddRadioButton(AParentID, AID: Integer;
const ACaption: string): Integer;
begin
Result := AddItem(AParentID, AID, ACaption, otikRadioButton);
end;
procedure TcxGridOptionsTreeView.AddRadioButtons(AParentID: Integer;
ATypeInfo: PTypeInfo; AGetTypeItemCaption: TcxGridOptionsTreeViewGetTypeItemCaptionFunction);
var
ATypeData: PTypeData;
I: Integer;
begin
if ATypeInfo.Kind <> tkEnumeration then Exit;
ATypeData := GetTypeData(ATypeInfo);
for I := ATypeData.MinValue to ATypeData.MaxValue do
AddRadioButton(AParentID, I, AGetTypeItemCaption(I));
end;
procedure TcxGridOptionsTreeView.RefreshItems;
begin
Items.BeginUpdate;
try
ClearItems;
ResetMaxID;
AddItems;
RefreshItemValues;
FullExpand;
TopItem := Items.GetFirstNode;
finally
Items.EndUpdate;
end;
end;
procedure TcxGridOptionsTreeView.RefreshItemValues;
begin
if not ItemValuesUpdateLocked then
RefreshItemImageIndexes;
end;
{ functions }
function GetValidName(AComponent: TComponent; const AName: string;
AIsBaseName: Boolean = False): string;
var
AOwner: TComponent;
I: Integer;
function GetNextName: string;
begin
Result := AName + IntToStr(I);
Inc(I);
end;
begin
Result := AName;
AOwner := AComponent.Owner;
if AOwner = nil then Exit;
I := 1;
if AIsBaseName then Result := GetNextName;
while AOwner.FindComponent(Result) <> nil do
Result := GetNextName;
end;
procedure GetCellTextAreaSize(var ATextSize: Integer);
begin
Inc(ATextSize, 2 * cxGridCellTextOffset);
end;
function GridCellStateToButtonState(ACellState: TcxGridCellState): TcxButtonState;
const
ButtonStates: array[TcxGridCellState] of TcxButtonState =
(cxbsNormal, cxbsHot, cxbsPressed);
begin
Result := ButtonStates[ACellState];
end;
initialization
crcxGridHorzSize := crcxHorzSize;
crcxGridVertSize := crcxVertSize;
crcxGridRemove := crcxRemove;
crcxGridNoDrop := crcxNoDrop;
crcxGridDrag := crcxDrag;
crcxGridMultiDrag := crcxDragMulti;
Screen.Cursors[crcxGridSelectRow] := LoadCursor(HInstance, 'CX_GRIDSELECTROWCURSOR');
end.
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?