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
| procedure TFmCtrlGrid.BST7DBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
var
RectEnVar, ARect: TRect;
TextToDrawing: String;
Hauteur,c,r,Arow,Acol,ColCount : Integer;
begin
if Assigned(Column.Field) then begin
// Obtenir les num de colonne et de ligne en cours
for c := 0 to TDrawGrid(Sender).ColCount - 1 do
for r := 0 to TDrawGrid(Sender).RowCount - 1 do
begin
ARect := TDrawGrid(Sender).CellRect(c,r);
if (ARect.Top-1 = TDrawGrid(Sender).RowHeights[0])
and (ARect.Left-1 = TDrawGrid(Sender).ColWidths[0]) then
fFirstCol := c;
if (ARect.Top > 0) and (ARect.Left > 0) then
ColCount := c;
if (ARect.Top = Rect.Top) and (ARect.Left = Rect.Left) then
begin
ARow := r;
ACol := c;
end;
end;
if ACol = fFirstCol then fHauteur := TDrawGrid(Sender).DefaultRowHeight;
// La Variale doit être Passée en Var dans l'API
RectEnVar := Rect;
// Dessine avec une taille de Font Raisonnable
TDBGrid(Sender).Canvas.Font.Size := 8; // une Fausse Font est affecté à la grille qui permet d'afficher de 2 à 5 lignes selon la largeur de la dite grille, eh oui, plus dur de redimensionner une DBGrid
// Efface la Zone
TDBGrid(Sender).Canvas.FillRect(Rect);
TextToDrawing := Column.Field.AsString ;
hauteur := Windows.DrawText(
TDBGrid(Sender).Canvas.Handle,
PChar(TextToDrawing),
Length(TextToDrawing),
RectEnVar,
DT_WORDBREAK
);
if Hauteur > fHauteur then fHauteur := Hauteur;
// TDrawGrid(Sender).RowHeights[ARow] := fhauteur
if (ACol = ColCount) {and (TDrawGrid(Sender).RowHeights[ARow] <= fHauteur)} then
TDrawGrid(Sender).RowHeights[ARow] := fHauteur;
end;
end; |
Partager