ich programmiere nun schon eine ganze weile mit Lazarus GUI Anwendungen - habe aber noch nie eine Anwendung ohne GUI gemacht.
Nun möchte ich mal ein einfaches Programm erstellen das im Hintergrund läuft bis ich es beende (mit exit).
Wenn ich ein neues Projekt erstelle dann wähle ich Programm und bekomme dann folgende Struktur vorgegeben
Code: Alles auswählen
program project1;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads;
{$ENDIF}{$ENDIF}
Classes
{ you can add units after this };
begin
writeln('TEST');//eingefügt zum Testen der Ausgabe auf Konsole
readln;
end.
Ich habe mit einer GUI Anwendung folgende Testfunktionalität erstellt und möchte diese nun in das Programm ohne GUI überführen.
Die Memoausgabe kann man ja testweise mit writeln erschlagen.
Code: Alles auswählen
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
ExtCtrls, blcksock, uplaysound;
type
{ TForm1 }
TForm1 = class(TForm)
Memo1: TMemo;
playsound1: Tplaysound;
Timer1: TTimer;
procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
procedure FormShow(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ private declarations }
procedure InitSocket;
procedure DeInitSocket;
public
{ public declarations }
end;
var
Form1: TForm1;
UDPResiveSocket: TUDPBlockSocket;
implementation
{$R *.lfm}
{ TForm1 }
//Initialisierungen
procedure TForm1.FormShow(Sender: TObject);
begin
InitSocket;
end;
//Aktionen zum Form schließen
procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
DeInitSocket;
end;
//Timer zum Daten abrufen
procedure TForm1.Timer1Timer(Sender: TObject);
var
UDPRx: string;
begin
Timer1.Enabled:= false;
UDPRx:= UDPResiveSocket.RecvPacket(50);
if UDPRx <> '' then
begin
Memo1.Lines.Add('>' + UDPRx);
playsound1.SoundFile:='post.wav';
playsound1.Execute;
end;
Timer1.Enabled:= true;
end;
//UDP Socket erzeugen
procedure TForm1.InitSocket;
begin
if UDPResiveSocket <> nil then DeInitSocket;
UDPResiveSocket:= TUDPBlockSocket.Create;
UDPResiveSocket.CreateSocket;
UDPResiveSocket.Bind('192.168.2.116','10001');
end;
//UDP Socket freigeben
procedure TForm1.DeInitSocket;
begin
UDPResiveSocket.CloseSocket;
UDPResiveSocket.Free;
UDPResiveSocket:= nil;
end;
end.
Muss man hier dann eine "main loop"(mit Abbruchbedingung) erstellen ?
Gruß Frank