[ Delphi ] {OOP} visibilite dans une classe VCL

{OOP} visibilite dans une classe VCL [ Delphi ] - Delphi/Pascal - Programmation

Marsh Posté le 13-03-2003 à 14:19:30    

:hello:  
 
Spa une demande de compo cette fois  :o  
 
Voila le probleme, je souhaite recuperer le graphisme contenu dans un TPanel... Mais il a pas de Canvas (ou plutot le canvas n'est pas un membre visible de la classe).
 
On m'a suggere ailleur de creer une classe :
 

Code :
  1. TMyPanel = class(TPanel)
  2. published
  3.   property Canvas: TCanvas;
  4. end;


 
Ca peut forcer la visibilite du canvas ca ? Ou ca en cree un deuxieme avec le meme contenu que celui cache ?
 
Est-ce qu'il ne faidrait pas faire property Canvas: TCanvas read <je sais pas quoi mettre ici>; ?


Message édité par Ciler le 13-03-2003 à 14:20:08
Reply

Marsh Posté le 13-03-2003 à 14:19:30   

Reply

Marsh Posté le 13-03-2003 à 15:00:40    

Je pense que c'est comme ça qu'il faut faire en effet
Si la propriété est déjà définie dans un ancêtre du n'es pas obligé de définir le "read".
Quand tu parles d'un deuxième avec même contenu, t'entends quoi par "contenu" ? les property sont juste des genre de pointeurs vers des méthodes ou attributs, y a pas de contenu donc.


Message édité par antp le 13-03-2003 à 15:01:23

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 13-03-2003 à 17:23:39    

antp a écrit :

Je pense que c'est comme ça qu'il faut faire en effet
Si la propriété est déjà définie dans un ancêtre du n'es pas obligé de définir le "read".
Quand tu parles d'un deuxième avec même contenu, t'entends quoi par "contenu" ? les property sont juste des genre de pointeurs vers des méthodes ou attributs, y a pas de contenu donc.


 
OK... Je teste tonight

Reply

Marsh Posté le 14-03-2003 à 07:05:48    

cela fonctionnera mieux comme cela...
 

TMyPanel = class(TPanel)
published
    property Canvas;
end;


 
 
pour l'utiliser il te suffira alors de caster ton panel ex:  
 

TMyPanel(Panel1).Canvas.TextOut(10,10,edit1.text);


 
et je te rassure ce truc ne crééra pas un deuxième canvas, spa bo et les puristes de l'objet vont devenir tout rouge ... mais sa marche :d

Reply

Marsh Posté le 14-03-2003 à 16:51:36    

Taureau a écrit :

cela fonctionnera mieux comme cela...
 

TMyPanel = class(TPanel)
published
    property Canvas;
end;


 
 
pour l'utiliser il te suffira alors de caster ton panel ex:  
 

TMyPanel(Panel1).Canvas.TextOut(10,10,edit1.text);


 
et je te rassure ce truc ne crééra pas un deuxième canvas, spa bo et les puristes de l'objet vont devenir tout rouge ... mais sa marche :d


 
Ben... ca marche, ca marche, c'est vite dit...
 
Selon les fonctions appelees ensuite, ca donne des resultatts amusant
Image1.Canvas.Assign(MyPanel.Canvas); leve une exception
Image1.Canvas.Copyrect(x,MyPanel.Canvas,x); fonctionne  :pt1cable:  
(x est un TRect valide)

Reply

Marsh Posté le 14-03-2003 à 20:32:25    

le fait que cela lève une exception ne provient absolument pas de cette technique, mais c juste que tu ne peux assigner un TControlCanvas à un TBitmapCanvas...donc ça marche oui  :D

Reply

Marsh Posté le 14-03-2003 à 22:52:06    

Taureau a écrit :

le fait que cela lève une exception ne provient absolument pas de cette technique, mais c juste que tu ne peux assigner un TControlCanvas à un TBitmapCanvas...donc ça marche oui  :D  


 
 :non:  
 
J'ai essaye de balancer le canvas a un autre TMyPanel et ca fait  
Impossible d'assigner un TControlCanvas à un TControlCanvas  :pt1cable:


---------------
And I looked, and behold a pale horse: and his name that sat on him was Death, and Hell followed with him. Revelations 6:8
Reply

Marsh Posté le 15-03-2003 à 12:01:58    

ben c normal non ? il ne faut pas confondre un canvas avec une bitmap...en plus ton canvas est en lecture seule...
 
donc si c pour faire un copie de son contenu il faut nécessaire faire Canvas.Copyrect

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed