在AdvStringGrid的OnGetCellColor()事件中對符合條件的格子添加了背景色。
那對某一列內容進行排序時,除了傳統意義上的升序和降序外,可以按照背景色進行排序嗎?
uj5u.com熱心網友回復:
procedure TForm1.FormCreate(Sender: TObject);
var
i: integer;
begin
AdvStringGrid1.SortSettings.Show := True;
for i := 1 to AdvStringGrid1.RowCount - 1 do
AdvStringGrid1.Cells[2, i] := IntToStr(i);
end;
procedure TForm1.AdvStringGrid1GetCellColor(Sender: TObject; ARow,
ACol: Integer; AState: TGridDrawState; ABrush: TBrush; AFont: TFont);
begin
if (ACol = 3) and (ARow > 0) then
if StrToIntDef(AdvStringGrid1.Cells[2, ARow], 0) > 2 then
ABrush.Color := clGreen
else
ABrush.Color := clGray;
end;
var
sdColor: TSortDirection = sdAscending;
procedure TForm1.AdvStringGrid1ClickSort(Sender: TObject; ACol: Integer);
begin
if (ACol = 3) then
begin
AdvStringGrid1.SortSettings.Column := ACol - 1;
if sdColor = sdAscending then
sdColor := sdDescending
else
sdColor := sdAscending;
AdvStringGrid1.SortSettings.Direction := sdColor;
AdvStringGrid1.QSort;
end;
end;
uj5u.com熱心網友回復:
procedure TForm1.AdvStringGrid1GetCellColor(Sender: TObject; ARow,ACol: Integer; AState: TGridDrawState; ABrush: TBrush; AFont: TFont);
begin
if (ACol = 3) and (ARow > 0) then
if (StrToIntDef(AdvStringGrid1.Cells[2, ARow], 0) mod 2=0) then
ABrush.Color := clGreen
else
ABrush.Color := clGray;
end;
procedure TForm1.AdvStringGrid1ClickSort(Sender: TObject; ACol: Integer);
begin
if (ACol = 3) then
begin
AdvStringGrid1.SortSettings.Column := ACol;
if sdColor = sdAscending then
sdColor := sdDescending
else
sdColor := sdAscending;
AdvStringGrid1.SortSettings.Direction := sdColor;
AdvStringGrid1.QSort;
end;
end;
我將上述兩個PROCEDURE做了點點修改,而且我希望的是按照顏色列進行排序,但結果看來顏色排序不成功~~~~~
uj5u.com熱心網友回復:
procedure TForm1.FormCreate(Sender: TObject);var
i: integer;
begin
AdvStringGrid1.SortSettings.Show := True;
for i := 1 to AdvStringGrid1.RowCount - 1 do
begin
AdvStringGrid1.Cells[2, i] := IntToStr(i);
if StrToIntDef(AdvStringGrid1.Cells[2, i], 0) mod 2 = 0 then
AdvStringGrid1.Cells[3, i] := IntToStr(clGreen)
else
AdvStringGrid1.Cells[3, i] := IntToStr(clGray);
end;
end;
procedure TForm1.AdvStringGrid1GetCellColor(Sender: TObject; ARow,
ACol: Integer; AState: TGridDrawState; ABrush: TBrush; AFont: TFont);
begin
if (ACol = 3) and (ARow > 0) then
if StrToIntDef(AdvStringGrid1.Cells[2, ARow], 0) mod 2 = 0 then
begin
ABrush.Color := clGreen;
AFont.Color := clGreen;
end
else
begin
ABrush.Color := clGray;
AFont.Color := clGray;
end;
end;
var
sdColor: TSortDirection = sdAscending;
procedure TForm1.AdvStringGrid1ClickSort(Sender: TObject; ACol: Integer);
begin
{if (ACol = 3) then
begin
AdvStringGrid1.SortSettings.Column := ACol - 1;
if sdColor = sdAscending then
sdColor := sdDescending
else
sdColor := sdAscending;
AdvStringGrid1.SortSettings.Direction := sdColor;
AdvStringGrid1.QSort;
end;}
end;
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/157038.html
標籤:VCL組件開發及應用
