bonjour à tous,
je cherche à utiliser composant dans un thread.
D'habitude, j'utilise une forme et j'y insère mes composants.
Mais là ???![]()
Quelqu'un pourrait-il m'aider.
Merci d'avance.
bonjour à tous,
je cherche à utiliser composant dans un thread.
D'habitude, j'utilise une forme et j'y insère mes composants.
Mais là ???![]()
Quelqu'un pourrait-il m'aider.
Merci d'avance.
Explique toi un peu mieux... Quels composants, de quels façon tu veux les utiliser? etc.
Pedro
Aucune réponse aux sollicitations techniques par MP
Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)
Les pages Source C'est bon. Mangez-en!
Le défi Delphi
Règles du forum - FAQ Delphi - Pensez au chtit
Aéroclub Bastia Saint-Exupéry
Avec le peu d'info qu'on a là, je dirais que tu veux créer dynamiquement ton composant
par exemple pour utiliser un TEdit il faudra le déclarer puis le créer par la code
[EDIT] pour le timer : [/EDIT]
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 (...) var MonEdit : TEdit; begin MonEdit := TEdit.create(self); MonEdit.text:='Bonjour le monde !'; Showmessage(MonEdit.text); (...)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 (...) var MonTimer : TTimer; begin MonTimer := TTimer.create(self); MonTimer.interval := 3000; MonTimer.OnTimer:=MaProcedureTimer end; procedure TForm1.MaProcedureTimer(Sender : TObject); begin Showmessage('Voilà déjà 3 secondes d''écoulé, que le temps passe vite !'); end; (...)
J'ai déclaré
Puis j'ai créé la procédure suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Timer1:TTimer
Mais le programme ne rentre pas dans la procédure.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 procedure TThread.Timer1(sender:TObject) begin showmessage('salut'); end;
Je ne comprends pas pourquoi![]()
je ne sais pas si tu as eu le temps de lire mon [EDIT] plus haut mais
est très important
Code : Sélectionner tout - Visualiser dans une fenêtre à part MonTimer.OnTimer:=MaProcedureTimer
As-tu bien assigné OnTimer de ton Timer avec ta procedure?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 MonTimer.OnTimer:=Timer1;
Pedro
Aucune réponse aux sollicitations techniques par MP
Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)
Les pages Source C'est bon. Mangez-en!
Le défi Delphi
Règles du forum - FAQ Delphi - Pensez au chtit
Aéroclub Bastia Saint-Exupéry
J'ai une erreur de compilation à la ligne suivante :
Erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 MonTimer := TTimer.create(self);
Voici mon code:Type incompatibles : TComponent et THread_MaThread
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 procedure TThread.Timer1(sender:TObject) begin Timer1:=TTimer.create(self); Timer1.Interval:=2000; showmessage('salut'); end;
De plus Timer1 est déclaré en global.
Je ne sais pas si le pb peut venir de la
C'est bizarre ton truc:
Tu appelles ton TTimer Timer1 et ta procedure s'appelle aussi Timer1?
Je pense que tu t'es mélangé les pinceaux...![]()
En général, il faut créer l'objet dans le OnCreate du Thread...
Pedro
Aucune réponse aux sollicitations techniques par MP
Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)
Les pages Source C'est bon. Mangez-en!
Le défi Delphi
Règles du forum - FAQ Delphi - Pensez au chtit
Aéroclub Bastia Saint-Exupéry
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 procedure TThread.Timer1Timer(sender:TObject) begin Timer1:=TTimer.create(self); Timer1.Interval:=2000; showmessage('salut'); end;
n'empêche que tu t'es vraiment mélangé les pinceaux quand meme !
la déclaration de la variable TTimer en global, ça c'est bon.
mais la création, l'initialisation de l'interval et la liaison du OnTimer doit se faire sur un create ou un OnCreate, mais surtout pas dans l'évenement onTimer.
enlève donc le Create et l'initialisation de l'interval de ta procédure Timer1timer1 ça marchera mieux, et n'oublie pas de lier l'évenement OnTimer à ta procédure comme écrit plus haut
Bon courage !
Attention à la création de composants graphiques dans des threads. Seul le thread principal doit normalement manipuler de tels éléments, il faut alors passer par Synchronize.
Pour ajouter des objets dans un autre objet, ici un timer dans un Thread, le plus simple est de déclarer l'objet comme membre privé/protégé de l'objet qui accueuille, de le construire dans le constructeur de ce dernier et de le détruire dans le destructeur :
Il faut ensuite éventuellement lier les procédures d'évènements (ce qui a été expliqué plus haut) dans le constructeur de l'objet...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 type TMyThread = class(TThread) private FTimer: TTimer; public constructor Create(ACreateSuspended: Boolean); //de mémoire... destructor Destroy; override; end; implementation constructor TMyThread.Create(ACreateSuspended: Boolean); begin inherited; FTimer := TTimer.Create(nil); end; destructor TMyThread.Destroy; begin inherited; FTimer.Free; end;
Merci à tous pour votre aide précieuse.
mon problème est maintenant résolu
Partager