IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 Delphi Discussion :

Positionner une MessageDlg, c est possible ?


Sujet :

Delphi

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 549
    Points : 226
    Points
    226
    Par défaut Positionner une MessageDlg, c est possible ?
    Bonjour

    J aimerai savoir s il est possible de positionner un MessageDlg en poMainFormCenter et si oui comment ?

    Merci

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 431
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 431
    Points : 1 327
    Points
    1 327
    Par défaut
    Bonjour à toutes et à tous,

    @ sp2308, a tester :

    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;
    Utilisation :

    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;
    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
    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;
    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
     
    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;
    Il y a certainement plus simple !

    @+,

    Cincap

  3. #3
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 346
    Points : 3 124
    Points
    3 124
    Par défaut
    Bonjour,

    Tu peux t'inspirer de la FAQ sur MessageDlg :

    MessageDlg

    on y gère la position avec PoCenter

    A+

    Charly

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 549
    Points : 226
    Points
    226
    Par défaut
    Merci à vous deux, j ai ce qu il me faut maintenant...

  5. #5
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 469
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 469
    Points : 24 905
    Points
    24 905
    Par défaut
    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

  6. #6
    Membre expérimenté Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Points : 1 448
    Points
    1 448
    Par défaut
    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 ...

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 431
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 431
    Points : 1 327
    Points
    1 327
    Par défaut
    @ 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

  8. #8
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 469
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 469
    Points : 24 905
    Points
    24 905
    Par défaut
    Citation Envoyé par cincap Voir le message
    @ ShaileTroll, pour la position, il y a des tas de méthodes,
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VB]Retouver les clés des items d'une Collection, c'est possible ?
    Par marchand_de_sable dans le forum VBA Access
    Réponses: 11
    Dernier message: 19/12/2016, 16h44
  2. Réponses: 2
    Dernier message: 25/06/2008, 10h39
  3. Réponses: 8
    Dernier message: 04/07/2007, 12h51
  4. [POO] Une Classe dans une Classe. C'est possible?
    Par FrankOVD dans le forum Langage
    Réponses: 2
    Dernier message: 18/05/2006, 22h02
  5. [HTTP][Socket] avec une url c'est possible ?
    Par tck-lt dans le forum Entrée/Sortie
    Réponses: 13
    Dernier message: 19/08/2005, 09h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo