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 :

forcer la fenêtre Dos sur un Tpanel D6 et Windows 10 en gardant la structure existante !


Sujet :

Delphi

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

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 420
    Points : 1 325
    Points
    1 325
    Par défaut forcer la fenêtre Dos sur un Tpanel D6 et Windows 10 en gardant la structure existante !
    Bonjour à toutes et à tous,

    Depuis un moment j'essaie d'afficher avec mon code la fenêtre Dos dans un Tpanel en gardant cette structure.

    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
     
    begin
     
    h:=0;
     
     ExecuteFile:='Monfichier.bat';
     
     FillChar(SEInfo, SizeOf(SEInfo), 0) ;
     SEInfo.cbSize := SizeOf(TShellExecuteInfo) ;
     
     with SEInfo do begin
     fMask := SEE_MASK_NOCLOSEPROCESS;
     Wnd := Application.Handle;
     
     lpFile := PChar(ExecuteFile) ;
     nShow := SW_SHOWNORMAL;
     end;
     
     if ShellExecuteEx(@SEInfo) then begin
     repeat
     
     Application.ProcessMessages;
     
    end;
    J'avais testé ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    try
      while h=0 do
       h:=findwindow('ConsoleWindowClass',FileMSDos);   // ConsoleWindowClass
       Windows.SetParent(h,Panel1.handle);
       SetWindowPos(h,HWND_TOP,-2,-2,panel1.width +0,panel1.height +0,SWP_SHOWWINDOW);
       form1.ActiveControl := panel1;//Donne le focus
    Mais je n'arrive pas à le placer dans mon code

    Si quelqu'un a une idée merci d'avance.

    Excellent dimanche.

    @+,

    cincap

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

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 420
    Points : 1 325
    Points
    1 325
    Par défaut
    @ tous, voila une solution qui m'agrée :

    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
     
     if ShellExecuteEx(@SEInfo) then begin
     
    //Ici
     try
     
      while h=0 do
       h:=findwindow('ConsoleWindowClass',FileMSDos);   // ConsoleWindowClass
       Windows.SetParent(h,Panel1.handle);
       SetWindowPos(h,HWND_TOP,-2,-2,panel1.width,panel1.height +0,SWP_SHOWWINDOW);
       finally
       form1.ActiveControl := panel1;//Donne le focus
    //Fin
     repeat
     
    Application.ProcessMessages;
    @+,

    cincap

  3. #3
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 339
    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 339
    Points : 3 107
    Points
    3 107
    Par défaut
    Bonjour Cincap,

    ce ne serait pas plutôt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
      While h=0 do
       Begin
         h:=findwindow('ConsoleWindowClass',FileMSDos);   // ConsoleWindowClass
         Windows.SetParent(h,Panel1.handle);
         SetWindowPos(h,HWND_TOP,-2,-2,panel1.width,panel1.height +0,SWP_SHOWWINDOW);
         finally
         form1.ActiveControl := panel1;//Donne le focus
         Application.ProcessMessages;
       End ;
    Ton Try est incomplet et Repeat ne sert à rien (sinon c'est Repeat .... Until ..)
    A+
    Charly

  4. #4
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 671
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 671
    Points : 13 065
    Points
    13 065
    Par défaut
    Citation Envoyé par Charly910 Voir le message
    ce ne serait pas plutôt :
    Non, la boucle while ne sert qu'à attendre que la fenêtre soit créée, qu'un handle soit retourné. C'est la mauvaise indentation du code qui t'induit en erreur

  5. #5
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 339
    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 339
    Points : 3 107
    Points
    3 107
    Par défaut
    Oh Oui Pardon pour le While avec une seule instruction !

    A+
    Charly

    Ps : Il manque quand même le End du Try Finally ? (sauf si le Repeat incomplet est dans le Finally ?

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

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 420
    Points : 1 325
    Points
    1 325
    Par défaut
    @ Charly910 et @ Andnotor, merci pour votre participation mais le code n'étant pas complet, c'est normal qu'il suscite un commentaire sinon tout est bien présent :

    Depuis un moment j'essaie d'afficher avec mon code la fenêtre Dos dans un Tpanel en gardant cette structure.
    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
     
     form1.ActiveControl := panel2;//Donne le focus
     
       Fin:=False;
     
        Repeat
          { On attend la fin de l'application }
          Case WaitForSingleObject(ProcessInfo.hProcess, 200)Of
            WAIT_OBJECT_0 :Fin:=True; { L'application est terminée, on sort }
            WAIT_TIMEOUT  :;          { elle n'est pas terminée, on continue d'attendre }
          End;
          { Mise à jour de la fenêtre pour que l'application ne paraisse pas bloquée. }
          Application.ProcessMessages;
        Until Fin;
        { C'est fini }
    Sinon cela fonctionne correctement en fait c'est pour réaliser une conversion d'un fichier audio .wma vers un fichier audio .mp3 avec FFmpeg.

    Cordialement,

    @+,

    cincap

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

Discussions similaires

  1. [XL-2010] Inhiber la fenêtre DOS sur commande .exec (VBA)
    Par abenj123 dans le forum Excel
    Réponses: 1
    Dernier message: 25/11/2015, 16h49
  2. [VB6] Lire et écrire sur une fenêtre dos...
    Par Zenar dans le forum VB 6 et antérieur
    Réponses: 14
    Dernier message: 16/03/2008, 14h14
  3. Question sur la fenêtre DOS
    Par Madguitar63 dans le forum Général Python
    Réponses: 4
    Dernier message: 31/03/2007, 15h12
  4. [BATCH-DOS] Sur quel forum poster ?
    Par Beaunico dans le forum Scripts/Batch
    Réponses: 4
    Dernier message: 17/09/2004, 19h30
  5. Modifier la taille de la fenêtre DOS
    Par bobgeldof7 dans le forum Scripts/Batch
    Réponses: 8
    Dernier message: 31/01/2004, 04h10

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