Bonjour,
dans une méthode d'une TStringGrid, je crée un TMemo. La propriété "Visible" du TMemo par défaut a pour valeur True. Elle doit le rester car j'effectue des mesures de tailles sur celui-ci. Or si TMemo est invisible, les mesures sont impossibles.
Mon premier code a été celui-ci :
1 2 3 4 5 6 7 8 9 10 11
| procedure TForm1.SG1HeaderSized(Sender: TObject; IsColumn: Boolean; Index: Integer);
var
aMemo : TMemo;
begin
aMemo := TMemo.Create(nil); {ou aMemo := TMemo.Create(Sender as TStringGrid);}
aMemo.Parent := Sender as TStringGrid ;
SG1.BeginUpdate;
[...]
SG1.EndUpdate(True);
aMemo.Free;
end; |
Après la modification de la taille d'une colonne de la TstringGrid, le code est effectué. Pendant une fraction de seconde, je vois le TMemo en avant plan au dessus de la TStringGrid. Cela produit un effet désagréable.
Mon premier réflexe a été de "déplacer" l'effet :
aMemo.Left := SG1.Width +1;
Bof....
J'ai réglé le problème autrement pour l'instant :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| procedure TForm1.SG1HeaderSized(Sender: TObject; IsColumn: Boolean; Index: Integer);
var
aMemo : TMemo;
aWctrl : TWinControl;
begin
aWctrl := TWinControl.Create(Sender as TStringGrid);
aWctrl.Parent := Sender as TStringGrid;
aMemo := TMemo.Create(aWctrl );
aMemo.Parent := aWctrl;
SG1.BeginUpdate;
[...]
SG1.EndUpdate(True);
aMemo.Free;
aWctrl.Free;
end; |
Ce dernier code fonctionne comme attendu : le TMemo a bien sa propriété par défaut Visible := True; et il est invisible lors de son fonctionnement.
Je me demandais si la première approche pouvait être corrigée sans l'utlilisation d'un TWinControl comme dans la deuxième.
Cordialement. Gilles
Partager