Salut à tous,
Voilà mon problème:
Avec mon application principale je lance un Exe .Net.
Pour le moment tout va bien.
Par contre j'ai une autre fonction qui me lance Excel pour y faire diverse chose et une fois que j'ai fermé le classeur, si je veux relancer mon exe .Net celui ci plante ou se comporte bizarement (notamement il ne detecte plus un fichier qui se trouve à un endroit fixe)
code qui lance mon exe .net :
cela marche tant que je n'ai pas à faire avec Excel
Code : Sélectionner tout - Visualiser dans une fenêtre à part handle_fenetre := ShellExecute(0,'open',PChar(extractfilepath(application.ExeName)+'administration\Modele.exe'),'',nil,SW_SHOWNORMAL);
Code qui lance Excel :
Et enfin quand je quitte Excel
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 function open_excel_dialogue_panel(var v : olevariant; var nom_fichier : string ; panel : TPanel ; var h : THandle) : boolean; const TimeOut = 10000; // 10 secondes var I: integer; // h: THandle; t: DWORD; Nom_doc, texte : string; begin result := false; if (VarType(v) = VarEmpty) then begin Screen.Cursor := CrHourGlass; v := CreateOleObject('Excel.Application'); Screen.Cursor := CrDefault; end else begin try if (VarType(v) = VarDispatch) then v.Visible := true; Except on EOleSysError do begin Screen.Cursor := CrHourGlass; v := unassigned; v := CreateOleObject('Excel.Application'); Screen.Cursor := CrDefault; end; end; end; OpenDialogue.Filter := 'Fichiers Excel (*.xls)|*.xls|Tous les fichiers (*.*)|*.*'; OpenDialogue.FilterIndex := 1; { Commence à montrer tous les fichiers } // Permet de ne pas aller dans le répertoire documents par défaut. opendialogue.FileName := ''; opendialogue.InitialDir := chemin_enregistrement; if opendialogue.Execute then begin screen.Cursor := crHourGlass; nom_fichier:=opendialogue.FileName; v.workbooks.open(nom_fichier,,false); result := true; // chargement dans le panel h:= 0; t:= GetTickCount; nom_doc := ExtractFileExt(extractfilename(nom_fichier)); if ExtractFileExt(extractfilename(nom_fichier)) = '.xls' then nom_doc := 'Microsoft Excel - '+extractfilename(nom_fichier); while (h = 0) and (GetTickCount - t < TimeOut) do begin h:= FindWindow(nil, PChar(nom_doc)); Application.ProcessMessages; end; if h <> 0 then begin // Windows.SetParent(h, panel.Handle); end; screen.Cursor := crDefault; v.visible := true; end; end;
Et la pour finir : Mon code .net
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 procedure close_application_excel(v : olevariant); begin try if (VarType(v) <> VarEmpty) then begin v.quit; v := unassigned; end; Except on EOleSysError do v := unassigned; end; end;
voilà
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 begin if FileExists('Import.txt') then Application.Run(ProprieteTE_Class.Create) else begin Application.Run(CreationP_Class.Create); end; end.
merci
Partager