![]() |
Nur projekt datei - wie am laufen bleiben ?
Hallo. Ich habe nur eine Projektdatei ohne units und es soll in diesem Prog auch keine Forms geben.
Allerdings beendet sich das Programm sofort nach dem Start. Muss man da eine Nachrichtenschleife oder so benutzen ? Ich hab keine Ahnung. Need some help. PS: Hoffe richtiges Forum. |
Re: Nur projekt datei - wie am laufen bleiben ?
Hallo :hi:,
Was macht denn dein Projekt? Wenn es eine Konsolenanwendung ist hilft vieleicht ein readln am Ende. :) MfG freak |
Re: Nur projekt datei - wie am laufen bleiben ?
Nein. Es ist einfach etwas nicht visuelles das im Hintergrund laufen soll.
|
Re: Nur projekt datei - wie am laufen bleiben ?
Muss eine Schleife sein, den was sollte es sonst sein!
|
Re: Nur projekt datei - wie am laufen bleiben ?
Eben das weiß ich ja nicht :shock:
Delphi-Quellcode:
das is alles
program Project1;
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; {$R *.res} begin end. //Edit: Obwohl man Forms bei uses auch weg lassen könnte... |
Re: Nur projekt datei - wie am laufen bleiben ?
Hallo Gerrit,
das ist definitiv zu wenig, weil du ohne Form keine message pump hast. Probiere es mal so:
Delphi-Quellcode:
Der normale Weg - um Dinge im Hintergrund zu erledigen - ist ein Service. Aber vielleicht hast du ja einen guten Grund für deine Vorgehensweise. Du solltest deiner Anwendung aber noch ein TrayIcon spendieren, damit es einen ordentlichen Weg zum Beenden gibt.
Application.Initialize;
Application.Run; repeat Application.HandleMessage; until Application.Terminated; Grüße vom marabu |
Re: Nur projekt datei - wie am laufen bleiben ?
Jo ok. Vielen Dank.
Allerdings funktionieren andere Sachen nicht.
Delphi-Quellcode:
Das Programm bleibt an aber es kommt kein 'Hallo'
program Project1;
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls; var timer: TTimer; {$R *.res} procedure timerOnTimer(Sender: TObject); begin ShowMessage('Hallo'); end; begin Application.Initialize; Application.Run; timer := TTimer.Create(nil); timer.Interval := 1000; timer.Enabled := True; repeat Application.HandleMessage; until Application.Terminated; end. Das mit dem Timer ist jetz nur ein Test um zu gucken ob auch andere procedure später aufrufbar sind. Klappt aber nicht :gruebel: |
Re: Nur projekt datei - wie am laufen bleiben ?
Du musst dem Timer das Ereignis noch zuweisen:
Delphi-Quellcode:
Timer.OnTImer:=TimerOnTimer;
|
Re: Nur projekt datei - wie am laufen bleiben ?
Zitat:
|
Re: Nur projekt datei - wie am laufen bleiben ?
Zitat:
Delphi-Quellcode:
Ich denke du merkst jetzt, was du ändern musst.
program NoForm;
uses Dialogs, ExtCtrls, Forms; {$R *.res} type TGerritTimer = class(TTimer) private procedure TimerOnTimer(Sender: TObject); public constructor Create; end; const MaxEventCount = 5; var Timer: TGerritTimer; EventCount: integer = 0; constructor TGerritTimer.Create; begin inherited Create(Application); OnTimer := TimerOnTimer; end; procedure TGerritTimer.TimerOnTimer(Sender: TObject); begin with Sender as TTimer do Enabled := false; Inc(EventCount); if EventCount > MaxEventCount then Application.Terminate else begin ShowMessage('Hallo'); with Sender as TTimer do Enabled := true; end; end; begin Application.Initialize; Application.Run; Timer := TGerritTimer.Create; Timer.Interval := 1000; Timer.Enabled := true; repeat Application.HandleMessage; until Application.Terminated; end. Grüße vom marabu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:26 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 by Thomas Breitkreuz