Forum Clubic

Création de composant en live -> pb de gestion d'événement

Bjr, je suis en train de programmer un soft qui permet de développer rapidement des interfaces graphiques (un peu dans le style MultiInstall mais en + évolué)

Le truc, c’est que je créer des composants TImages auxquels je veux associer des événements du type “OnMouseMove” etc…

Pb: vu qu’au moment de la compilation les composants n’existent pas, impossible de leur associer un TNotifyEvent, et quand je les créer (au cours de l’exécution), impossible de leur associer une procédure (conflit de type entre “procédure” et “TNotifyEvent”), même si le prototype est correct…

Une idée??? Parce que là, je seche!

tu peux montrer le code que tu utilises ?

un truc comme

[cpp]

procedure TForm1ImageMouseMove(sender : TObject;shift:TShiftState;X,Y:integer);
begin
caption := ‘coucou’;
end;

procedure TForm1.createImage;
begin
runImage := TImage.create(self);
runImage.Parent := self;
runImage.left := 10;
runImage.top := 10;
runImage.OnMouseMove := ImageMouseMove;
end;
[/cpp]

doit fonctionner, le TImage sera créé directement sur la forme, si tu veux le positionner sur un autre composant tu fais

runImage.Parent := ComposantOuAfficherImages;

C’est exactement le code là que j’utilise, sauf qu’en ligne 12 je lui passe TForm1.ImageMouseMove et qu’à la compile il me lance un “Erreur, type incompatible entre TNotifyEvent et procédure”

Mais je vais revérifier mon code!!!

ne cherche pas plus loin vire ton TForm1.ImageMouseMove et passe simplement ImageMouseMove

tu mélanges un peu classe et instance, tu peux lire cet article http://laurent-dardenne.developpez.com/articles/metaclasse/

Bah, ça me semblait logique…

Imagine 2 classes différentes ayant chacune une fonction ou procédure portant le même nom.

T’as donc TForm1.bidule et TForm2.bidule.

Si tu créés un control est que tu lui associes bidule, il prend lequel??

tu confonds la classe TForm1 qui n’est qu’un moule (je schématise) avec une variable de type TForm, si tu regardes dans ton source tu vas voir une ligne du genre

var Form1:TForm1;

donc en fait lorsque tu fais

runImage.OnMouseMove := ImageMouseMove;

cela est équivalent à

runImage.OnMouseMove := form1.ImageMouseMove;

OKi, merci pour les explicatiob :jap: