Wie kann ich lnet in Komponenten nutzen?
Da muss ich ja wohl die nicht-visuellen verwenden.
Bei den NICHT-visuellen lnet-Kompos sprechen die Events nur an wenn man in einer Schleife TLConnection.CallAction aufruft.
Wie soll ich das in einer Nicht-visuellen Komponente machen?
Möglichst nicht blockierend. Ich möchte keinen Timer verwenden. Das muss doch auch irgendwie eleganter gehen.
Danke schon Mal.
mfg _X_
lnet - In einer eigenen Komponente nutzen (non-visual)
-
- Beiträge: 512
- Registriert: Mo 25. Aug 2008, 18:17
- OS, Lazarus, FPC: ArchLinux x86, WinVista x86-64, Lazarus 0.9.29, FPC 2.4.1
- CPU-Target: x86
- Wohnort: Chemnitz
Re: lnet - In einer eigenen Komponente nutzen (non-visual)
Mir fallen da drei Möglichkeiten ein:
Ich würde zu Variante 2 oder ggf. 1 tendieren.
- Leite deine Komponente von den LCL LNET Komponenten ab (die übrigens bereits nicht-visuell sind ...)
- Verwende die LCL LNET Komponenten als Child deiner eigenen (also mit deiner Komponente als Owner)
- Implementier - genau wie es die LCL LNET Komponenten tun - den beiliegenden LCLEventer
Ich würde zu Variante 2 oder ggf. 1 tendieren.
-
- Beiträge: 3444
- Registriert: Mo 11. Sep 2006, 10:24
- OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
- CPU-Target: X32 / X64 / ARMv5
- Wohnort: Krefeld
Re: lnet - In einer eigenen Komponente nutzen (non-visual)
Was hat das Aufrufen eines Events denn mit "visuell" zu tun ?
Du machst einfach
var xy: Txy;
...
xy1 := Txy.create(self);
xy1.OnEvent := MyEventHandler;
xy1.Poperty1 := Value1;
...
-Michael
Du machst einfach
var xy: Txy;
...
xy1 := Txy.create(self);
xy1.OnEvent := MyEventHandler;
xy1.Poperty1 := Value1;
...
-Michael
-
- Beiträge: 250
- Registriert: Di 16. Dez 2008, 20:13
- OS, Lazarus, FPC: aptosid (aptosid.com); Lazarus SVN gtk2+qt4; FPC 2.4.0
- CPU-Target: 32/64Bit
Re: lnet - In einer eigenen Komponente nutzen (non-visual)
Code: Alles auswählen
unit pdServer;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, ExtCtrls, lnet, lnetComponents, pdtypes, pdScreen, Forms;
type
TPDServer = class(TComponent)
private
procedure FCRecv(aSocket: TLSocket);
procedure FCErr(const msg: string; aSocket: TLSocket);
procedure FCDCon(aSocket: TLSocket);
procedure FCCon(aSocket: TLSocket);
private
//FImg: TImage;
FCon: TLTCP;
AStreamPic: string;
public
constructor Create(AOwner: TComponent);
destructor Destroy();
procedure Listen(port: word);
public
end;
implementation
constructor TPDServer.Create(AOwner: TComponent);
begin
//FImg.Create(AOwner);
FCon := TLTCP.Create(AOwner);
FCon.OnConnect := @FCCon;
FCon.OnReceive := @FCRecv;
FCon.OnError := @FCErr;
FCon.OnDisconnect := @FCDCon;
inherited Create(AOwner);
end;
destructor TPDServer.Destroy;
begin
//FImg.Destroy;
FCon.Destroy;
inherited Destroy();
end;
procedure TPDServer.Listen(port: word);
begin
if FCon.Listen(port) = false then begin
raise EPDServerConnectError.Create('Listen Error: Could not start server at localost:' + inttostr(port));
end
else begin
while Application.Active do begin Application.ProcessMessages; FCon.CallAction; end; //stimmt das so?
end;
end;
procedure TPDServer.FCRecv(aSocket: TLSocket);
begin
end;
procedure TPDServer.FCErr(const msg: string; aSocket: TLSocket);
begin
raise EPDServerError.Create('Socket Error at ' + inttostr(aSocket.Handle) + #10#13 + 'Error Msg:' + #10#13 + msg);
end;
procedure TPDServer.FCDCon(aSocket: TLSocket);
begin
end;
procedure TPDServer.FCCon(aSocket: TLSocket);
var hScreen: TScreenres;
begin
writeln(FCon.Count-1); // das hier wird nie gemacht, dh. der Event wird nie ausgelöst
if FCon.Count-1 > 1 then begin
aSocket.SendMessage('error: 1, "to many Connections";;');
aSocket.Disconnect;
end
else begin
hScreen := getScreenResolution();
aSocket.SendMessage('TScreen: x=' + inttostr(hScreen.x) + ';y=' + inttostr(hScreen.y) + ';;');
end;
end;
end.
Stimmt das so?
mfg _X_
-
- Beiträge: 250
- Registriert: Di 16. Dez 2008, 20:13
- OS, Lazarus, FPC: aptosid (aptosid.com); Lazarus SVN gtk2+qt4; FPC 2.4.0
- CPU-Target: 32/64Bit
Re: lnet - In einer eigenen Komponente nutzen (non-visual)
OK, der Titel stimmt nicht ganz.
Kann mir trotzdem jemand helfen, oder wisst ihr auch nicht wie es geht?
mfg _X_
Kann mir trotzdem jemand helfen, oder wisst ihr auch nicht wie es geht?
mfg _X_
-
- Lazarusforum e. V.
- Beiträge: 2809
- Registriert: Sa 9. Sep 2006, 18:05
- OS, Lazarus, FPC: Linux (L trunk FPC trunk)
- CPU-Target: 64Bit
- Wohnort: Dresden
- Kontaktdaten:
Re: lnet - In einer eigenen Komponente nutzen (non-visual)
Titel kannst du ja bearbeiten
Ansonsten weiß es wohl keiner besser.
Ansonsten weiß es wohl keiner besser.
Johannes
-
- Beiträge: 250
- Registriert: Di 16. Dez 2008, 20:13
- OS, Lazarus, FPC: aptosid (aptosid.com); Lazarus SVN gtk2+qt4; FPC 2.4.0
- CPU-Target: 32/64Bit
Re: lnet - In einer eigenen Komponente nutzen (non-visual)
Ich habe es gelöst, auch wenns lange gedauert hat.
Statt TLTCP TLTCPComponent und statt OnConnect OnAccess.
mfg _X_
Statt TLTCP TLTCPComponent und statt OnConnect OnAccess.
mfg _X_