Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Application.Mainform / Code wird ignoriert (https://www.delphipraxis.net/177984-application-mainform-code-wird-ignoriert.html)

ReVenGer 9. Dez 2013 15:47

Application.Mainform / Code wird ignoriert
 
Hi zusammen,

ich habe folgendes Problem.

In meinem Mainform (Form1) prüfe ich bei OnCreate mittels Dateigrößenvergleich (Lokal/Web) ob ein Update für mein Programm vorhanden ist.

Code:
 
if FindFirst('Tool.exe', faAnyFile, Search) = 0 then
    System.SysUtils.FindClose(Search);

  if Search.Size <> GetRemoteFilesize
    ('http://schnabbeldidu.de/update.exe') then

    if Application.MessageBox('New Update Found!' + #13 +
      'Start Update now? Otherwise this Program will Terminate!',
      'Updater', MB_ICONWARNING or MB_YESNO) = IDNO then
      Application.terminate;

Sollte dem so sein, öffne ich mit folgendem code die Form3 wo sich meine Progresbar und der code zum downloaden befindet und setze ShowMainform:=False;

Code:
Form3 := Tform3.Create(nil);
  Form3.show;
Application.ShowMainForm := False;
Soweit funktioniert alles.
Aber, wenn ich jetzt meine Anwendung nach dem Download der Datei komplett schließen möchte, ignoriert er mein Application.Terminate aus der Form3 heraus.
Auch ein Showmainform:=True; wird ignoriert, ich weiß nicht warum?!


Welche Möglichkeiten habe ich um meine Programm von dort aus zu beenden?


Vielen Dank im Voraus!

CCRDude 9. Dez 2013 16:26

AW: Application.Mainform / Code wird ignoriert
 
Das ist mMn nach eine ungünstige Stelle - mitten im Constructor einer Form schon ein Application.Terminate aufrufen zu wollen.

Warum nicht in die .dpr bevor Application überhaupt angefasst wird?

ReVenGer 9. Dez 2013 17:33

AW: Application.Mainform / Code wird ignoriert
 
Du meinst die Updateroutine (Prüfung auf Update und Verweis auf Form3) vor dem Application.CreateForm(TForm1, Form1) aufrufen?

Das macht natürlich Sinn. Wird geändert!

Löst aber nach wie vor mein Callback Problem nicht ;)

himitsu 9. Dez 2013 18:02

AW: Application.Mainform / Code wird ignoriert
 
Zitat:

Zitat von ReVenGer (Beitrag 1239147)
Delphi-Quellcode:
 
if FindFirst('Tool.exe', faAnyFile, Search) = 0 then
    System.SysUtils.FindClose(Search);

  if Search.Size <> GetRemoteFilesize
    ('http://schnabbeldidu.de/update.exe') then

    if Application.MessageBox('New Update Found!' + #13 +
      'Start Update now? Otherwise this Program will Terminate!',
      'Updater', MB_ICONWARNING or MB_YESNO) = IDNO then
      Application.terminate;

Laut der Codeformatierung fehlt da wohl mindestens ein Begin-End, bei
Delphi-Quellcode:
if FindFirst(
?


Und was heißt "Code wird ignoriert"?
- Wird der code wirklich ignoriert und nicht in die EXE eingebaut? (beim debuggen keine blauen Pünktchen links neben den Zeilen)
- Oder wird dein Code nur nicht ausgeführt, weil ein IF nein sagt?


Application.Terminate sollte dennoch ausfegührt werden. :gruebel:
Nja, wenn du den Code vor CreateForm legst und CreateForm(Form1) und Application.Run garnicht erst ausfühst, wenn geupdatet wird, dann sollte sich das Problem von Selber lösen.



Relative Pfade ... nja, wenn es daran lieg, daß eventuell FindFirst nichts findet, dann bistz du selber dran Schuld.



PS: Delphi-Referenz durchsuchenFileExists und neuerdings (XE+) auch Delphi-Referenz durchsuchenTFile.Exists
[edit] Oh, es gab noch garkeine GetFileSize-Funktion? (mit war so, als gab's da mal was) Und TFile.GetSize fehlt auch.

ReVenGer 9. Dez 2013 18:38

AW: Application.Mainform / Code wird ignoriert
 
Kann ich denn in der dpr ganz normal die indy komponenten enbinden?

Oder muss ich da was beachten?

Vielelicht denke ich da gerade auch in die falsche Richtung, aber wenn ich den code ausführe bevor Application.CreateForm(TForm3, Form3) aufgerufen wird, fehlt mir ja die Progressbar, bzw die vcl Komponenten.

Zitat:

Laut der Codeformatierung fehlt da wohl mindestens ein Begin-End, bei if FindFirst( ?
Jupp, da fehlt auch die GetRemoteFilesize function.

Zitat:

Relative Pfade ... nja, wenn es daran lieg, daß eventuell FindFirst nichts findet, dann bistz du selber dran Schuld.
Muss er finden, das ist ja da Programm was das Autoupdate ausführt.

Edit:
Beim debuggen sehe ich das Application.Terminate, aber er führt es nach dem Update nicht aus.

Edit2:

Wie starte ich denn explizit die form3 nach einem Application.Create(Form3). So das ich die Mainform (Form1) gar nicht ausführen muss?

ReVenGer 10. Dez 2013 18:42

AW: Application.Mainform / Code wird ignoriert
 
Ok, hat sich erledigt.

Die Sache mit dem Wald und den Bäumen...

Vielen Dank nochmal. :-D


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:14 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz