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

 
  Verein
Verein 
 Links
Links Suche
Suche