![]() |
Devexpress TcxComboBox Indy TIdTCPServer und TIdTCPClient
Hallo,
ich habe eine Frage bezüglich der TcxComboBox von Devexpress und TIdTCPServer sowie Client. Ich möchte gerne vom Client aus eine Nachricht an den Server senden und dann daraufhin die Elemente besagter Combobox löschen. Die Nachricht kommt auch problemlos an aber beim Items.Clear hängt sich die Serverseite auf. Kennst sich jemand evtl. mit den Editoren von Devexpress aus? Hier der Code für den Client (auf der Form befindet sich der TIdTCPClient und ein Button):
Code:
Und für den Server (auf der Form ist ein TIdTCPServer und eine TcxComboBox):
procedure TForm5.Button1Click(Sender: TObject);
begin TCPClient.Connect; TCPClient.IOHandler.WriteLn('test'); TCPClient.Disconnect; end;
Code:
Wäre super wenn Ihr mir da weiter helfen könntet.
procedure TForm6.TCPServerExecute(AContext: TIdContext);
begin if AContext.Connection.IOHandler.ReadLn = 'test' then CMB.Properties.Items.Clear; end; Viele Grüße Mirko |
AW: Devexpress TcxComboBox Indy TIdTCPServer und TIdTCPClient
Die OnExecute Methode wird aus einem anderen Thread als dem Hauptthread auusgeführt.
Zugriffe auf VCL Objekte dürfen nur aus dem Hauptthread ausgeführt werden, daher muss TThread.Queue oder synchronize verwendet werden. |
AW: Devexpress TcxComboBox Indy TIdTCPServer und TIdTCPClient
Danke für die Info.
Könntest Du mir bitte ein Beispiel geben, wie ich das am BEsten angehe. Mit Thrading habe ich mich noch nie beschäftigt. Ich habe festgestellt, daß ich in der Version 9 der Indys beim onExecute die einen TIdThread habe während ich jetzt in der Version 10 nur noch TIdContext habe. TIdThread konnte man direkt synchonisieren aber wie mache ich das mit der Vèrsion 10? Viele Grüße Mirko |
AW: Devexpress TcxComboBox Indy TIdTCPServer und TIdTCPClient
Zitat:
Delphi-Quellcode:
Ab Delphi 2009 geht es auch mit TThread.Queue, was den kleinen Vorteil hat dass es den TCP Server Thread nicht blockiert.
procedure TForm6.TCPServerExecute(AContext: TIdContext);
begin if AContext.Connection.IOHandler.ReadLn = 'test' then Synchronize(ClearItems); end; procedure TForm6.ClearItems; begin CMB.Properties.Items.Clear; end; |
AW: Devexpress TcxComboBox Indy TIdTCPServer und TIdTCPClient
Ahh ok, verstehe, Danke fürs Beispiel.
Beim kompilieren erhalten ich allerdings einen Fehler: Zitat:
Clear_Items habe ich vorher als procedure erstellt. Gruß Mirko |
AW: Devexpress TcxComboBox Indy TIdTCPServer und TIdTCPClient
Als Prozedur, oder als Methode?
Methode = eine Prozedur in einer Klasse Versuch mal.
Delphi-Quellcode:
TThread.Synchronize(nil, ClearItems);
|
AW: Devexpress TcxComboBox Indy TIdTCPServer und TIdTCPClient
Als Methode.
Unter meine Form Klasse habe ich die Prozedur ClearItems eingebunden. TThread.Synchronize(nil, ClearItems) functioniert. Vielen Dank !! Gruß Mirko |
AW: Devexpress TcxComboBox Indy TIdTCPServer und TIdTCPClient
So, ich hab mal schnell geschaut, was bei dir falsch lief.
Das nächste Mal, solltest du als Erstes nachsehen, ob du auch die richtige Funktion erwischt hast. Ich vermute, daß dein verwendetes Synchronize in Wirklichkeit das
Delphi-Quellcode:
aus der Unit Windows war
const SYNCHRONIZE = $00100000;
und danach ist natürlich keine
Delphi-Quellcode:
erlaubt. :stupid:
(
|
AW: Devexpress TcxComboBox Indy TIdTCPServer und TIdTCPClient
Super, vielen Dank für Eure Hilfe !!
Mirko |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:49 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