Bonjour,
Mon application est déclinée en 2 versions dont l'une voit une fenêtre d'attente de 30 secondes avant que l'appli ne soit disponible.
Voici le code utilisé:
Ensuite, lorsque la fenêtre d'attente se ferme, l'appli cherche si un programme externe est ouvert.
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 procedure TfrmOpen.Waiting; var i: Integer; begin intDelay:= 30; CloseOK := False; // countdown for i := 0 to (intdelay) do begin Application.ProcessMessages; Sleep(1000); lblDelay.Caption:= 'You have to wait: ' + FloatToStr(intDelay - i) + ' seconds before closing this dialog'; imgDonate.OnClick:= imgDonateClick; end; lblDelay.Caption:= 'click anywhere on the message to close!'; CloseOK:= true; end; procedure TfrmOpen.Image1Click(Sender: TObject); begin if CloseOK then Self.Close;
Si celui-ci n'est pas lancé l'appli ouvre un dialogue pour demander si l'utilisateur souhaite l'ouvrir.
Dans l'affirmative le programme est lancé depuis l'appli.
Voici le souci:
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 if (fmControlPanel.rdgWxSource.ItemIndex = 1) and((GstrSimPath <> '') or (fmControlPanel.edAsP3DPath.Text <>'')) and(GintSimu = 2) then begin if not ProcessExists('AS16.exe') then begin if MessageDlg('Active Sky 2016 for P3D is selected as the weather source. ' + #13#10 + 'However, it is not running. ' + 'Do you want CPS-X to launch it for you?', mtWarning, [mbYes,mbNo],0)= mrYes then begin if GstrAsPath <> '' then ShellExecute(Handle,'open',PChar(GstrAsPath + '\AS16.exe'), Nil, Nil, SW_SHOW) else ShellExecute(Handle,'open',PChar(fmControlPanel.edAsP3DPath.Text + '\AS16.exe'), Nil, Nil, SW_SHOW); GbooAsLaunch:= True; GbooNoaaLaunch:= False; end else begin fmControlPanel.rdgWxSource.ItemIndex := 0; frmMain.lblWxSource.Caption:= 'WX source selected : ' + fmControlPanel. rdgWxSource.Items [fmControlPanel.rdgWxSource.ItemIndex]; IniFile:= TIniFile.Create(ChangeFileExt(Application.ExeName,'.cfg')); IniFile.WriteInteger('WX', 'WxSource', fmControlPanel.rdgWxSource.ItemIndex); IniFile.Free; GbooNoaaLaunch:= True; GbooAsLaunch:= False; end; end; end;
Si c'est la version sans fenêtre d'attente qui fonctionne, le programme externe est lancé aussitôt le dialogue fermé par Yes.
Si la version avec fenêtre d'attente qui tourne, le dialogue s'affiche normalement, mais le programme externe ne se lance qu'après un long délai d'environ 30 secondes si Yes est cliqué.
Je précise que le code des deux version est le même avec comme seule différence une compilation conditionnelle pour avoir ou non la fenêtre d'attente.
Pourriez vous m'aider à trouver la cause de cette différence?
Merci
Cordialement
Pierre
Partager