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 :

[D7] Ouvrir Excel dans une form


Sujet :

Composants VCL Delphi

  1. #1
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2003
    Messages
    422
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2003
    Messages : 422
    Points : 238
    Points
    238
    Par défaut [D7] Ouvrir Excel dans une form
    Bonjour,

    J'ai un logiciel qui permet d'ouvrir Excel au sein d'une form. Je ne connais pas le langage de développement de ce logiciel (je présume C++), mais j'aimerais savoir s'il est possible de faire la même chose avec Delphi 7.

    Je parle bien d'ouvrir Excel au sein de mon programme, et pas uniquement de le contrôler à distance : l'utilisateur doit pouvoir ouvrir des fichiers, travailler normalement dans cette form contenant Excel, etc.

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 447
    Points : 24 849
    Points
    24 849
    Par défaut
    En Trichant honteusement, avec un FindWindow, tu cherche la fenêtre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SetParentEx(FindWindow('XLMAIN', 'Microsof Excel - Classeur 1'), Form1.Handle);
    XLMain c'est pour Excel 2000, et pour le nom de fichier faudra faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PChar('Microsoft Excel - ' + ChangeFileExt(ExcelFileName, ''))
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function SetParentEx(hWndChild, hWndNewParent: HWND): HWND;
    begin
       Result := Windows.SetParent(hWndChild, hWndNewParent);
    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

  3. #3
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2003
    Messages
    422
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2003
    Messages : 422
    Points : 238
    Points
    238
    Par défaut
    Oh comme c'est honteux Mais au moins ça marche

    Dans la continuité, je cherche à masquer la bordure d'Excel afin d'éviter d'avoir une double bordure dans ma form (celle de la form + celle d'Excel), ce qui donne un peu étrange.

    Egalement lorsque je ferme la form, je fais un "ExcelApplication1.Quit", mais à la fermeture de mon logiciel j'ai un message d'erreur d'Excel qui me demande si je veux envoyer le rapport d'erreur à Microsoft, etc.

    Donc c'est volontiers si quelqu'un a des pistes pour m'aider

  4. #4
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 719
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 719
    Points : 15 105
    Points
    15 105
    Par défaut
    Citation Envoyé par MiJack Voir le message
    Oh comme c'est honteux Mais au moins ça marche
    Ben moi ch'suis tout honteux aussi, mais because chez moi ça marche pô...
    J'ai tout essayé, après avoir corrigé, « FindWindow('XLMAIN', 'Microsoft...) » : la form seule ou avec un grand panel, avec SW_HIDE ou SW_NORMAL, sans l'espace entre « Classeur » et « 1 » (en tout cas chez moi), avec une boucle d'attente, keud de keud !
    D7, Excel2000 qui se lance (visible ou pas) bien :
    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
    uses ShellApi;
     
    function SetParentEx(hWndChild, hWndNewParent: HWND): HWND;
    begin
       Result := Windows.SetParent(hWndChild, hWndNewParent);
    end;
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    //  ShellExecute(Form1.Panel1.Handle,'open','D:\Program Files\Microsoft Office\Office\EXCEL.EXE', 0, 0, SW_SHOW);
        ShellExecute(Form1.Handle,'open','D:\Program Files\Microsoft Office\Office\EXCEL.EXE', 0, 0, SW_HIDE);
    //  while FindWindow('XLMAIN','Microsoft Excel - Classeur1') = 0 do Application.ProcessMessages; // Attente
      SetParentEx(FindWindow('XLMAIN', 'Microsoft Excel - Classeur1'), Form1.Handle);
    //  SetParentEx(FindWindow('XLMAIN', 'Microsoft Excel - Classeur1'), Form1.Panel1.Handle);
    end;
    Avec 2 boutons et un outil pour surveiller qu'Excel est bien présent et avec les bonnes infos ('XLMAIN', 'Microsoft Excel - Classeur1') avant de cliquer sur Button2,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure TForm1.Button1Click(Sender: TObject);
    begin
        ShellExecute(Form1.Handle,'open','D:\Program Files\Microsoft Office\Office\EXCEL.EXE', 0, 0, SW_HIDE);
    //  ShellExecute(Form1.Handle,'Open','D:\Program Files\Microsoft Office\Office\EXCEL.EXE', 0, 0, SW_SHOW);
    end;
     
    procedure TForm1.Button2Click(Sender: TObject);
    begin
      SetParentEx(FindWindow('XLMAIN', 'Microsoft Excel - Classeur1'), Form1.Handle);
    end;
    Quand Excel est visible (SW_SHOW) il est totalement inerte, comme si j'avais collé une copie d'écran...
    Et du coup j'peux pas aider pour la suite...
    Valà... Je voudrais pas mourir idiot,
    --
    jp
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

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

Discussions similaires

  1. Ouvrir Excel dans une winform
    Par ericma62 dans le forum Développement Windows
    Réponses: 0
    Dernier message: 30/08/2012, 16h14
  2. [VB6] [Excel] Feuille dans une form, sans excel installé
    Par ro2v dans le forum Installation, Déploiement et Sécurité
    Réponses: 3
    Dernier message: 05/05/2010, 12h45
  3. Importer une feuille excel dans une Form
    Par piepio dans le forum Windows Forms
    Réponses: 3
    Dernier message: 24/02/2007, 09h37
  4. [VB.net] controler Excel dans une Form ?
    Par sergio_bzh dans le forum Windows Forms
    Réponses: 8
    Dernier message: 14/06/2006, 14h08
  5. excel dans une form Delphi
    Par jakouz dans le forum Composants VCL
    Réponses: 3
    Dernier message: 09/09/2005, 17h36

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