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

Composants VCL Delphi Discussion :

Afficher la form d'une autre application dans un TPanel( ou autre composant)


Sujet :

Composants VCL Delphi

  1. #1
    Membre régulier
    Inscrit en
    Avril 2005
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 115
    Points : 70
    Points
    70
    Par défaut Afficher la form d'une autre application dans un TPanel( ou autre composant)
    Amis programmeurs, bien le bonsoir !

    Je suis en train de coder une appli qui necessite l'utilisation d'un autre programme, en l'incorporant dans sa propre form.

    Je m'explique, je désire afficher la form du second programme dans un composant de mon programme.

    Voici ce que je fais jusqu'ici mais cela ne fonctionne pas :S

    Pour mieux comprend ce qui bug et ce qui ne bug pas je pose 3 boutons.

    Le premier ouvre mon programme secondaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ShellExecute(Application.Handle,'OPEN','Demoniak3D.exe', Nil, Nil, SW_SHOW);
    Mon second récupère le Handle de l'instance de ce programme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Hand := FindWindow(nil,'Demoniak3D.exe');
    Et mon troisieme affiche le programme dans un Panel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Windows.SetParent(hand, Panel1.Handle);

    Mon soucis est que le handle retourné est toujours égal à 0, et rien ne s'affiche dans mon panel :S

    J'ai bien eut une compilation qui m'a affiché mon menu démarer dans mon Panel mais ca n'était pas vraiment recherché... (mauvais Handle récupéré?)


    Donc si vous pouviez m'aidez à afficher mon second programme dans mon panel je vous en serais reconnaissant

  2. #2
    Membre averti Avatar de shell13010
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2008
    Messages : 281
    Points : 314
    Points
    314
    Par défaut
    je pense que tu as recuperer le mauvais handles moi je te conseille de voir avec le tres bon produit qui se nomme process explorer il te donnera toute en detail

    le lien et tien nous au courant
    "Quelle prétention de prétendre que l'informatique est récente: Adam et Eve avaient déjà un Apple!"

  3. #3
    Membre régulier
    Inscrit en
    Avril 2005
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 115
    Points : 70
    Points
    70
    Par défaut
    Effectivement, je récupere le mauvais handle puisque en mettant un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Hand := FindWindow(nil,'Demoniak3D.exe');
    Showmessage(Inttostr(Hand));

    J'obtient toujours un beau '0' ce qui est assez pénible, je devrais certainement utiliser une autre fonction que FindWindow, ou alors je l'utilise mal je ne sais pas.

    le programme que tu m'as conseillé me sera utile lorsque j'arriverais à récupérer autre chose qu'un 0 :S (Mais merci ! Je le met dans mes petit outils à ne pas jeter :p)

  4. #4
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    Salut;

    voilà ce que j'avais fait dans le temps

    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
    procedure ShowPanel(APanel, PanelMenuFond: TPanel);
    var
      i : Integer;
      AControl : TControl;
    begin
      APanel.Parent := PanelMenuFond;
      APanel.Left := 0;
      APanel.Top := 0;
      APanel.Visible := True;
      for i := 0 to PanelMenuFond.ControlCount - 1 do
      begin
        AControl := PanelMenuFond.Controls[I];
        if (AControl is TPanel) and (AControl <> APanel) then
           AControl.Visible := False;
      end;
    end;
    simple mais efficace.
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  5. #5
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Points : 4 384
    Points
    4 384
    Par défaut

    Citation Envoyé par Aloneghost Voir le message
    Effectivement, je récupere le mauvais handle puisque en mettant un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Hand := FindWindow(nil,'Demoniak3D.exe');
    Showmessage(Inttostr(Hand));

    J'obtient toujours un beau '0' ce qui est assez pénible, je devrais certainement utiliser une autre fonction que FindWindow, ou alors je l'utilise mal je ne sais pas.
    Demoniak3D.exe est-il bien le titre de l'application ou juste le nom de son fichier exécutable ?
    le deuxième paramètre de la fonction FindWindow attend le titre de la fenêtre en question (propriété Caption des form delphi).

  6. #6
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    Citation Envoyé par Just-Soft Voir le message
    Salut;

    voilà ce que j'avais fait dans le temps

    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
    procedure ShowPanel(APanel, PanelMenuFond: TPanel);
    var
      i : Integer;
      AControl : TControl;
    begin
      APanel.Parent := PanelMenuFond;
      APanel.Left := 0;
      APanel.Top := 0;
      APanel.Visible := True;
      for i := 0 to PanelMenuFond.ControlCount - 1 do
      begin
        AControl := PanelMenuFond.Controls[I];
        if (AControl is TPanel) and (AControl <> APanel) then
           AControl.Visible := False;
      end;
    end;
    simple mais efficace.
    peut-être que ma solution n'étant pas claire alors j'ajoute ceci : il faut juste que ta forme contienne un Panel dont les autres compo sont déposés. puis tu appel la procédure depuis un forme général (comme le main d'un prog p.e) en luis spécifiant le panel de l'autre forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ShowPanel(Form2.APanel, PanelMenuFond)
    rien que ça !
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  7. #7
    Membre régulier
    Inscrit en
    Avril 2005
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 115
    Points : 70
    Points
    70
    Par défaut
    Merci pour vos réponses

    Evarisnea a mis le doigt sur mon soucis, il me fallait donner le caption de la fiche du second programme, et en faisant ainsi, j'arrive à "capturer" ce programme dans mon Panel ^^

    Maintenant, il va me falloir trouver comment "effacer" les menus de l'application et son cadre window mais je devrais m'en sortir


    Merci à vous !

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

Discussions similaires

  1. [MySQL] Afficher le resultat d'une recherche multicritére dans une autre page
    Par nash40 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 23/01/2013, 12h45
  2. Réponses: 0
    Dernier message: 22/12/2011, 17h30
  3. [Liferay] Inclusion de pages d'une autre application dans liferay
    Par ASPAK dans le forum Portails
    Réponses: 1
    Dernier message: 30/10/2008, 16h57
  4. Afficher une autre application dans un exe
    Par MedGIR dans le forum Langage
    Réponses: 29
    Dernier message: 30/04/2008, 23h00
  5. afficher la valeur d'une variable contenue dans une DB
    Par titoumimi dans le forum Langage
    Réponses: 3
    Dernier message: 28/02/2006, 17h00

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