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/)
-   -   Delphi Nur projekt datei - wie am laufen bleiben ? (https://www.delphipraxis.net/46642-nur-projekt-datei-wie-am-laufen-bleiben.html)

Rastaman 28. Mai 2005 23:06


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.

freak4fun 28. Mai 2005 23:13

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

Rastaman 28. Mai 2005 23:15

Re: Nur projekt datei - wie am laufen bleiben ?
 
Nein. Es ist einfach etwas nicht visuelles das im Hintergrund laufen soll.

Speedmaster 28. Mai 2005 23:15

Re: Nur projekt datei - wie am laufen bleiben ?
 
Muss eine Schleife sein, den was sollte es sonst sein!

Rastaman 28. Mai 2005 23:17

Re: Nur projekt datei - wie am laufen bleiben ?
 
Eben das weiß ich ja nicht :shock:

Delphi-Quellcode:
program Project1;

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

{$R *.res}

begin


end.
das is alles

//Edit: Obwohl man Forms bei uses auch weg lassen könnte...

marabu 29. Mai 2005 06:59

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:
  Application.Initialize;
  Application.Run;
  repeat
    Application.HandleMessage;
  until Application.Terminated;
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.

Grüße vom marabu

Rastaman 29. Mai 2005 11:27

Re: Nur projekt datei - wie am laufen bleiben ?
 
Jo ok. Vielen Dank.
Allerdings funktionieren andere Sachen nicht.
Delphi-Quellcode:
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 Programm bleibt an aber es kommt kein 'Hallo'
Das mit dem Timer ist jetz nur ein Test um zu gucken ob auch andere procedure später aufrufbar sind.
Klappt aber nicht :gruebel:

BenjaminH 29. Mai 2005 11:30

Re: Nur projekt datei - wie am laufen bleiben ?
 
Du musst dem Timer das Ereignis noch zuweisen:
Delphi-Quellcode:
Timer.OnTImer:=TimerOnTimer;

faux 29. Mai 2005 11:39

Re: Nur projekt datei - wie am laufen bleiben ?
 
Zitat:

Zitat von Gerrit89
Nein. Es ist einfach etwas nicht visuelles das im Hintergrund laufen soll.

Dann mach doch ein Service draus... ;)

marabu 29. Mai 2005 12:17

Re: Nur projekt datei - wie am laufen bleiben ?
 
Zitat:

Zitat von Gerrit89
Jo ok. Vielen Dank. Allerdings funktionieren andere Sachen nicht. Das Programm bleibt an aber es kommt kein 'Hallo'. Das mit dem Timer ist jetz nur ein Test um zu gucken ob auch andere procedure später aufrufbar sind.
Klappt aber nicht

Komisch - bei mir geht das:

Delphi-Quellcode:
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.
Ich denke du merkst jetzt, was du ändern musst.

Grüße vom marabu

Rastaman 29. Mai 2005 12:19

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...

Die Muhkuh 29. Mai 2005 12:23

Re: Nur projekt datei - wie am laufen bleiben ?
 
Zitat:

Zitat von marabu
Zitat:

Zitat von Gerrit89
Jo ok. Vielen Dank. Allerdings funktionieren andere Sachen nicht. Das Programm bleibt an aber es kommt kein 'Hallo'. Das mit dem Timer ist jetz nur ein Test um zu gucken ob auch andere procedure später aufrufbar sind.
Klappt aber nicht

Komisch - bei mir geht das:

Delphi-Quellcode:
program NoForm;

uses
  Dialogs,
  ExtCtrls,
  Forms;

{$R *.res}

type
  TGerritTimer = class(TTimer)
    procedure TimerOnTimer(Sender: TObject);
  private  
  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.
Ich denke du merkst jetzt, was du ändern musst.

Grüße vom marabu

Bei mir nicht.

Bei mir gehts so:

Delphi-Quellcode:
TGerritTimer = class(TTimer)
  private
    procedure TimerOnTimer(Sender: TObject);
  public
    constructor Create;
  end;

Rastaman 29. Mai 2005 12:24

Re: Nur projekt datei - wie am laufen bleiben ?
 
geht das nicht auch ohne eine Klasse?

malo 29. Mai 2005 12:28

Re: Nur projekt datei - wie am laufen bleiben ?
 
Zitat:

Zitat von Gerrit89
geht das nicht auch ohne eine Klasse?

Nein. Du brauchst die (bzw. eine) Klasse, um die Methoden darin zu verwalten. Ohne KLasse wissen deine Methoden dann gar nicht, wozu sie gehören ;)

marabu 29. Mai 2005 12:29

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

Rastaman 29. Mai 2005 12:33

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 ?

marabu 29. Mai 2005 12:55

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:
with Form2 do begin
  Left := Screen.Width;
  Top := Screen.Height;
end;
marabu

BenjaminH 29. Mai 2005 13:00

Re: Nur projekt datei - wie am laufen bleiben ?
 
Zitat:

Zitat von marabu
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:
with Form2 do begin
  Left := Screen.Width;
  Top := Screen.Height;
end;

Wie wärs damit?
Delphi-Quellcode:
Form2.Visible:=False;

jfheins 29. Mai 2005 13:00

Re: Nur projekt datei - wie am laufen bleiben ?
 
Oder
Delphi-Quellcode:
Application.ShowMainform := False
:zwinker:

Rastaman 29. Mai 2005 13:02

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.

Hansa 29. Mai 2005 13:23

Re: Nur projekt datei - wie am laufen bleiben ?
 
Besser wäre statt
Delphi-Quellcode:
i := inc (i);
folgendes :
Delphi-Quellcode:
i := i + 1;
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.

Aber ehe ich es vergesse. 8) Die obligatorische Binsenweisheit für solche Fälle : in Delphi auf das Wort gehen und F1 drücken.

Robert_G 29. Mai 2005 14:28

Re: Nur projekt datei - wie am laufen bleiben ?
 
Zitat:

Zitat von Gerrit89
Was ist ein Constructor und was bedeutet inc ?

Die Fragen klären sich mit einem beherzten [F1] schneller als ein Maikäfer husten kann. ;)
Zitat:

Zitat von Gerrit89
Ich versteh das Ganze noch nicht so wirklich :gruebel:

Probiere genau das was Marabu vorgeschlagen hat. (btw: excellentes Beispiel @marabu :thuimb: )
Zitat:

Zitat von Gerrit89
Muss ich dann für jede eine Klasse machen ?

Sicher kann man in delphi auch TP-like prozedural programmieren. Dumm ist nur, dass man rein gar nicht viel dabei lernt. ;)
Außerdem lassen sich so Extrawünsche einfacher implementieren. Extrawünche wie:
Zitat:

Zitat von Gerrit89
Ausserdem sollen ja auch noch andere Komponenten eingebunden werden.



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

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