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 :

Boîte de dialogue


Sujet :

Delphi

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Amateur
    Inscrit en
    Mai 2020
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Mai 2020
    Messages : 32
    Points : 28
    Points
    28
    Par défaut Boîte de dialogue
    Bonjour à tous. J’ai un nouveau problème. Il y a plusieurs années, j’avais téléchargé ce programme : MessageBox_HiA sur DELPHICOOL, pour créer des boites de dialogue, il fonctionnait très bien, mais avec Delphi 2010, je me suis confronté à un problème que j’ai pu résoudre assez facilement, mais maintenant, j’ai un autre problème avec.
    Ce qui est bien avec ce programme, c’est qu’on peut personnaliser sa boite, titre, icones….
    Voilà mon problème : j’ai 2 boutons radio, 1 – Fichier A. 2 – Fichier B. Je mets dans une variable Fichier : string ; , soit le fichier A ou le fichier B.
    Quand j’exécute le programme, je teste la présence du fichier A ou B. si ils n’existent pas, je voudrais mettre dans cette boîte de dialogue ’Le fichier ‘+fichier+’ n’existe pas’

    Code généré par le programme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var MaMessageBox : Integer  
     
    Begin
     
        MaMessageBox := MessageBoxA(0,Pchar('Le fichier n''existe pas.'),Pchar('Fichier '),0 + MB_ICONINFORMATION + 0);
    J’avais une erreur de compilation, après avoir enlevé les Pchar, ça fonctionne très bien.

    JE la modifie comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Var
    Fichier, FichierA, FichierB : String;
     
    If not(FileExists(Fichier)) Then
          Begin
            MaMessageBox := MessageBoxA(0, ('Le fichier'+Fichier+' est introuvable .'),
              ('Fichier '), 0 + MB_ICONEXCLAMATION + 0);
    Et j’ai une erreur de compilation .
    [DCC Erreur] Unit1.pas(153): E2010 Types incompatibles : 'string' et 'PAnsiChar'

  2. #2
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 726
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 726
    Points : 5 376
    Points
    5 376
    Par défaut
    Dans ton premier exemple, tu as une chaine en dur qui est directement traduite dans le bon type, donc tu n'as pas besoin de faire la conversion.
    Dans le deuxième, tu les déclares explicitement en String, il faut donc faire une conversion.

    PAnsiChar(Fichier).
    Ou PAnsiChar(AnsiString(Fichier)).

  3. #3
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 563
    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 563
    Points : 25 160
    Points
    25 160
    Par défaut
    Est-il pertinent d'utiliser MessageBoxA dans un Delphi Unicode comme Delphi 2010 ?
    Il semble évident de passer à MessageBoxW si l'on veut rester dans l'API Windows mais la VCL contient depuis des années, au moins Delphi 3, la fonction MessageDlg qui ne justifie pas l'utilisation de MessageBoxW
    Voir L’art et la manière de créer des boîtes de messages rapidement

    Il existe MessageDlg qui est plus simple et très similaire
    Il existe TTaskDialog encore plus évolué mais ça doit être des Delphi plus récents, d'ailleurs, c'est bien Delphi 2010 et non Delphi 10, la confusion étant possible

    Je ne vois pas l'intérêt de MessageBox_HiA, c'est un générateur de code de MessageBoxA, euh ... ça doit prendre plus de temps à utiliser le générateur qu'à écrire le code soit-même.
    Ecrire le code d'un MessageBoxA ou d'un MessageDlg est tellement trivial qu'un générateur de code n'apporte rien, pire il habitue à ne pas comprendre ce que l'on fait !

    utiliser un Format pour être plus lisible
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
       MaMessageBox := MessageBoxW(0, PChar(Format('Le fichier %s est introuvable .', [Fichier])), PChar('Fichier '), MB_ICONEXCLAMATION);
    Encore plus simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
       MessageDlg(Format('Le fichier %s est introuvable .', [Fichier]), mtWarning, [mbOK], 0);
    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

Discussions similaires

  1. Réponses: 5
    Dernier message: 04/04/2003, 15h02
  2. [BPW] Dialogues communs Windows 32 bits
    Par Alcatîz dans le forum Turbo Pascal
    Réponses: 28
    Dernier message: 29/03/2003, 22h59
  3. [MFC] Boîte de dialogue chronométrée
    Par mdriesbach dans le forum MFC
    Réponses: 5
    Dernier message: 18/02/2003, 12h40
  4. Comment cree une boite de dialogue parcourir
    Par kenshi dans le forum MFC
    Réponses: 5
    Dernier message: 06/01/2003, 10h30
  5. Dll et boîte de dialogue MFC
    Par paulj dans le forum MFC
    Réponses: 3
    Dernier message: 19/12/2002, 09h59

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