Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Devexpress TcxComboBox Indy TIdTCPServer und TIdTCPClient (https://www.delphipraxis.net/180697-devexpress-tcxcombobox-indy-tidtcpserver-und-tidtcpclient.html)

oakley 10. Jun 2014 10:00

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:
procedure TForm5.Button1Click(Sender: TObject);
begin
  TCPClient.Connect;
  TCPClient.IOHandler.WriteLn('test');
  TCPClient.Disconnect;
end;
Und für den Server (auf der Form ist ein TIdTCPServer und eine TcxComboBox):
Code:
procedure TForm6.TCPServerExecute(AContext: TIdContext);
begin
 if AContext.Connection.IOHandler.ReadLn = 'test' then CMB.Properties.Items.Clear;
end;
Wäre super wenn Ihr mir da weiter helfen könntet.

Viele Grüße

Mirko

mjustin 10. Jun 2014 10:18

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.

oakley 10. Jun 2014 11:07

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

mjustin 10. Jun 2014 11:13

AW: Devexpress TcxComboBox Indy TIdTCPServer und TIdTCPClient
 
Zitat:

Zitat von oakley (Beitrag 1261808)

Könntest Du mir bitte ein Beispiel geben, wie ich das am BEsten angehe

Mit Synchronize:

Delphi-Quellcode:
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;
Ab Delphi 2009 geht es auch mit TThread.Queue, was den kleinen Vorteil hat dass es den TCP Server Thread nicht blockiert.

oakley 10. Jun 2014 11:37

AW: Devexpress TcxComboBox Indy TIdTCPServer und TIdTCPClient
 
Ahh ok, verstehe, Danke fürs Beispiel.

Beim kompilieren erhalten ich allerdings einen Fehler:
Zitat:

[dcc32 Fehler] Unit6.pas(46): E2066 Operator oder Semikolon fehlt
[dcc32 Fehler] Unit6.pas(46): E2014 Anweisung erforderlich, aber Ausdruck vom Typ 'Integer' gefunden
Zeile 46 ist: Synchronize(clear_items);

Clear_Items habe ich vorher als procedure erstellt.

Gruß

Mirko

himitsu 10. Jun 2014 11:57

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);

oakley 10. Jun 2014 12:04

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

himitsu 10. Jun 2014 12:40

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:
const SYNCHRONIZE = $00100000;
aus der Unit Windows war
und danach ist natürlich keine
Delphi-Quellcode:
(
erlaubt. :stupid:

oakley 11. Jun 2014 08:02

AW: Devexpress TcxComboBox Indy TIdTCPServer und TIdTCPClient
 
Super, vielen Dank für Eure Hilfe !!

Mirko


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:33 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz