J'ai toujours écrit des composants non visuels; leur création est assez facile et ils fonctionnent aussi bien sous VCL et FMX. Jusqu'ici tout va bien, mais maintenant je suis confronté à un problème.Composant visuel Delphi avec Canvas
J'utilisé pour hériter de TComponent
mais maintenant je ne peux plus parce que mon composant appelé TRedistPreview
a vraiment besoin d'une telle procédure:
procedure drawPreview(area: TCanvas);
Cette procédure doit dessiner quelque chose (formes, lignes et couleurs) quelque part, pour exemple dans un TRectangle
. J'ai vu en ligne que TComponent
n'a pas la capacité de dessiner, donc je devrais hériter de quelque chose d'autre. J'ai trouvé TWinControl
(mais c'est VCL seulement) et (VCL seulement, aussi).
Pourriez-vous s'il vous plaît me dire de quoi je devrais hériter pour obtenir une toile? Je veux dire, je veux remplacer:
TRedistPreview = class(TComponent)
end;
Avec:
TRedistPreview = class(TSomeClassThatHasCanvas)
end;
où je peux appeler procedure drawPreview(area: TCanvas);
et tirer sur une surface (comme un TRectangle
).
Je cherche la classe la plus basse possible dans la hiérarchie avec un canevas.
Étant donné que ce composant est très utile pour moi sous Windows et Android, je suis à la recherche d'une implémentation Firemonkey. D'après mes recherches, j'ai vu que je pouvais hériter de TRectangle
, qui se trouve à l'intérieur de FMX.Objects
, mais je ne sais pas si c'est le bon choix.
Que dois-je faire?
De même, si j'avais besoin que ce composant soit en VCL, dois-je écrire un autre composant qui hérite d'une autre classe? Comme je l'ai dit, c'est la première fois que j'écris des composants visuels, alors j'aimerais que quelqu'un me montre la bonne voie!
Absolument parfait pour conduire à partir de TComponent. Aucune raison du tout que vous ne pouvez pas implémenter une méthode pour dessiner votre composant sur un canevas. Bien sûr, ce design pourrait être faux. Peut-être que vous avez besoin d'un contrôle visuel. Peut-être que vous demandez la mauvaise chose. –
Oui, VCL et FMX ne sont en aucune façon compatibles entre eux - pas dans le sens d'écrire un seul contrôle qui fonctionne sur les deux. C'est essentiellement comme essayer d'installer un moteur diesel à partir d'un semi-remorque en mini cooper. –
Pour commencer, vous pouvez jeter un coup d'oeil à quelque chose d'écrit d'avance, comme mon code dans cette question: https://stackoverflow.com/questions/31767346/capturing-signature-very-sketchy-on-touch-screen Étudie-le et implémente ta propre chose. –