1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
| const
TailleTriangle = 12;
type
TSortDirection = (sdNone, sdDescending, sdAscending);
// pour le agrandir la zone afin de pouvoir placer la fleche
Procedure AjusteTitle(Column : TColumn);
var
i : integer;
Gri : TDbGrid;
Begin
Gri := Column.grid as TDbGrid;
if assigned(Gri) Then
begin
for i := 0 to Pred(Gri.Columns.Count) do
begin
if [fsBold] = Gri.Columns[i].Title.Font.Style Then
begin
Gri.Columns[i].Title.Alignment := taCenter;
Gri.Columns[i].Width := Gri.Columns[i].Width - TailleTriangle;
end;
Gri.Columns[i].Title.Font.Style := [];
end;
end;
Column.Title.Alignment := taLeftJustify;
Column.Width := Column.Width + TailleTriangle;
Column.Title.Font.Style := [fsBold];
end;
// pour le dessin de la fleche
procedure DrawFlecheorder(Sender: TObject;Afont : Tfont;Rect : Trect;Sort : TSortDirection);
var
r: TRect;
h: integer;
t: array[0..2] of TPoint;
begin
with (Sender as TDBGrid), Canvas do
begin
// Get the header rectangle
r := Rect;
OffsetRect(r, 0, -r.Top);
// Set triangle vertex points
h := r.Bottom - r.Top;
h := h div 4;
if sort = sdAscending Then
begin
t[0].X := r.Right - h;
t[0].Y := r.Top + 3*h;
t[1].X := r.Right - 3*h;
t[1].Y := r.Top + 3*h;
t[2].X := r.Right - 2*h;
t[2].Y := r.Top + h;
end
else
if sort = sdDescending Then
begin
t[0].X := r.Right - h;
t[0].Y := r.Top + h;
t[1].X := r.Right - 3*h;
t[1].Y := r.Top + h;
t[2].X := r.Right - 2*h; //pointe
t[2].Y := r.Top + 3*h;
end;
// Draw triangle for down arrow
Brush.Color := AFont.color;
Polygon(t);
end;
end;
Procedure OrderQuery(Column : TColumn;Sort : TSortDirection);
var
Gri : TDbGrid;
Quer : TQuery;
Order : String;
Begin
Gri := Column.grid as TDbGrid;
Quer := Gri.DataSource.dataset as TQuery;
Quer.Close;
Order := '';
if sort = sdAscending Then
Order := 'order by '+Column.FieldName+' Asc'
else
if sort = sdDescending Then
Order := 'order by '+Column.FieldName+' Desc'
if trim(Order) Then
Quer.SQL[Quer.SQL.Count-1] := Order;
Quer.open;
end; |