Delphi-PRAXiS
Seite 1 von 3  1 23      

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


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:41 Uhr.
Seite 1 von 3  1 23      

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