Bonjour tout le monde,
J'essai d'utiliser le composant TIdFtp fournis avec Delphi 2009.
pour info : Sous Delphi 7 je n'avais aucun problème
Je réalise un Splashscreen, durant le démarrage de l'appli je me connect sur un serveur et je recherche la version disponible, si cette dernière est plus récente je propose de la télépcharger.
cette procédure est lancée depuis le dpr par
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 procedure TFSplashScreen.Version(Sender: TObject); Var Versionning: String; begin sLabel2.Caption := 'Recherche nouvelle version...'; sLabel2.Visible := True; Update; // Me sert à conserve la fenêtre splashscreen par dessus Versionning := Logiciel.Version; // ici on va se connecter sur le serveur pour verifier la version Versionning := AnsiReplaceStr(VersionActuelle(Sender,''),'-','.'); if Versionning <> 'erreur' then Begin if Versionning = Logiciel.Version then Begin sLabel2.Caption := 'Votre version est à jour.'; end else begin sLabel2.Caption := 'Mise à jour disponible.'; Sleep(1000); If Application.MessageBox(PWideChar( 'Une nouvelle version est disponible.'+#13+ 'Version n° '+ Versionning+#13+ 'Voulez-vous la téléchargée ?'), PWideChar('Nouvelle version n° '+Versionning), MB_ICONQUESTION + MB_YESNO) = 6 then Begin // On télécharge la nouvelle version Cas := 2; Download(Sender,'MonLog.exe'); end else sLabel2.Caption := 'Téléchargement annulé.'; end; end else sLabel2.Caption := 'Info sur la version indisponible'; end;
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 // ... begin Application.CreateForm(TFPrincipal, FPrincipal); FSplashScreen := TFSplashScreen.Create(Application); // On crée la fenetre de Splash FSplashScreen.Show; // affichage de cette fenetre FSplashScreen.Update; // On force l'affichage de la fenetre (sinon elle n'apparait que partiellement) Application.Initialize; Application.MainFormOnTaskbar := True; FSplashScreen.Version(nil); // ...L'erreur apparait au moment ou je fais le application.Messagebox d'ailleur j'ai tenter de placer un showmessage juste avant la ligne
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 function TFSplashScreen.VersionActuelle(Sender: TObject;Host:String): String; Var i: integer; idFtpVersion : Tidftp; begin result := ''; idFtpVersion := nil; Try Try idFtpVersion := TIdFTP.Create(Self); With idFtpVersion do begin Host := '*************'; Username := ********; Password := ********; Connect; ChangeDir('monlog/version'); List(nil); for i:=0 to Pred(DirectoryListing.Count) do Begin // ici on lit simplement le nom du fichier avec l'extension txt qui comporte la version. if (ExtractFileExt(DirectoryListing[i].FileName) = '.txt') and (DirectoryListing[i].ItemType = ditFile) then Result := ChangeFileExt(DirectoryListing[i].FileName,''); end; end; Except Result := 'erreur'; end; finally if assigned(idFtpVersion) then idFtpVersion.Free; end; end;
Versionning := AnsiReplaceStr(VersionActuelle(Sender,''),'-','.');
Figurez-vous que je vois mon showmessage, mais là même pas le temps de faire Ok que j'ia un beau AccessViolation, et même au pire je le place juste après la ligne et bien mon showmessage s'affiche et boom même problème.
Alors là je nage dans le délire, je peux même pas essayer de détecter l'endroit de mon erreur, aucun showmessage ou autre application.messagebow apparait, je me demande même si c'est carrément pas eux qui génére les bug ?
Auriez-vous une idée ?
Merci
Partager