Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1496 connectés 

  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  [Delphi] Utiliser MessageDlg dans un thread ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Delphi] Utiliser MessageDlg dans un thread ?

n°926797
Profil sup​primé
Posté le 18-12-2004 à 11:05:32  answer
 

Salut à tous,
 
Je n'arrive pas à utiliser MessageDlg dans un thread... si jamais je le fait, Delphi me renvoie ce message d'erreur en debug :
 

Code :
  1. ---------------------------
  2. Notification d'une exception du débogueur
  3. ---------------------------
  4. Le projet XXXXXX.exe a provoqué une classe d'exception EInvalidOperation avec le message 'Le canevas ne permet pas de dessiner'.  Processus stoppé. Utilisez Pas-à-pas ou Exécuter pour continuer.
  5. ---------------------------
  6. OK   Aide 
  7. ---------------------------


 
Voilà le code que j'utilise pour la partie qui pose problème :
 

Code :
  1. // Procédure Click sur bouton Send (Envoi de fichiers)
  2. procedure TFRM_UMMain.BTN_SendClick(Sender: TObject);
  3. var
  4.   id : cardinal;
  5. begin
  6.   if IdFTP1.Connected then CreateThread(nil,0,@UploadFile, nil,0,id);
  7. end;


 

Code :
  1. procedure UploadFile; stdcall;
  2. begin
  3. with FRM_UMMain do begin
  4. ../..
  5.     MessageDlg(UM_GetErrorMessage('UMLO04'), mtError, [mbOK], 0);
  6. ../..
  7. end;
  8. end;


 
La finalité de tout ça : c'est de renvoyer un message d'info/d'erreur selon le cas à l'utilisateur dans un thread qui fait une boucle de traitement.
 
Cette partie de code est utilisée pour uploader des fichiers via FTP pour remettre dans le contexte.
 
Merci de vos conseils et d'une aide éventuelle car je continue à chercher mais toujour rien... d'où ce post :)

mood
Publicité
Posté le 18-12-2004 à 11:05:32  profilanswer
 

n°926836
Profil sup​primé
Posté le 18-12-2004 à 11:56:00  answer
 

Bon finallement, j'ai trouvé quelque chose pour éviter cela :
 

Code :
  1. MessageBox(0,PChar('mon texte de message'),'titre de la msg box',MB_OK);


 

n°926946
antp
Super Administrateur
Champion des excuses bidons
Posté le 18-12-2004 à 16:40:54  profilanswer
 

En effet, MessageBox ça fonctionne.
En fait dans un thread tu ne peux pas toucher à la VCL comme ça.
MessageBox étant un appel direct à une fonction de l'API Win32, ça passe.
 
Pour ton problème de MessageDlg, il aurait pu se résoudre comme ceci :
 
FLastMessage := UM_GetErrorMessage('UMLO04');
Synchronize(ShowLastMessage);
 
où FLastMessage est un attribut "string" de ton thread, et avec ShowLastMessage qui est une procédure de ton thread contenant juste :
 
MessageDlg(FLastMessage, mtError, [mbOK], 0);
 
Dès que tu veux modifier quelque chose qui appartient à l'interface graphique tu seras obligé de faire comme ça (passer par Synchronize, qui ne te permet que d'appeler une fonction sans paramètre).


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°926966
Profil sup​primé
Posté le 18-12-2004 à 17:17:42  answer
 

Merci pour cette info également, j'avais vu sur quelques pages sur les thread et delphi les histoires de synchronisation de fenêtres mais ça me paraissait compliqué (bien que puissant :) ) pour ce que je voulais faire ;)
 
Merci encore pour l'info, c'est cool ! :D


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  [Delphi] Utiliser MessageDlg dans un thread ?

 

Sujets relatifs
Boost::threadcomment utiliser les fichiers et leur données?
Comment faire mon thread[C Linux] utiliser les fonctions de mon module
[DELPHI] DLL et passage de paramètresthread mutex et mémoire partagée
thread en parallelecomment utiliser un paquetage qui n'est pas dans le répertoire courant
Delphi 2005 architect TRIAL (US)[delphi] probleme de mise à jour d'un edit
Plus de sujets relatifs à : [Delphi] Utiliser MessageDlg dans un thread ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR