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

C++Builder Discussion :

Intégrer un exe externe dans un form ou Tframe ?


Sujet :

C++Builder

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2012
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Mai 2012
    Messages : 32
    Points : 10
    Points
    10
    Par défaut Intégrer un exe externe dans un form ou Tframe ?
    Bonjour tout le monde,
    j'ai un petit programme de départ réalisé depuis plusieurs anées sous un bon vieux Borland Tubo C++, mais une partie demandait de laner le navigateur.
    J'aimerai intégrer le navigateur dans mon appli, comme si on la viualisait comme on fait avec les iframe en HTML.
    J'ai trouvé ça : http://www.codeproject.com/Articles/...inForm-project mais je ne parviens pas à l reproduire ce tout petit script C# en C++.
    Et pareil avec celui-là qui semble faie l'affaire : http://stackoverflow.com/questions/2...-mozembed-like

    Comment forcer mon ShellExecuteEx pour qu'il s'exécute dans mon form ???

    j'ai vu pas mal de questions là-dessus, mais je ne parviens pas à intégrer ça dans mon appli !

    HHELLLPPP !!!!
    Merci mille fois.

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur multiplateformes
    Inscrit en
    Mars 2003
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur multiplateformes
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2003
    Messages : 273
    Points : 628
    Points
    628
    Par défaut
    Citation Envoyé par babas44 Voir le message
    Bonjour tout le monde,
    j'ai un petit programme de départ réalisé depuis plusieurs anées sous un bon vieux Borland Tubo C++, mais une partie demandait de laner le navigateur.
    J'aimerai intégrer le navigateur dans mon appli, comme si on la viualisait comme on fait avec les iframe en HTML.
    J'ai trouvé ça : http://www.codeproject.com/Articles/...inForm-project mais je ne parviens pas à l reproduire ce tout petit script C# en C++.
    Et pareil avec celui-là qui semble faie l'affaire : http://stackoverflow.com/questions/2...-mozembed-like

    Comment forcer mon ShellExecuteEx pour qu'il s'exécute dans mon form ???

    j'ai vu pas mal de questions là-dessus, mais je ne parviens pas à intégrer ça dans mon appli !

    HHELLLPPP !!!!
    Merci mille fois.

    Bonjour,

    A priori TWebBrowser devrait solutionner votre problème....

  3. #3
    Membre à l'essai
    Inscrit en
    Mai 2012
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Mai 2012
    Messages : 32
    Points : 10
    Points
    10
    Par défaut
    Merci, mais hélas non car il ne lance que Internet Explorer, je me suis remis à travailler sur une vieille version de Borland malheureusement, celle sur laquelle j'avais commencé mes softs à l'époque, sinon il faut que je réécrive tout....
    Pourtant avec le SerParent j'ai vu que certains en Delphi y étaient parvenus.

  4. #4
    Membre à l'essai
    Inscrit en
    Mai 2012
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Mai 2012
    Messages : 32
    Points : 10
    Points
    10
    Par défaut
    Nouvelle tentative avec CreateProcess :
    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
     
    STARTUPINFO StartInfo; // name structure
    PROCESS_INFORMATION ProcInfo; // name structure
    memset(&ProcInfo, 0, sizeof(ProcInfo)); // Set up memory block
    memset(&StartInfo, 0 , sizeof(StartInfo)); // Set up memory block
    StartInfo.cb = sizeof(StartInfo); // Set structure size
    int res = CreateProcess(NULL, ligne_cmd.c_str() , NULL, NULL, NULL, DETACHED_PROCESS, NULL,ExtractFilePath(Application->ExeName).c_str(), &StartInfo, &ProcInfo); // starts MyApp
    if (res)
    	WaitForInputIdle(ProcInfo.hThread, INFINITE);
    // Supprime la barre de titre
    //SetWindowLong(StartInfo, GWL_STYLE, GetWindowLong(StartInfo, GWL_STYLE));// And Not WS_CAPTION);
    //SetWindowPos(StartInfo, 0, 0, 0, 0, 0, SWP_FRAMECHANGED);// Or SWP_NOMOVE Or SWP_NOSIZE Or SWP_NOZORDER);
    // Assigne et maximise le prog externe au conteneur (un panel ici)
    SetParent(Panel1);
    ShowWindow(Panel1, SW_MAXIMIZE);
    Sauf que le SetParent dans un Panel ne semble pas fonctionner...mon navigateur K-meleon est bien lancé, dans une fenêtre extérieure et pas dans mon Form->Panel, mais j'ai un magniique débordement de pile.

  5. #5
    Membre chevronné
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Points : 2 187
    Points
    2 187
    Billets dans le blog
    1
    Par défaut
    Salut il semblerait que ton appel à createProcess est incorrect
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CreateProcess(NULL, ligne_cmd.c_str() , NULL, NULL, NULL, DETACHED_PROCESS, NULL,ExtractFilePath(Application->ExeName).c_str(), &StartInfo, &ProcInfo); // starts MyApp
    j'essaierais pour ma part
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CreateProcess(NULL, ligne_cmd.c_str() , NULL, NULL, true, DETACHED_PROCESS, NULL,ExtractFilePath(Application->ExeName).c_str(), &StartInfo, &ProcInfo); // starts MyApp
    cdlt
    vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les règles du forum

  6. #6
    Membre à l'essai
    Inscrit en
    Mai 2012
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Mai 2012
    Messages : 32
    Points : 10
    Points
    10
    Par défaut
    Merci mille fois de venir encore une fois à mon aide !!!

    J'ai essayé ta modif : mon form ne s'affiche pas, seul se lance K-Meleon. Puis après qulques essais j'ai encore du stack overflow....

    J'ai juste créé un form avec un panel puis mis ça :

    __fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
    {
    AnsiString ligne_cmd = "K-Meleon\\k-meleon.exe";
    AnsiString ligne_cmd_arg = ExtractFilePath(Application->ExeName) + "wwwBlocklyArduino\\index.html";

    STARTUPINFO StartInfo; // name structure
    PROCESS_INFORMATION ProcInfo; // name structure
    memset(&ProcInfo, 0, sizeof(ProcInfo)); // Set up memory block
    memset(&StartInfo, 0 , sizeof(StartInfo)); // Set up memory block
    StartInfo.cb = sizeof(StartInfo); // Set structure size
    int res = CreateProcess(NULL, ligne_cmd.c_str() , NULL, NULL, true, DETACHED_PROCESS, NULL,ExtractFilePath(Application->ExeName).c_str(), &StartInfo, &ProcInfo); // starts MyApp
    if (res) WaitForInputIdle(ProcInfo.hThread, INFINITE);

    // Supprime la barre de titre
    SetWindowLong(ProcInfo, GWL_STYLE, GetWindowLong(ProcInfo, GWL_STYLE));
    SetWindowPos(ProcInfo, 0, 0, 0, 0, 0, SWP_FRAMECHANGED); // Or SWP_NOMOVE Or SWP_NOSIZE Or SWP_NOZORDER);
    // Assigne et maximise le prog externe au conteneur (un panel ici)
    SetParent(Panel1);
    ShowWindow(Panel1, SW_MAXIMIZE);
    }
    Je pensais que c'était tout simple....
    Merci de m'indiquer des pistes !

  7. #7
    Membre chevronné
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Points : 2 187
    Points
    2 187
    Billets dans le blog
    1
    Par défaut
    Bonsoir
    attention pour autant que je me rappelle
    l'appel à CreateProcess devrait se faire de la manière suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CreateProcess(NULL,Ligne de commande,........)
    ou ligne de commande est la concaténation du nom complet du fichier exe + les paramètres

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    AnsiString LigneDeCommande("K-Meleon\\k-meleon.exe")+AnsiString(""www.BlocklyArduino\\index.html");
    colt
    vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les règles du forum

  8. #8
    Membre à l'essai
    Inscrit en
    Mai 2012
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Mai 2012
    Messages : 32
    Points : 10
    Points
    10
    Par défaut
    Merci de m'aiguiller sur ces détails. Ca donne maintenant juste ça :
    AnsiString LigneDeCommande("K-Meleon\\k-meleon.exe " + ExtractFilePath(Application->ExeName) + "wwwBlocklyArduino\\index.html");
    STARTUPINFO StartInfo; // name structure
    PROCESS_INFORMATION ProcInfo; // name structure
    memset(&ProcInfo, 0, sizeof(ProcInfo)); // Set up memory block
    memset(&StartInfo, 0 , sizeof(StartInfo)); // Set up memory block
    StartInfo.cb = sizeof(StartInfo); // Set structure size
    CreateProcess(NULL, LigneDeCommande.c_str() , NULL, NULL, true, DETACHED_PROCESS, NULL,ExtractFilePath(Application->ExeName).c_str(), &StartInfo, &ProcInfo);
    WaitForInputIdle(ProcInfo.hThread, INFINITE);

    //SetWindowLong(ProcInfo, GWL_STYLE, GetWindowLong(ProcInfo, GWL_STYLE));// And Not WS_CAPTION);
    //SetWindowPos(ProcInfo, 0, 0, 0, 0, 0, SWP_FRAMECHANGED);// Or SWP_NOMOVE Or SWP_NOSIZE Or SWP_NOZORDER);
    SetParent(Panel1);
    Mais mon SetPaent ne semble pas fionctionner...K-meleon se lance toujours à part..
    Pour le CreateProcess je dois utiliser un .c_str()

    Mais comment l'obliger à s'afficher dans le panel1 ???

  9. #9
    Membre chevronné
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Points : 2 187
    Points
    2 187
    Billets dans le blog
    1
    Par défaut
    Salut
    essaye ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    AnsiString LigneDeCommande("C:\\Program Files (x86)\\K-Meleon\\k-meleon.exe");
     LigneDeCommande +="wwwBlocklyArduino\\index.html";
     STARTUPINFO StartInfo; // name structure
     SecureZeroMemory(&ProcInfo,sizeof(ProcInfo)); // Set up memory block
     SecureZeroMemory(&StartInfo,sizeof(StartInfo)); // Set up memory block
     StartInfo.cb = sizeof(StartInfo); // Set structure size
     StartInfo.wShowWindow=SW_HIDE; 
     CreateProcess(NULL, LigneDeCommande.c_str() , NULL, NULL, true, DETACHED_PROCESS, NULL,"C:\\Program Files (x86)", &StartInfo, &ProcInfo);
     WaitForInputIdle(ProcInfo.hThread, INFINITE);
     HWND MelonHwnd =FindWindowEx(NULL,NULL,"KMeleon Browser Window",NULL);     // recherche du Handle de la fenêtre     
     ::SetParent(MelonHwnd,Panel1->Handle); // attention ne pas oublier les :: car la méthode de Delphi n'est pas identique
     ShowWindow(MelonHwnd,SW_SHOWMAXIMIZED);


    cdlt
    vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les règles du forum

  10. #10
    Membre à l'essai
    Inscrit en
    Mai 2012
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Mai 2012
    Messages : 32
    Points : 10
    Points
    10
    Par défaut
    Merci beaucoup de ton temps, ais ça ne fonctionne toujours pas comme je veux...
    K-Meleon se lance, mais plein écran, en dehors de mon form, même si je commente //ShowWindow(MelonHwnd,SW_SHOWMAXIMIZED);
    J'ai l'impression que les paramètres n'ont pas d'influence sur le process K-Meleon.
    Même résultat avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    AnsiString ligne_cmd = "K-Meleon\\k-meleon.exe ";
    	AnsiString ligne_cmd_arg = ExtractFilePath(Application->ExeName) + "wwwBlocklyArduino\\index.html";
    	ShExecPymata.cbSize = sizeof(SHELLEXECUTEINFO);
    			ShExecPymata.fMask = SEE_MASK_NOCLOSEPROCESS;
    			ShExecPymata.hwnd = Panel1->Handle;
    			ShExecPymata.lpVerb = NULL;
    			ShExecPymata.lpFile = ligne_cmd.c_str();
    			ShExecPymata.lpParameters = ligne_cmd_arg.c_str();
    			ShExecPymata.lpDirectory = ExtractFilePath(Application->ExeName).c_str();
    			//ShExecPymata.nShow = SW_SHOW;
    			ShExecPymata.hInstApp = NULL;
    	::SetParent(ShExecPymata.hwnd,Panel1->Handle);
    	ShowWindow(ShExecPymata.hwnd,SW_SHOWMAXIMIZED);
    	ShellExecuteEx(&ShExecPymata);
    Là je patauge complètement...

  11. #11
    Membre chevronné
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Points : 2 187
    Points
    2 187
    Billets dans le blog
    1
    Par défaut
    Salut
    dans ton code il manque la recherche de la fenêtre de l'application Kmeleon
    avec l'appel soit par ::FindWindow ou ::FindWindowX

    j'ai remarqué pour ma part un problème avec K-Meleon que tu n'a pas avec IE ou en lançant un autre exécutable pe (Notepad)via le code que je tai fournit
    pour ne pas voir ton app en plein écran il suffit de paramètrer ShExecPymata.nShow avec la valeur SW_HIDE
    par ailleurs il est utile d'attendre que ton application soit lancée avant de faire l'appel à FindWindow

    pourquoi ne pas vouloir utiliser IE qui est présent nativement sous Windows ?

    colt
    vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les règles du forum

  12. #12
    Membre à l'essai
    Inscrit en
    Mai 2012
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Mai 2012
    Messages : 32
    Points : 10
    Points
    10
    Par défaut
    Merci mille fois de prendre le temps de m'aider.
    Le problème est que j'ai besoin de Firefox pour sa compatibilité avec le plugin de chez Codebender (programmation Arduino), mon site (Blockly@rduino) est incompatible avec IE malheureusement car ça aurait été réglé avec un TWebBrowser bien rapide.
    Du coup que ce soit dans un méthode ou une autre, K-Meleon se lance à côté, je ne parviens pas à le forcer dans mon Panel.
    J'ai essayé un autre fork de Mozilla : Light, mais même pb...
    Pour moi, l'intérêt de passer par ShellExecute est de pouvoir tout de suite récupérer le PID, un truc utile dans une autre fonction.
    En plus là ce sont des fonctions que je ne maîtrise pas du tout...je tatonne je tatonne....

  13. #13
    Membre chevronné
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Points : 2 187
    Points
    2 187
    Billets dans le blog
    1
    Par défaut
    Salut
    j'aime bien de temps à autre trouver des solutions pour aider les autres
    tu trouvera ci-dessous un code parfaitement fonctionnel si ce n'est que l'URL suivante doit être fausse www.BlocklyArduino\\index.html

    voici le code
    .h
    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
     
    //---------------------------------------------------------------------------
     
    #ifndef Unit83H
    #define Unit83H
    //---------------------------------------------------------------------------
    #include <Classes.hpp>
    #include <Controls.hpp>
    #include <StdCtrls.hpp>
    #include <Forms.hpp>
    #include <ExtCtrls.hpp>
    #define WM_FILLPANEL WM_USER + 2
    //---------------------------------------------------------------------------
    class TForm83 : public TForm
    {
    __published:	// Composants gérés par l'EDI
    	TPanel *Panel1;
    	TButton *Button1;
    	TButton *Button2;
    	TLabel *Label1;
    	void __fastcall Button1Click(TObject *Sender);
    	void __fastcall Button2Click(TObject *Sender);
    	void __fastcall FillPanel(TMessage& Msg);
    private:	// Déclarations utilisateur
     
    public:		// Déclarations utilisateur
    	__fastcall TForm83(TComponent* Owner);
    protected:
      BEGIN_MESSAGE_MAP
    	   MESSAGE_HANDLER(WM_FILLPANEL, TMessage, FillPanel)
    	END_MESSAGE_MAP(TComponent)
     
    };
    //---------------------------------------------------------------------------
    extern PACKAGE TForm83 *Form83;
    //---------------------------------------------------------------------------
    #endif
    et le cpp
    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
     
    //---------------------------------------------------------------------------
    #include <vcl.h>
    #pragma hdrstop
    #include "AnsiStrings.hpp"
    #include "Unit83.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm83 *Form83;
    HWND MelonHwnd=0;
    bool __stdcall EnumProc(HWND hWnd,/*LPARAM*/long/*lp*/);
    //---------------------------------------------------------------------------
    __fastcall TForm83::TForm83(TComponent* Owner)
    	: TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm83::Button1Click(TObject *Sender)
    {
     AnsiString LigneDeCommande("C:\\Program Files (x86)\\K-Meleon\\k-meleon.exe");
     LigneDeCommande+=" www.BlocklyArduino\\index.html";
     PROCESS_INFORMATION ProcInfo={0};
     STARTUPINFO StartInfo={0}; // name structure
     StartInfo.cb = sizeof(StartInfo); // Set structure size
     StartInfo.wShowWindow=SW_HIDE;
     CreateProcess(NULL, LigneDeCommande.c_str() , NULL, NULL, true, DETACHED_PROCESS, NULL,NULL, &StartInfo, &ProcInfo);
     WaitForInputIdle(ProcInfo.hThread, INFINITE);
     Sleep(2000);
     Application->ProcessMessages();
     PostMessage(Handle, WM_FILLPANEL, 0 ,0);
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm83::Button2Click(TObject *Sender)
    {
    	PostMessage(MelonHwnd,WM_CLOSE,0,0);
    }
    //---------------------------------------------------------------------------
    bool __stdcall EnumProc(HWND hWnd,/*LPARAM*/long/*lp*/)
    {
       unsigned long* pPid;   //LPDWORD
       unsigned long result;      //DWORD
       void *hg;                  //HGLOBAL
       unsigned long id;
     
       if(hWnd==NULL)
    	  return false;
     
       hg = GlobalAlloc(GMEM_SHARE,sizeof(unsigned long));
       pPid = (unsigned long *)GlobalLock(hg);
     
       result = GetWindowThreadProcessId(hWnd,pPid);
     
       if(result){
    	  char title[110];
    	  char className[95];
    	  char totalStr[256];
    	  GetClassName(hWnd,className,95);
    	  if(AnsiContainsStr(AnsiString(className),"KMeleon Browser Window"))
    		MelonHwnd=hWnd;
    	}
       else{
    	  GlobalUnlock(hg);
    	  GlobalFree(hg);
    	  return false;
       }
       GlobalUnlock(hg);
       GlobalFree(hg);
       return true;
    }
     
    //---------------------------------------------------------------------
    void __fastcall TForm83::FillPanel(TMessage& Msg)
    {
      long lp=0;
    	EnumWindows((WNDENUMPROC)EnumProc,lp);
     if(MelonHwnd){
     Label1->Caption="Fenêtre trouvée";
     SetWindowLong(MelonHwnd, GWL_STYLE, GetWindowLong(MelonHwnd, GWL_STYLE));// And Not WS_CAPTION);
     SetWindowPos(MelonHwnd, 0, 0, 0, 0, 0, SWP_FRAMECHANGED);//
     ::SetParent(MelonHwnd,Panel1->Handle);
     SendMessage(MelonHwnd,WM_CHANGEUISTATE,UIS_CLEAR,0);
     ShowWindow(MelonHwnd,SW_SHOWMAXIMIZED);
     }
    }
    .le DFM
    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
    47
    48
    49
    50
     
    object Form83: TForm83
      Left = 0
      Top = 0
      Caption = 'Form83'
      ClientHeight = 660
      ClientWidth = 808
      Color = clBtnFace
      Font.Charset = DEFAULT_CHARSET
      Font.Color = clWindowText
      Font.Height = -11
      Font.Name = 'Tahoma'
      Font.Style = []
      OldCreateOrder = False
      PixelsPerInch = 96
      TextHeight = 13
      object Label1: TLabel
        Left = 8
        Top = 639
        Width = 31
        Height = 13
        Caption = 'Label1'
      end
      object Panel1: TPanel
        Left = 0
        Top = 0
        Width = 808
        Height = 601
        Align = alTop
        TabOrder = 0
      end
      object Button1: TButton
        Left = 176
        Top = 616
        Width = 121
        Height = 36
        Caption = 'Launch Browser'
        TabOrder = 1
        OnClick = Button1Click
      end
      object Button2: TButton
        Left = 480
        Top = 616
        Width = 121
        Height = 36
        Caption = 'Close Browser'
        TabOrder = 2
        OnClick = Button2Click
      end
    end
    pour que cela fonctionne correctement j'ai du passer par un appel asynchrone Post Message permettant d'appeler la méthode FillPanel hors de la VCL
    il y a un délai de 2 secondes via un Sleep permettant l'initialison totale de K-Meleon
    ce délai dépend de la puissance de la machine hôte

    cdlt
    vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les règles du forum

  14. #14
    Membre à l'essai
    Inscrit en
    Mai 2012
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Mai 2012
    Messages : 32
    Points : 10
    Points
    10
    Par défaut
    AAAaaaaaarrrrgggggggghhhhhhhhhhh..........
    Ca se lance toujours en dehors de la fenêtre....

    J'ai un peu modifié ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void __fastcall TForm83::Button1Click(TObject *Sender)
    {
     AnsiString LigneDeCommande("K-Meleon\\k-meleon.exe ");
     LigneDeCommande+= ExtractFilePath(Application->ExeName) + "wwwBlocklyArduino\\index.html";
    Nom : Capture.JPG
Affichages : 300
Taille : 13,7 Ko
    Et ça fonctionne mais en dehors....
    Le "closeBrowser" n'a pas d'impact par contre.

    J'ai aussi commenté ça : //if(AnsiContainsStr(AnsiString(className),"KMeleon Browser Window"))
    parce que je n'ai pas #include "AnsiStrings.hpp", mais ça ne doit pas être bloquant ?

    Nom de Zeus que c'est frustrant !

  15. #15
    Membre chevronné
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Points : 2 187
    Points
    2 187
    Billets dans le blog
    1
    Par défaut
    tu dois avoir un autre problème
    car le code que je t'ai fournit fonctionne parfaitement bien
    l'application se lance avec comme parent le bureau puis après 2 secondes délai minimum la fenêtre de l'application Kmelon s'intègre dans ton Panel
    essaye d'augmenter le délai
    si tu a compilé mon exemple qu'affiche le Label en bas à gauche de l'écran ?
    cdlt
    vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les règles du forum

  16. #16
    Membre à l'essai
    Inscrit en
    Mai 2012
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Mai 2012
    Messages : 32
    Points : 10
    Points
    10
    Par défaut
    Même avec un sleep de 10000, ça ne change rien, la fenêtre de KMeleon reste en plein écran. Avec le naviagteur Light, c'est la même chose.
    J'ai changé la méthode de recherche de chaîne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if(result){
    	  char title[110];
    	  char className[95];
    	  char totalStr[256];
    	  GetClassName(hWnd,className,95);
    	  if((string(className)).find("K-Meleon")!= -1)
    		MelonHwnd=hWnd;
    	}
    mais il ne trouve rien...
    Nom : Capture.JPG
Affichages : 437
Taille : 105,8 Ko

  17. #17
    Membre chevronné
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Points : 2 187
    Points
    2 187
    Billets dans le blog
    1
    Par défaut
    Salut
    Plusieurs pistes
    1 essayer sur un autre pc
    Réinstaller k. Melon
    A l'aide de l'outils Ms Spy vérifie que l'application k-melon a bien une fenêtre Avec comme className ´kmelon browser'
    Remplace l'appel à k-melon par un appel à notepad.

    Cdlt
    vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les règles du forum

  18. #18
    Membre à l'essai
    Inscrit en
    Mai 2012
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Mai 2012
    Messages : 32
    Points : 10
    Points
    10
    Par défaut
    Merci beaucoup de ton temps.
    Ton code fonctionne parfaitement avec le bloc note ou autre truc léger. Avec Light ou K-Meleon j'ai un bout de réponse :
    Nom : Capture.JPG
Affichages : 305
Taille : 18,6 Ko
    C'est comme s'il ne prenait qu'une partie du processus, surement la gestion des onglets...le process dans le panel semble n'être qu'un onglet et le navigateur reste dehors...

    Si je lui fais rechercher Mozilla, la "fenêtre est trouvée", mais pas d'implantation dans le TPanel.

  19. #19
    Membre à l'essai
    Inscrit en
    Mai 2012
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Mai 2012
    Messages : 32
    Points : 10
    Points
    10
    Par défaut
    NOM DE ZEUS !!!!!
    J'ai trouvé !
    En lui faisant chercher Mozilla, je me suis retrouvé avec Thunderbird dans mon panel, alors je lui ai fais chercher "Mozilla Browser" et c'est bon !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
       if(result){
    	  char title[110];
    	  char className[95];
    	  char totalStr[256];
    	  GetClassName(hWnd,className,95);
    	  if((string(className)).find("KMeleon Browser")!= -1)
    		MelonHwnd=hWnd;
    	}
    Il ne reste plus que les réglages pour que le navigateur "fusionne" davantage avec le Form.

    Et à rajouter un test complémentaire, car juste le classname peut être en double.

    MERCI ! MERCI ! MERCI ! MERCI ! MERCI ! MERCI ! MERCI ! MERCI ! MERCI ! MERCI ! MERCI !

  20. #20
    Membre chevronné
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Points : 2 187
    Points
    2 187
    Billets dans le blog
    1
    Par défaut
    Salut
    J'avais donc raison
    Je pense toujours que tu a un problème sur ta machine
    Essaye Ave un outil de nettoyage de la base de registre
    Car le comportement que tu indique n'est absolument pas normal
    Oublie pas de marquer le sujet résolu
    Cdlt
    vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les règles du forum

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Intégrer un programme externe dans une application java
    Par NiKoMinus dans le forum Débuter avec Java
    Réponses: 11
    Dernier message: 30/11/2008, 19h29
  2. Réponses: 4
    Dernier message: 14/02/2008, 22h11
  3. Intégrer l'explorateur Windows dans ma Form
    Par Crazyfaboo dans le forum Windows Forms
    Réponses: 2
    Dernier message: 12/04/2007, 23h22
  4. Intégrer un visualiseur WMP dans une form
    Par snoopo dans le forum Windows Forms
    Réponses: 2
    Dernier message: 03/04/2007, 18h53
  5. [VB.NET] Comment lancer une application externe dans ma Form
    Par afdmats dans le forum Windows Forms
    Réponses: 1
    Dernier message: 03/10/2006, 15h27

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