![]() |
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 |
Re: Nur projekt datei - wie am laufen bleiben ?
[Fehler] Project1.dpr(27): E2009 Inkompatible Typen: 'Methodenzeiger und reguläre Prozedur'
Da wird irgendwas in Klammern erwartet... |
Re: Nur projekt datei - wie am laufen bleiben ?
Zitat:
Bei mir gehts so:
Delphi-Quellcode:
TGerritTimer = class(TTimer)
private procedure TimerOnTimer(Sender: TObject); public constructor Create; end; |
Re: Nur projekt datei - wie am laufen bleiben ?
geht das nicht auch ohne eine Klasse?
|
Re: Nur projekt datei - wie am laufen bleiben ?
Zitat:
|
Re: Nur projekt datei - wie am laufen bleiben ?
Gerrit, bist du sicher, dass du meinen Quellcode kompilierst? Wenn du die Änderungen an deinem Quellcode gemacht hast, dann hast du vergessen aus der OnTimer-Prozedur eine procedure of object zu machen. Oder du hast einen anderen Pascal-Dialekt als ich mit D7. Wenn mein Quellcode bei dir läuft und es noch Unklarheiten gibt, können wir gerne drüber diskutieren.
marabu |
Re: Nur projekt datei - wie am laufen bleiben ?
Was ist ein Constructor und was bedeutet inc ?
Ich versteh das Ganze noch nicht so wirklich :gruebel: Ausserdem sollen ja auch noch andere Komponenten eingebunden werden. Muss ich dann für jede eine Klasse machen ? |
Re: Nur projekt datei - wie am laufen bleiben ?
Hallo Gerrit,
Inc() erhöht in diesem Fall eine Variabble vom Typ integer um eins, damit ich ein sauberes Programmende demonstrieren kann. Ein constructor ist eine spezielle Klassen-Methode, mit der ein Objekt instanziiert wird. Vielleicht ist es am einfachsten für dich, wenn du doch eine Form benutzt, aber diese unsichtbar machst, indem du sie z.B. in einen unsichtbaren Bereich verschiebst:
Delphi-Quellcode:
marabu
with Form2 do begin
Left := Screen.Width; Top := Screen.Height; end; |
Re: Nur projekt datei - wie am laufen bleiben ?
Zitat:
Delphi-Quellcode:
Form2.Visible:=False;
|
Re: Nur projekt datei - wie am laufen bleiben ?
Oder
Delphi-Quellcode:
:zwinker:
Application.ShowMainform := False
|
Re: Nur projekt datei - wie am laufen bleiben ?
Oder Form1.Hide;
Allerdings fänd ichs nich so gut wenn man später dann die Form in einem Resourceneditor sehen kann. Wirkt etwas unprofessionell finde ich. |
Re: Nur projekt datei - wie am laufen bleiben ?
Besser wäre statt
Delphi-Quellcode:
folgendes :
i := inc (i);
Delphi-Quellcode:
Wie man hier schön nachlesen kann, ist das für Anfänger einfach verständlicher. Der Compiler wird da wahrscheinlich sowieso SHL/SHR o.ä. draus machen.
i := i + 1;
Aber ehe ich es vergesse. 8) Die obligatorische Binsenweisheit für solche Fälle : in Delphi auf das Wort gehen und F1 drücken. |
Re: Nur projekt datei - wie am laufen bleiben ?
Zitat:
Zitat:
Zitat:
Außerdem lassen sich so Extrawünsche einfacher implementieren. Extrawünche wie: Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:28 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