Bonjour,

J'utilise un DBGrid s'appuyant sur des données présentes dans un fichier DBF. Une colonne de ce fichier est de type ftMemo.

Pour l'afficher convenablement dans mon DBgrid j'ai eu recours à DrawColumnCell et PrepareCanvas.
J'arrive donc à afficher le contenu du mémo dans la cellule du DBGrid avec retour à la ligne et à colorer une ligne entière en fonction de la valeur d'une colonne.

Je bloque sur la hauteur de la ligne. J'aimerais la faire varier en fonction du contenu de la colonne mémo.
Mais impossible de déterminer comment agir sur cette hauteur. J'ai pensé à cela :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
procedure Tf_menu.grid_demandePrepareCanvas(sender: TObject; DataCol: Integer;
  Column: TColumn; AState: TGridDrawState);
var
  grid_style: TTextStyle;
  t_comment: String;
  h_comment_mini, h_comment, nb_car_ligne,
    h_ligne, nb_lignes:integer;
 
begin
  t_comment := '';
  nb_car_ligne := 75;
  h_comment_mini := 20;
  h_ligne := 20;
 
  t_comment := grid_demande.DataSource.DataSet.FieldByName('descriptio').AsString;
  nb_lignes := Ceil( Length( t_comment ) / nb_car_ligne );
  h_comment := nb_lignes * h_ligne;
  if h_comment < h_comment_mini then
     h_comment := h_comment_mini;
 
  // Hauteur de ligne adaptée au mémo
  grid_demande.Canvas.Height := h_comment;
 
  // Word wrap dans celulle MEMO
  grid_style := grid_demande.Canvas.TextStyle;
  grid_style.SingleLine := false;
  grid_style.Wordbreak := true;
  grid_demande.Canvas.TextStyle := grid_style;
 
  // Ligne grisée si demande soldée
  if grid_demande.DataSource.DataSet.FieldByName('etat').AsString = 'Soldée' then
  begin
    grid_demande.Canvas.Brush.Color := clGray;
    grid_demande.Canvas.Font.Color := clWhite;
  end;
end;
La propriété DBGrid.Canvas.Height est protected, et pas de méthode SetHeight ...

Avez-vous une idée sur comment faire ?

D'avance merci