1 pièce(s) jointe(s)
Relation entre composant FMX et son Canvas
Bonjour,
Mon besoin est simple , j'ai une Form en FMX qui possede un TPanel et je veux dessiner une ligne dans le TPanel.
Mon TPanel possede les props suivantes
Width = 300
Height = 200
La procedure qui dessine est la suivante :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| procedure TForm3.Button1Click(Sender: TObject);
var
aCanvas:TCanvas;
begin
aCanvas := Panel1.Canvas;
if aCanvas.BeginScene then
try
aCanvas.Stroke.Thickness := 1.5;
aCanvas.Stroke.Kind := TBrushKind.bkSolid;
aCanvas.Fill.Color := TAlphaColorRec.Black;
aCanvas.Fill.Kind := TBrushKind.bkSolid;
aCanvas.DrawLine(PointF(0, 0), PointF(300, 200),1);
finally
aCanvas.EndScene;
end;
end; |
On part bien de 0,0 qui devrait etre l'origine du composant Panel et aller au point opposé en bas à droite. Cette procédure devrait dessiner une diagonale.
Or le résultat est que la droite dessinée part bien de 0,0 mais celui de la Form propriétaire du TPanel et pas du TPanel lui-même.
Pièce jointe 597688
De plus quand on redimensionne la fenetre, le trait precedement tracé disparait.
Question 1) Chaque composant ne possede t il pas son propre Canvas ou bien partage il celui de la Form en dessous
Question 2) Y a t il un moyen de changer la gestion de l origine du Canvas d un composant sans faire un changement de repere à la mano
Question 3) Que faire pour persister le trait pour qu il ne disparaisse pas lors d'un redimensionement de fenetre
Merci d'avance.
1 pièce(s) jointe(s)
Un premier élément de réponse
J'ai mis un Timage dans le TPanel
ET j'ai préchargé l'image avec une image blanche de 50x50
Pièce jointe 597692
L'image peut être générée dynamiquement.
Ensuite :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
procedure TForm1.Button1Click(Sender: TObject);
begin
with Image1.Bitmap.Canvas do
begin
BeginScene ;
Stroke.Thickness := 1.5;
Stroke.Kind := TBrushKind.bkSolid;
Fill.Color := TAlphaColorRec.Black;
Fill.Kind := TBrushKind.bkSolid;
DrawLine(PointF(0, 0), PointF(50, 50),1);
EndScene ;
end;
end; |