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

API, COM et SDKs Delphi Discussion :

API MEssageBoxTimeOut non documentée


Sujet :

API, COM et SDKs Delphi

  1. #1
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 426
    Points : 3 064
    Points
    3 064
    Par défaut API MEssageBoxTimeOut non documentée
    Bonjour

    https://www.delphibasics.info/home/d...imeoutfunction

    Pas mal ce truc ...

    Vious en connaissez d'autres qui seraient sympas et qui ne sertaient pas disponibles directement depuis Delphi ?
    J-L aka Papy pour les amis

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 491
    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 491
    Points : 24 968
    Points
    24 968
    Par défaut
    Citation Envoyé par Papy214 Voir le message
    Vious en connaissez d'autres qui seraient sympas et qui ne sertaient pas disponibles directement depuis Delphi ?
    Pour le "non disponible directement", tu voulais dire qu'il n'y a pas le Wrapper PAS fourni avec Delphi et le nombre de fonction non encapsulé de Windows est tout simplement colossal !
    Pour MessageBoxTimeout c'est même pire que ça, elle n'est même pas présente de winuser.h (include Windows.h) soit donc de Windows.pas, car Microsoft se réserve l'utilisation mais ne doit pas spécialement la voir utiliser par d'autres programmeurs.

    On n'aurait pas déjà un sujet concernant cette API ?


    EDIT : Messagebox avec Timeout, même auteur, même sujet, à fusionner ! non ?

    Personnaliser un MessageDlg qui se fermerait automatiquement après quelques secondes et MessageBoxTimeout et W2K
    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

  3. #3
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 426
    Points : 3 064
    Points
    3 064
    Par défaut
    Je ne me souvenais plus en avoir parlé mais de toutes façons, le lien qui renvoyait vers le détails de l'article n'est plus fonctionnel.
    J-L aka Papy pour les amis

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 491
    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 491
    Points : 24 968
    Points
    24 968
    Par défaut
    Citation Envoyé par Papy214 Voir le message
    Je ne me souvenais plus en avoir parlé mais de toutes façons, le lien qui renvoyait vers le détails de l'article n'est plus fonctionnel.
    Du coup, on risque de perdre aussi le nouveau lien, autant récupérer le code écrit par Jens Borrisholt qui il faut le préciser est conçu pour un Delphi ANSI, pour le rendre compatible avec un Delphi Unicode, il faut modifier le PChar en PAnsiChar comme ci-dessous
    Avec le {$IFDEF UNICODE} la version A et W sont en phase avec la version du Delphi, même code pour les tous les Delphi

    Since this function is not documented, it is not found in Windows.pas, so it has to be defined. It is identical to the MessageBox API definition except it has two more parameters, wLanguageID and dmMilliseconds.
    section Interface
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function MessageBoxTimeOut( 
          hWnd: HWND; lpText: {$IFDEF UNICODE}PWideChar{$ELSE}PAnsiChar{$ENDIF}; lpCaption: {$IFDEF UNICODE}PWideChar{$ELSE}PAnsiChar{$ENDIF} ; 
          uType: UINT; wLanguageId: WORD; dwMilliseconds: DWORD): Integer; stdcall;
    function MessageBoxTimeOutA( 
          hWnd: HWND; lpText: PAnsiChar; lpCaption: PAnsiChar ; 
          uType: UINT; wLanguageId: WORD; dwMilliseconds: DWORD): Integer; stdcall;
    function MessageBoxTimeOutW( 
          hWnd: HWND; lpText: PWideChar; lpCaption: PWideChar; 
          uType: UINT; wLanguageId: WORD; dwMilliseconds: DWORD): Integer; stdcall;
     
    // this const is not defined in Windows.pas 
    const 
      MB_TIMEDOUT = 32000;
    section Implementation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function MessageBoxTimeOut; external user32 name {$IFDEF UNICODE}'MessageBoxTimeoutW'{$ELSE}'MessageBoxTimeoutA'{$ENDIF}; 
    function MessageBoxTimeOutA; external user32 name 'MessageBoxTimeoutA'; 
    function MessageBoxTimeOutW; external user32 name 'MessageBoxTimeoutW';
    Now, to call the function, it is as easy as setting the flags and making the call. There may be other results returned that I am not aware of besides the standard IDxxx return values and the MB_TIMEDOUT result defined above.
    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
     
    var 
      iResult: Integer; 
      iFlags: Integer; 
    begin 
      // Define a MessagBox  with an OK button and a timeout of 2 seconds 
      iFlags  := MB_OK or MB_SETFOREGROUND or MB_SYSTEMMODAL or MB_ICONINFORMATION;
      iResult := MessageBoxTimeout( 
       Application.Handle, 
       'Test a timeout of 2 seconds.', 
       'MessageBoxTimeout Test', iFlags, 0, 2000); 
      // iResult will = 1 (IDOK) 
      ShowMessage(IntToStr(iRet)); 
      // Define a MessageBox with a Yes and No button and a timeout of 5 seconds 
      iFlags  := MB_YESNO or MB_SETFOREGROUND or MB_SYSTEMMODAL or MB_ICONINFORMATION; 
      iResult := MessageBoxTimeout( 
        Application.Handle, 
        'Test a timeout of 5 seconds.', 
        'MessageBoxTimeout Test', iFlags, 0, 5000); 
      // iResult = MB_TIMEDOUT if no buttons clicked, otherwise 
      // iResult will return the value of the button clicked 
      case iResult of 
      IDYES:  // Pressed Yes button 
        ShowMessage('Yes'); 
      IDNO:  // Pressed the No button 
        ShowMessage('No'); 
      MB_TIMEDOUT: // MessageBox timed out 
        ShowMessage('TimedOut'); 
      end; 
    end;
    I presume Borland will not put this into Windows.pas until Microsoft documents it but developers can get a head start on them by using the code above. It is unlikely that Microsoft will depricate this function for quite some time because all of the standard MessageBox API calls actually call MessageBoxTimeOutA or MessageBoxTimeoutW and pass $FFFFFFFF as the timeout period meaning the dialog will wait a very long time, approx 49 days!
    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

  5. #5
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 491
    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 491
    Points : 24 968
    Points
    24 968
    Par défaut
    Et pour avoir un code plus proche du MessageDlg

    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
    function MessageDlgTimeOut(const APrompt, ATitle: string; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; ATimeOut: Cardinal; out AResult: TModalResult): Boolean;
    const
      ICONS: array [TMsgDlgType] of UINT = (MB_ICONWARNING, MB_ICONERROR, MB_ICONINFORMATION, MB_ICONQUESTION, 0);
    var
      iFlags: Integer;
    begin
      iFlags  := MB_SETFOREGROUND or MB_SYSTEMMODAL or ICONS[DlgType];
     
      if Buttons = [TMsgDlgBtn.mbOK] then
      begin
        iFlags := iFlags or MB_OK;
      end
      else if Buttons = mbOkCancel then
      begin
        iFlags := iFlags or MB_OKCANCEL;
      end
      else if (Buttons = mbYesAllNoAllCancel) or (Buttons = mbYesNoCancel) then
      begin
        iFlags := iFlags or MB_YESNOCANCEL;
      end
      else if (Buttons = mbAbortRetryIgnore) or (Buttons = mbAbortIgnore) then
      begin
        iFlags := iFlags or MB_ABORTRETRYIGNORE;
      end
      else if (Buttons = mbYesNo) then
      begin
        iFlags := iFlags or MB_YESNO;
      end
      else if (Buttons = [TMsgDlgBtn.mbRetry, TMsgDlgBtn.mbCancel]) then
      begin
        iFlags := iFlags or MB_RETRYCANCEL;
      end;
      if TMsgDlgBtn.mbHelp in Buttons then
        iFlags := iFlags or MB_HELP;
     
      AResult := MessageBoxTimeout(Application.Handle, PChar(APrompt), PChar(ATitle), iFlags, 0, ATimeOut);
      Result := AResult <> MB_TIMEDOUT;
    end;


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    const
      RES: array[idOK .. mrContinue] of string = ('OK', 'Cancel', 'Abort', 'Retry', 'Ignore', 'Yes', 'No', 'Close', 'Help', 'Try Again', 'Continue');
    var
      mr: TModalResult;
    begin
      if MessageDlgTimeOut('Prompt', 'Title', mtConfirmation, mbYesNo, 5000, mr) then
        ShowMessage(RES[mr])
      else
        ShowMessage('TimeOut');
    end;
    typiquement on écrira


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    var
      mr: TModalResult;
    begin
      if MessageDlgTimeOut('Prompt', 'Title', mtConfirmation, mbYesNoCancel, 5000, mr) then
      begin
        case mr of
          mrYes: ... Faire le Truc Oui
          mrNo: ... Faire le Truc Non 
          mrCancel: ... Ne rien faire surement 
      end;
    end;
    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 expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 426
    Points : 3 064
    Points
    3 064
    Par défaut
    Toujours aussi précis et efficace ....
    J-L aka Papy pour les amis

Discussions similaires

  1. Type Delphi .NET non documenté
    Par Laurent Dardenne dans le forum Delphi .NET
    Réponses: 0
    Dernier message: 27/08/2007, 14h29
  2. certains types non documentés?
    Par hansaplast dans le forum wxWidgets
    Réponses: 5
    Dernier message: 02/02/2006, 13h15
  3. API pour les documents word (*.doc,*.rtf)
    Par Bradarys dans le forum Windows
    Réponses: 10
    Dernier message: 16/11/2005, 13h45
  4. [API]JTAPI non reconnu par eclipse
    Par julio84 dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 15/04/2005, 14h03
  5. Réponses: 6
    Dernier message: 21/06/2002, 14h48

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