Bonjour
J aimerai savoir s il est possible de positionner un MessageDlg en poMainFormCenter et si oui comment ?
Merci
Bonjour
J aimerai savoir s il est possible de positionner un MessageDlg en poMainFormCenter et si oui comment ?
Merci
Bonjour à toutes et à tous,
@ sp2308, a tester :
Utilisation :
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
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46 public { Déclarations publiques } procedure pmChangeMessageBox(var Msg: TMessage); message WM_USER +1024; end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.pmChangeMessageBox(var Msg: TMessage); var MBHwnd : THandle; MBRect : TRect; x, y, w, h : integer; msgCaption : PChar; begin MBHwnd := FindWindow(MAKEINTRESOURCE(WC_DIALOG), msgCaption); if (MBHwnd <> 0) then begin GetWindowRect(MBHWnd, MBRect); w := MBRect.Right -MBRect.Left; h := MBRect.Bottom -MBRect.Top; //center horz x := Form1.Left + ((Form1.Width - w) div 2); //keep on screen if x < 0 then x := 0 else if x + w > Screen.Width then x := Screen.Width - w; //center vert y := Form1.Top + ((Form1.Height - h) div 2); //keep on screen if y < 0 then y := 0 else if y + h > Screen.Height then y := Screen.Height - h; SetWindowPos(MBHWnd, 0, x, y, 0, 0, SWP_NOACTIVATE OR SWP_NOSIZE OR SWP_NOZORDER); end; end;
Centre le message par rapport à la forme :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 procedure TForm1.BmClick(Sender: TObject); var msgCaption : PChar; begin PostMessage(Handle, WM_USER +1024, 0, 0); msgCaption := 'Test'; MessageBox(Handle, 'Do you want to save your changes?', msgCaption, MB_ICONQUESTION OR MB_YESNOCANCEL); end;
Et Centrer le message par rapport à l'écran:
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 implementation {$R *.dfm} function MessageDlg(const AOwner: TForm; const Msg: string; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; HelpCtx: Integer = 0): Integer; begin with CreateMessageDialog(Msg, DlgType, Buttons) do try Left := AOwner.Left + (AOwner.Width - Width) div 2; Top := AOwner.Top + (AOwner.Height - Height) div 2; Result := ShowModal; finally Free; end end; procedure TForm1.BmClick(Sender: TObject); begin MessageDlg(Self, 'Mon test', mtInformation, [mbOK]); end;
Il y a certainement plus simple !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 procedure TForm1.Button1Click(Sender: TObject); begin case MessageBox(Handle, PChar('This is a test. Do you wish to do something?'), PChar('A Silly Example'), MB_ICONQUESTION or MB_YESNO) of ID_YES: MessageBox(Handle, PChar('Great!'), PChar('A Silly Example'), MB_ICONINFORMATION or MB_OK); ID_NO: MessageBox(Handle, PChar('OK, well, I cannot force you...'), PChar('A Silly Example'), MB_ICONINFORMATION or MB_OK); end; end;
@+,
Cincap
Bonjour,
Tu peux t'inspirer de la FAQ sur MessageDlg :
MessageDlg
on y gère la position avec PoCenter
A+
Charly
Mon site : http://lapaille.byethost24.com/index.htm
Merci à vous deux, j ai ce qu il me faut maintenant...
Dans MessageDlg ou MessageDlgPos, si l'on indique X et Y à -1 cela définie par défaut poScreenCenter
Dommage de ne pas avoir prévu une variable global à ce sujet que l'on puisse choisir entre poScreenCenter, poMainFormCenter et poDesktopCenter
Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
Attention Troll Méchant !
"Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
L'ignorance n'excuse pas la médiocrité !
L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
Il faut avoir le courage de se tromper et d'apprendre de ses erreurs
Je me demande si le Handle que tu passe à MessageBox ne permet pas de definir sa position. Donc si tu lui donne la Handle de ta MainForm, peut-être qu'il sera centré dessus. A vérifier ...
@ ShaileTroll, pour la position, il y a des tas de méthodes, j'utilise ceci :
@+,
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
23
24
25
26
27
28
29 procedure TForm1.BButton1Click(Sender: TObject); var MsgDialogOk: TForm; begin MsgDialogOk := CreateMessageDialog(EMessage1.Text, mtWarning,[mbYES]); with MsgDialogOk do try // Changer le titre de Message Caption := 'Cincap';//ou Tedit ETitre1.Text; // Modifier le text de boutton oui TButton(FindComponent('Yes')).Caption := 'Merci';//ou Tedit EButton1.Text; // Modifier l'apparence de message avec l'annimation AnimateWindow(Handle, 500, AW_CENTER); // Définir la position de message Position := poDesktopCenter;// ou Tedit poMainFormCenter;//poScreenCenter; // Afficher le message ShowModal; finally // Libérer la mémoire Free; end; end;
Cincap
Oui, je sais, j'ai bidouillé aussi sur CreateMessageDialog pour remplacer par des TBitBtn et avoir un bouton par défaut, je voulais dire "dommage que cela n'existe pas en standard"
Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
Attention Troll Méchant !
"Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
L'ignorance n'excuse pas la médiocrité !
L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
Il faut avoir le courage de se tromper et d'apprendre de ses erreurs
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager