![]() |
in der Laufzeit erstellte Komponenten und ihre Funktionen
Hallo an alle,
Ich hab eine Frage. Ich habe mir Turbo Delphi geladen und wie wahrscheinlich die meisten wissen, gibt es dort Einschränkungen für Komponenten von Dritten (unteranderem Indy). Ich möchte für die Arbeit ein Programm zur Steuerung einer Maschine schreiben. Die Maschine steht aus Sicherheitsgründen in einem seperaten Raum. Deswegen soll über einem 2. Rechner und TServerSocket/ TServerClient das Programm an der Maschine gesteuert werden. Nun das Problem: Wie initialisiere ich bei einem TServerSocket die OnClientRead-Funktion, so dass ich sie benutzen kann. Klingt zwar trivial aber bisher hatte ich immer eine Delphi Version, wo Indy direkt eingebunden war und somit über den Objektinspektor angesprochen werden konnte. Würde mich über eure Hilfe freuen, auch wenn das eine wahrscheinlich eher triviale Frage ist. Danke BAMatze |
Re: in der Laufzeit erstellte Komponenten und ihre Funktione
Im Prinzip ganz einfach: Du definierst Dir eine Methode mit gleicher Signatur und kannst diese dann dem Event zuweisen. Es muss aber eine Methode sein, eine reguläre Funktion geht nicht. Ein Beispiel für einen Button:
Delphi-Quellcode:
type TMyForm = class(TForm)
private procedure DoOnClick(Sender: TObject); ... end; ... procedure TMyForm.DoOnClick(Sender: TObject); begin //hier der Code der Methode end; ... MyButton := TButton.Create(self); ... MyButton.OnClick := DoOnClick; ... end. |
Re: in der Laufzeit erstellte Komponenten und ihre Funktione
Danke für deine Hilfe,
Habe jetzt folgendes Programm dazu geschrieben und es kommt zumindest beim compilieren zu keinem Fehler. Kannst ja mal schauen, ob ich einen logischen Fehler (wie z.B. Unendlich Schleife)eingebaut hab, der durch den Compiler nicht erkannt wird.
Delphi-Quellcode:
type
TForm1 = class(TForm) Memo1: TMemo; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure OnClientRead(Sender: TObject; Socket: TCustomWinSocket); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; myServer : TServerSocket; implementation {$R *.dfm} procedure TForm1.OnClientRead(Sender: TObject; Socket: TCustomWinSocket); var i : integer; begin For i := 0 to myServer.Socket.ActiveConnections - 1 do begin with myServer.Socket.Connections [i] do if (Connected) then SendText('Hallo'); end; end; procedure TForm1.FormCreate(Sender: TObject); begin myServer := TServerSocket.Create(Form1); myServer.Port := 6712; end; procedure TForm1.FormDestroy(Sender: TObject); begin myServer.Destroy; end; end. Danke nochmal |
Re: in der Laufzeit erstellte Komponenten und ihre Funktione
Du solltest das OnClientRead auch noch zuweisen (am besten mit im OnCreate)
|
Re: in der Laufzeit erstellte Komponenten und ihre Funktione
Auf die Schnelle fallen mir 2 Dinge auf:
- statt Destroy besser Free aufrufen - Du hast die Methode noch nicht zugewiesen |
Re: in der Laufzeit erstellte Komponenten und ihre Funktione
Die beiden letzten Proceduren habe ich so abgeändert:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin myServer := TServerSocket.Create(Form1); myServer.Port := 6712; myServer.OnClientRead := Form1.OnClientRead; end; procedure TForm1.FormDestroy(Sender: TObject); begin myServer.free; end; |
Re: in der Laufzeit erstellte Komponenten und ihre Funktione
Kleiner Verbesserungsvorschlag:
Delphi-Quellcode:
Man sollte niemals benannte Instanzen nehmen.
procedure TForm1.FormCreate(Sender: TObject);
begin myServer := TServerSocket.Create(Form1); myServer.Port := 6712; myServer.OnClientRead := self.OnClientRead; end; |
Re: in der Laufzeit erstellte Komponenten und ihre Funktione
Danke hab ich noch verädert.
Eine kleine Zusatzfrage, wie kann ich in dem Memo die Cursorposition (der blinkende senkrechte Strich im Textfeld) ausschalten ohne gleich das ganze Memo-Feld zu deaktivieren oder kann ich die Schriftfarbe des deaktivierten Memofeldes von grau auf schwarz ändern? |
Re: in der Laufzeit erstellte Komponenten und ihre Funktione
Für den Cursor müsste
![]() |
Re: in der Laufzeit erstellte Komponenten und ihre Funktione
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:09 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz