📄 customdrawtableviewdemomain.pas
字号:
if not (AViewInfo is TcxGridIndicatorRowItemViewInfo) then
AIndicatorKind := ikNone
else
AIndicatorKind := TcxGridIndicatorRowItemViewInfo(AViewInfo).IndicatorKind;
case FCustomDrawingStyle[Integer(vtMaster), Integer(cdaIndicatorCell)] of
cdsBkImage:
begin
ACanvas.Brush.Bitmap := nil;
ACanvas.Brush.Assign(FGridBrushMasterIndicatorCell);
ACanvas.FillRect(ARec);
ACanvas.Brush.Bitmap := nil;
end;
cdsGradient:
begin
AIsVertical := (FColorScheme[Integer(vtMaster), Integer(cdaIndicatorCell)] = csGrey) or (FColorScheme[Integer(vtMaster), Integer(cdaIndicatorCell)] = csGold);
DrawGradient(ACanvas.Canvas, ARec, ColorScheme[Integer(FColorScheme[Integer(vtMaster), Integer(cdaGroupCell)]), 1], ColorScheme[Integer(FColorScheme[Integer(vtMaster), Integer(cdaIndicatorCell)]), 0], 40, AIsVertical)
end;
end;
if AIndicatorKind <> ikNone then
begin
with imIndicatorImages, ARec do
begin
X := (Left + Right - Width) div 2;
Y := (Top + Bottom - Height) div 2;
end;
imIndicatorImages.Draw(ACanvas.Canvas, X, Y, IndicatorImageIndex[vtMaster], True);
end;
ADone := not (FCustomDrawingStyle[Integer(vtMaster), Integer(cdaIndicatorCell)] in [cdsDefaultDrawing]);
end;
procedure TCustomDrawTableViewDemoMainForm.miExitClick(Sender: TObject);
begin
Close;
end;
procedure TCustomDrawTableViewDemoMainForm.miNativeStyleClick(Sender: TObject);
begin
with LookAndFeelController do
begin
NativeStyle := not NativeStyle;
(Sender as TMenuItem).Checked := NativeStyle;
end;
end;
procedure TCustomDrawTableViewDemoMainForm.miLookAndFeelKindClick(Sender: TObject);
begin
LookAndFeelController.Kind := TcxLookAndFeelKind(TMenuItem(Sender).MenuIndex);
(Sender as TMenuItem).Checked := True;
end;
procedure TCustomDrawTableViewDemoMainForm.FormShow(Sender: TObject);
begin
CustomDrawTableViewDemoStylesEditorForm.Show;
end;
procedure TCustomDrawTableViewDemoMainForm.tvOrdersCustomDrawCell(
Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
var
ARec: TRect;
ATextToDraw: String;
AIsVertical: Boolean;
val: String;
begin
ATextToDraw := AViewInfo.GridRecord.DisplayTexts[AViewInfo.Item.Index];
ARec := AViewInfo.Bounds;
ACanvas.Canvas.Font.Assign(FFonts[Integer(vtDetail), Integer(cdaCell)]);
case FCustomDrawingStyle[Integer(vtDetail), Integer(cdaCell)] of
cdsBkImage:
begin
ACanvas.Brush.Bitmap := nil;
ACanvas.Brush.Assign(FGridBrushDetailCell);
ACanvas.Canvas.FillRect(ARec);
ACanvas.Brush.Bitmap := nil;
end;
cdsGradient:
begin
AIsVertical := (FColorScheme[Integer(vtDetail), Integer(cdaCell)] = csGrey) or (FColorScheme[Integer(vtDetail), Integer(cdaCell)] = csGold);
DrawGradient(ACanvas.Canvas, ARec, ColorScheme[Integer(FColorScheme[Integer(vtDetail), Integer(cdaCell)]), 1], ColorScheme[Integer(FColorScheme[Integer(vtDetail), Integer(cdaCell)]), 0], 40, AIsVertical)
end;
cdsDependOnData:
begin
ACanvas.Canvas.Brush.Style := bsSolid;
ACanvas.Canvas.Brush.Color := clBlueLight;
val := VarAsType(AViewInfo.GridRecord.DisplayTexts[tvOrdersPaymentType.Index], varString);
if val = 'Master Card' then
ACanvas.Canvas.Font.Color := clRed
else
if val = 'American Express' then
ACanvas.Canvas.Font.Color := clBlue
else
if val = 'Cash' then
ACanvas.Canvas.Font.Color := clGreen;
if val = 'Visa Card' then
ACanvas.Canvas.Font.Color := clFuchsia;
ACanvas.Canvas.FillRect(ARec);
end;
end;
SetBkMode(ACanvas.Canvas.Handle, TRANSPARENT);
ADone := not (FCustomDrawingStyle[Integer(vtDetail), Integer(cdaCell)] in [cdsDefaultDrawing, cdsDependOnData]);
if ADone then
begin
InflateRect(ARec, -cxGridCellTextOffset, -cxGridCellTextOffset);
ACanvas.DrawText(ATextToDraw, ARec, 0);
end;
end;
procedure TCustomDrawTableViewDemoMainForm.tvOrdersCustomDrawGroupCell(
Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
AViewInfo: TcxGridTableCellViewInfo; var ADone: Boolean);
var
ARec: TRect;
ATextToDraw: String;
AIsVertical: Boolean;
begin
ATextToDraw := AViewInfo.Text;
ARec := AViewInfo.Bounds;
ACanvas.Canvas.Font.Assign(FFonts[Integer(vtDetail), Integer(cdaGroupCell)]);
case FCustomDrawingStyle[Integer(vtDetail), Integer(cdaGroupCell)] of
cdsBkImage:
begin
ACanvas.Brush.Bitmap := nil;
ACanvas.Brush.Assign(FGridBrushDetailGroupCell);
ACanvas.Canvas.FillRect(ARec);
ACanvas.Brush.Bitmap := nil;
end;
cdsGradient:
begin
AIsVertical := (FColorScheme[Integer(vtDetail), Integer(cdaGroupCell)] = csGrey) or (FColorScheme[Integer(vtDetail), Integer(cdaGroupCell)] = csGold);
DrawGradient(ACanvas.Canvas, ARec, ColorScheme[Integer(FColorScheme[Integer(vtDetail), Integer(cdaGroupCell)]), 1], ColorScheme[Integer(FColorScheme[Integer(vtDetail), Integer(cdaGroupCell)]), 0], 40, AIsVertical)
end;
end;
SetBkMode(ACanvas.Canvas.Handle, TRANSPARENT);
ADone := not (FCustomDrawingStyle[Integer(vtDetail), Integer(cdaGroupCell)] in [cdsDefaultDrawing]);
if ADone then
begin
ARec.Left := ARec.Left + (AViewInfo.RecordViewInfo.ExpandButtonBounds.Right - AViewInfo.RecordViewInfo.ExpandButtonBounds.Left) + 10;
ARec.Top := ARec.Top + cxGridCellTextOffset;
ACanvas.DrawText(ATextToDraw, ARec, 0);
end;
end;
procedure TCustomDrawTableViewDemoMainForm.tvOrdersCustomDrawIndicatorCell(
Sender: TcxGridTableView; ACanvas: TcxCanvas;
AViewInfo: TcxCustomGridIndicatorItemViewInfo; var ADone: Boolean);
var
ARec: TRect;
AIsVertical: Boolean;
AIndicatorKind: TcxIndicatorKind;
X, Y: Integer;
begin
ARec := AViewInfo.Bounds;
ACanvas.Canvas.Font.Assign(FFonts[Integer(vtDetail), Integer(cdaIndicatorCell)]);
if not (AViewInfo is TcxGridIndicatorRowItemViewInfo) then
AIndicatorKind := ikNone
else
AIndicatorKind := TcxGridIndicatorRowItemViewInfo(AViewInfo).IndicatorKind;
case FCustomDrawingStyle[Integer(vtDetail), Integer(cdaIndicatorCell)] of
cdsBkImage:
begin
ACanvas.Brush.Bitmap := nil;
ACanvas.Brush.Assign(FGridBrushDetailIndicatorCell);
ACanvas.FillRect(ARec);
ACanvas.Brush.Bitmap := nil;
end;
cdsGradient:
begin
AIsVertical := (FColorScheme[Integer(vtDetail), Integer(cdaIndicatorCell)] = csGrey) or (FColorScheme[Integer(vtDetail), Integer(cdaIndicatorCell)] = csGold);
DrawGradient(ACanvas.Canvas, ARec, ColorScheme[Integer(FColorScheme[Integer(vtDetail), Integer(cdaGroupCell)]), 1], ColorScheme[Integer(FColorScheme[Integer(vtDetail), Integer(cdaIndicatorCell)]), 0], 40, AIsVertical)
end;
end;
if AIndicatorKind <> ikNone then
begin
with imIndicatorImages, ARec do
begin
X := (Left + Right - Width) div 2;
Y := (Top + Bottom - Height) div 2;
end;
imIndicatorImages.Draw(ACanvas.Canvas, X, Y, IndicatorImageIndex[vtDetail], True);
end;
ADone := not (FCustomDrawingStyle[Integer(vtDetail), Integer(cdaIndicatorCell)] in [cdsDefaultDrawing]);
end;
procedure TCustomDrawTableViewDemoMainForm.miCustomDrawEditorClick(
Sender: TObject);
begin
CustomDrawTableViewDemoStylesEditorForm.Show;
end;
procedure TCustomDrawTableViewDemoMainForm.SetCustomDrawingStyle(
AViewType: TViewType; ACustomDrawArea: TCustomDrawArea;
const Value: TCustomDrawingStyle);
begin
if FCustomDrawingStyle[Integer(AViewType), Integer(ACustomDrawArea)] <> Value then
begin
FCustomDrawingStyle[Integer(AViewType), Integer(ACustomDrawArea)] := Value;
case AViewType of
vtMaster:
begin
tvCars.LayoutChanged(False);
tvCars.Painter.Invalidate;
end;
vtDetail:
begin
tvOrders.LayoutChanged(False);
tvOrders.Painter.Invalidate;
end;
end;
end
end;
function TCustomDrawTableViewDemoMainForm.GetCustomDrawingStyle(
AViewType: TViewType;
ACustomDrawArea: TCustomDrawArea): TCustomDrawingStyle;
begin
Result := FCustomDrawingStyle[Integer(AViewType), Integer(ACustomDrawArea)];
end;
procedure TCustomDrawTableViewDemoMainForm.SetCustomDrawingStyles;
var
i, j: Integer;
begin
FGridBrushMasterCell := TBrush.Create;
FGridBrushMasterGroupCell := TBrush.Create;
FGridBrushMasterFooterCell := TBrush.Create;
FGridBrushMasterColumnHeader := TBrush.Create;
FGridBrushMasterIndicatorCell := TBrush.Create;
FGridBrushMasterPartBackground := TBrush.Create;
FGridBrushDetailCell := TBrush.Create;
FGridBrushDetailGroupCell := TBrush.Create;
FGridBrushDetailFooterCell := TBrush.Create;
FGridBrushDetailColumnHeader := TBrush.Create;
FGridBrushDetailIndicatorCell := TBrush.Create;
FGridBrushDetailPartBackground := TBrush.Create;
FIndicatorImageIndex[Integer(vtMaster)] := 0;
FIndicatorImageIndex[Integer(vtDetail)] := 0;
for i:=0 to 1 do
for j:=0 to 5 do
FBkImages[1, j] := bkiTile;
FGridBrushMasterCell.Bitmap := FTileBitmap;
FGridBrushMasterGroupCell.Bitmap := FTileBitmap;
FGridBrushMasterColumnHeader.Bitmap := FTileBitmap;
FGridBrushMasterFooterCell.Bitmap := FTileBitmap;
FGridBrushMasterIndicatorCell.Bitmap := FTileBitmap;
FGridBrushMasterPartBackground.Bitmap := FTileBitmap;
FGridBrushDetailCell.Bitmap := FTileBitmap;
FGridBrushDetailGroupCell.Bitmap := FTileBitmap;
FGridBrushDetailColumnHeader.Bitmap := FTileBitmap;
FGridBrushDetailFooterCell.Bitmap := FTileBitmap;
FGridBrushDetailIndicatorCell.Bitmap := FTileBitmap;
FGridBrushDetailPartBackground.Bitmap := FTileBitmap;
FColorScheme[Integer(vtMaster), 0] := csBlue;
FColorScheme[Integer(vtDetail), 1] := csBlue;
for i:=0 to 1 do
for j:=0 to 5 do
FCustomDrawingStyle[i, j] := cdsGradient;
end;
procedure TCustomDrawTableViewDemoMainForm.tvCarsCustomDrawColumnHeader(
Sender: TcxGridTableView; ACanvas: TcxCanvas;
AViewInfo: TcxGridColumnHeaderViewInfo; var ADone: Boolean);
var
ARec: TRect;
ATextToDraw: String;
AIsVertical: Boolean;
begin
ATextToDraw := AViewInfo.Text;
ARec := AViewInfo.Bounds;
ACanvas.Canvas.Font.Assign(FFonts[Integer(vtMaster), Integer(cdaColumnHeader)]);
case FCustomDrawingStyle[Integer(vtMaster), Integer(cdaColumnHeader)] of
cdsBkImage:
begin
ACanvas.Brush.Bitmap := nil;
ACanvas.Brush.Assign(FGridBrushMasterColumnHeader);
ACanvas.FillRect(ARec);
ACanvas.Brush.Bitmap := nil;
end;
cdsGradient:
begin
AIsVertical := (FColorScheme[Integer(vtMaster), Integer(cdaColumnHeader)] = csGrey) or (FColorScheme[Integer(vtMaster), Integer(cdaColumnHeader)] = csGold);
DrawGradient(ACanvas.Canvas, ARec, ColorScheme[Integer(FColorScheme[Integer(vtMaster), Integer(cdaColumnHeader)]), 1], ColorScheme[Integer(FColorScheme[Integer(vtMaster), Integer(cdaColumnHeader)]), 0], 40, AIsVertical)
end;
end;
InflateRect(ARec, -cxGridCellTextOffset, -cxGridCellTextOffset);
SetBkMode(ACanvas.Canvas.Handle, TRANSPARENT);
ACanvas.DrawText(ATextToDraw, ARec, 0);
ADone := FCustomDrawingStyle[Integer(vtMaster), Integer(cdaColumnHeader)] <> cdsDefaultDrawing;
end;
procedure TCustomDrawTableViewDemoMainForm.tvCarsCustomDrawFooterCell(
Sender: TcxGridTableView; ACanvas: TcxCanvas;
AViewInfo: TcxGridColumnHeaderViewInfo; var ADone: Boolean);
var
ARec: TRect;
ATextToDraw: String;
AIsVertical: Boolean;
begin
ATextToDraw := AViewInfo.Text;
ARec := AViewInfo.Bounds;
ACanvas.Canvas.Font.Assign(FFonts[Integer(vtMaster), Integer(cdaFooterCell)]);
case FCustomDrawingStyle[Integer(vtMaster), Integer(cdaFooterCell)] of
cdsBkImage:
begin
ACanvas.Brush.Bitmap := nil;
ACanvas.Brush.Assign(FGridBrushMasterFooterCell);
ACanvas.Canvas.FillRect(ARec);
ACanvas.Brush.Bitmap := nil;
end;
cdsGradient:
begin
AIsVertical := (FColorScheme[Integer(vtMaster), Integer(cdaFooterCell)] = csGrey) or (FColorScheme[Integer(vtMaster), Integer(cdaFooterCell)] = csGold);
DrawGradient(ACanvas.Canvas, ARec, ColorScheme[Integer(FColorScheme[Integer(vtMaster),
Integer(cdaFooterCell)]), 1], ColorScheme[Integer(FColorScheme[Integer(vtMaster), Integer(cdaFooterCell)]), 0], 40, AIsVertical)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -