MsgBox non modale ?

bebeb3 Messages postés 13 Date d'inscription lundi 20 janvier 2003 Statut Membre Dernière intervention 18 septembre 2003 - 16 sept. 2003 à 16:21
bebeb3 Messages postés 13 Date d'inscription lundi 20 janvier 2003 Statut Membre Dernière intervention 18 septembre 2003 - 18 sept. 2003 à 01:02
Y a t'il un moyen d'avoir une message box non modale ?

Je voudrais pouvoir afficher un message sans pour autant suspendre l'execution du programme et si possible en passant par l'api. Ca m'éviterait de recréer une boite de dialogue.

5 réponses

yvemoreau Messages postés 308 Date d'inscription mardi 11 juin 2002 Statut Membre Dernière intervention 26 septembre 2008
17 sept. 2003 à 04:57
bonjour,

essai ceci: ajoute ce type dans l'interface de ton unité qui aura besoin du message.

unit ?????;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, StdCtrls;

type
afficheMessage = class(TThread)
private
protected
procedure Execute;override;
public
caption:PChar;
messages:PChar;
uType:Cardinal;
constructor Create(a:PChar;b:PChar;c:Cardinal);
end;

et dans la partie implémentation:

procedure afficheMessage.Execute;
begin
MessageBox(application.Handle,messages,caption,uType);
end;

constructor afficheMessage.Create(a:PChar;b:PChar;c:Cardinal);
begin
FreeOnTerminate := True;
inherited Create(false);
Priority := tpNormal;
messages:=a;
caption:=b;
uType:=c;
end;

maintenant au lieu de faire messageBox(handle,'','',mbOk)

afficheMessage.Create('message','caption',mbOk);

ça devrais si j'ai bien compris la question...

yve
0
bebeb3 Messages postés 13 Date d'inscription lundi 20 janvier 2003 Statut Membre Dernière intervention 18 septembre 2003
17 sept. 2003 à 11:15
J'avais moi aussi pensé à afficher le message dans un thread différent. Mais cela ne fonctionne pas. La boite de dialogue reste modale vis-à-vis de l'application qui fait l'appel (ça vient de Application.Handle).

Je vais encore chercher mais si quelqu'un a une idée, j'suis toujours preneur :D
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
18 sept. 2003 à 00:27
J'avance une hypothèse : pourquoi ne pas utiliser Self.Handle au lieu de Application.Handle ?
Puisque, dans ce cas Self fait référence au thread lui-même et que les threads possèdent une propriété Handle.

Je pense que la proposition d'yvemoreau doit pouvoir fonctionner et qu'elle est même très intéressante !

Tiens nous au courant...
May Delphi be with you
0
bebeb3 Messages postés 13 Date d'inscription lundi 20 janvier 2003 Statut Membre Dernière intervention 18 septembre 2003
18 sept. 2003 à 00:54
Très judicieuse remarque qui fait que cela fonctionne maintenant à la perfection.

Encore Merci et à charge de revanche. (quand je ne buterai plus sur des petits problèmes comme ça ;o)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bebeb3 Messages postés 13 Date d'inscription lundi 20 janvier 2003 Statut Membre Dernière intervention 18 septembre 2003
18 sept. 2003 à 01:02
Pour ceux que ça interressent, voilà le code source mis à jour

unit uThreadMsg;

interface

uses Messages, Classes,windows;

type
afficheMessage = class(TThread)
private
protected
procedure Execute;override;
public
caption:PChar;
messages:PChar;
uType:Cardinal;
constructor Create(a:PChar;b:PChar;c:Cardinal);
end;

implementation

procedure afficheMessage.Execute;
begin
messagebox(self.Handle,messages,caption,uType);
end;

constructor afficheMessage.Create(a:PChar;b:PChar;c:Cardinal);
begin
FreeOnTerminate := True;
inherited Create(false);
Priority := tpNormal;
messages:=a;
caption:=b;
uType:=c;
end;

end.
0
Rejoignez-nous