//DataGrid进度条实现过程:
static procedure TProjManageLib.DoCustomDrawPercentCell(Sender: TObject;
ACanvas: TCanvas; ARect: TRect;
ANode: TTreeListNode; AColumn: TTreeListColumn;
ASelected, AFocused, ANewItemRow: Boolean;
APlanPercent, AFactPercent: Integer;
var AText: string;
var AColor: Integer; AFont: TFont;
var AAlignment: TAlignment;
var ADone: Boolean);
var
I: Integer;
lColorList: Array of Integer;
lPercentText: string;
begin
if ADone then Exit;
ACanvas.Brush.Style := TBrushStyle.bsClear;
DoDrawBrushColor(Sender, ACanvas.Brush, ANode, AColor, ASelected, AFocused);
ACanvas.Pen.Color := ACanvas.Brush.Color;
ACanvas.Rectangle(ARect);
ACanvas.Pen.Color := $000000;
ACanvas.Rectangle(ARect.Left + 1, ARect.Top + 1, ARect.Right - 1, ARect.Bottom - 1);
if APlanPercent > AFactPercent then
lColorList := [$1C1C53, $282877, $323295, $3A3AAC, $3E3EBA, $4040BF]
else
lColorList := [$006100, $008500, $009300, $00aa00, $00c800, $00ec00];
for I := 0 to 5 do
begin
ACanvas.Pen.Color := lColorList[I];
ACanvas.MoveTo(ARect.Left + 2, ARect.Top + 2 + I);
ACanvas.LineTo(ARect.Right - 2, ARect.Top + 2 + I);
ACanvas.MoveTo(ARect.Left + 2, ARect.Bottom - 3 - I);
ACanvas.LineTo(ARect.Right - 2, ARect.Bottom - 3 - I);
end;
ACanvas.Brush.Style := TBrushStyle.bsSolid;
ACanvas.Brush.Color := $FF8080;
ACanvas.Pen.Color := $FF8080;
ACanvas.Rectangle(ARect.Left + 2, ARect.Top + 4, ((ARect.Right - 2) - (ARect.Left + 2)) * APlanPercent div 100 + (ARect.Left + 2), ARect.Top + 7);
ACanvas.Brush.Color := $800040;
ACanvas.Pen.Color := $800040;
ACanvas.Rectangle(ARect.Left + 2, ARect.Top + 9, ((ARect.Right - 2) - (ARect.Left + 2)) * AFactPercent div 100 + (ARect.Left + 2), ARect.Top + 12);
ACanvas.Brush.Style := TBrushStyle.bsClear;
lPercentText := SysUtils.Format('%d%%', [AFactPercent]);
ACanvas.Font.Size := 9;
ACanvas.Font.Color := $ffffff;
ACanvas.TextOut(
(ARect.Right - ARect.Left) div 2 + ARect.Left - ACanvas.TextWidth(lPercentText) div 2,
ARect.Top + 2, lPercentText);
ADone := True;
end;
static procedure TProjManageLib.DoDrawBrushColor(Sender: TObject;
ABrush: TBrush; ANode: TTreeListNode; AColor: Integer;
ASelected, AFocused: Boolean);
begin
if ANode.Owner.Focused and ASelected then
ABrush.Color := Graphics.clHighlight
else if ANode.HasChildren or (ASelected and not AFocused) then
begin
if AColor = Graphics.clWhite then
ABrush.Color := Graphics.clBtnFace
else
ABrush.Color := AColor;
end
else
ABrush.Color := AColor;
end;
static function TProjManageLib.VarToInt(V: Variant): Integer;
begin
if not (Variants.VarIsNUll(V) or Variants.VarIsEmpty(V) or Variants.VarIsClear(V)) and
Variants.VarIsType(V, [$0002, $0003, $0010, $0011, $0012, $0013]) then
Result := Integer(V) else
Result := 0;
end;
static function TProjManageLib.IndexOfTreeColumn(ADataTreeList: TDataTreeList;
const FieldName: string): Integer;
var
I: Integer;
begin
for I := 0 to ADataTreeList.ColumnCount - 1 do
if (SysUtils.AnsiCompareText(ADataTreeList.Columns[I].FieldName, FieldName) = 0) or
((ADataTreeList.Columns[I].FieldName = '') and
(SysUtils.AnsiCompareText(ADataTreeList.Columns[I].Name, FieldName) = 0)) then
begin
Result := I;
Exit;
end;
Result := -1;
end;
static function TProjManageLib.IndexOfGridColumn(ADataGrid: TDataGrid;
const FieldName: string): Integer;
var
I: Integer;
begin
for I := 0 to ADataGrid.ColumnCount - 1 do
begin
if (SysUtils.AnsiCompareText(ADataGrid.Columns[I].ColumnDef.FieldName, FieldName) = 0) or
((ADataGrid.Columns[I].ColumnDef.FieldName = '') and
(SysUtils.AnsiCompareText(ADataGrid.Columns[I].Name, FieldName) = 0)) then
begin
Result := I;
Exit;
end;
end;
Result := -1;
end; |