Hallo,
der Code ist noch nicht so schön strukturiert,
er ist geteilt in einer von TStringGrid abgeleiteten Klasse
und in OnDrawCell des jeweiligen Formulars.
In editgrid.res sind die Pfeile (habe ich aus dem c++-code)
In der StringGrid-Komponente steht
Delphi-Quellcode:
{$R editgrid.res}
dann im Constructor
PicUp:= TBitmap.Create;
PicUp.LoadFromResourceName(HInstance, 'ARROWUP');
PicUp.Transparent:= True;
PicDown:= TBitmap.Create;
PicDown.LoadFromResourceName(HInstance, 'ARROWDOWN');
PicDown.Transparent:= True;
===========
und im OnDrawCell des Forms
Die Zeile
iOrderId=ProjectList.iOrderId
ist True, wenn die aktuell anzuzeigende
Spalte (ACol) die Sortierspalte ist.
ProjectList.bOrderAsc benutze ich zum Umkehrung der Sortierung.
Delphi-Quellcode:
{ center caption }
if (ARow=0) then
begin
iOrderId:= GridColIndex2OrderId(ACol);
Inc(Rect.Left,2);
if iOrderId=ProjectList.iOrderId then
begin
Rect.Right:= Rect.Right-16;
end;
DrawText(c.Handle, PChar(theGrid.Cells[ACol,ARow]),
Length(theGrid.Cells[ACol,ARow]), Rect,
DT_END_ELLIPSIS or DT_CENTER);
if iOrderId=ProjectList.iOrderId then
begin
Rect.Right:= Rect.Right+16;
end;
if iOrderId=ProjectList.iOrderId then
begin
if ProjectList.bOrderAsc then
begin
c.Draw(Rect.Right-15,((Rect.Bottom-Rect.Top) div 2)-6,Grid.PicUp);
end
else
begin
c.Draw(Rect.Right-15,((Rect.Bottom-Rect.Top) div 2)-6,Grid.PicDown);
end;
end;
Wie gesagt, ist noch "Beta"
Es läuft, ist aber nicht schön.
Heiko