AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Devexpress TcxComboBox Indy TIdTCPServer und TIdTCPClient
Thema durchsuchen
Ansicht
Themen-Optionen

Devexpress TcxComboBox Indy TIdTCPServer und TIdTCPClient

Ein Thema von oakley · begonnen am 10. Jun 2014 · letzter Beitrag vom 11. Jun 2014
Antwort Antwort
oakley

Registriert seit: 15. Aug 2005
287 Beiträge
 
#1

Devexpress TcxComboBox Indy TIdTCPServer und TIdTCPClient

  Alt 10. Jun 2014, 11:00
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
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#2

AW: Devexpress TcxComboBox Indy TIdTCPServer und TIdTCPClient

  Alt 10. Jun 2014, 11:18
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.
Michael Justin
  Mit Zitat antworten Zitat
oakley

Registriert seit: 15. Aug 2005
287 Beiträge
 
#3

AW: Devexpress TcxComboBox Indy TIdTCPServer und TIdTCPClient

  Alt 10. Jun 2014, 12:07
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
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#4

AW: Devexpress TcxComboBox Indy TIdTCPServer und TIdTCPClient

  Alt 10. Jun 2014, 12:13

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 = 'testthen
   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.
Michael Justin
  Mit Zitat antworten Zitat
oakley

Registriert seit: 15. Aug 2005
287 Beiträge
 
#5

AW: Devexpress TcxComboBox Indy TIdTCPServer und TIdTCPClient

  Alt 10. Jun 2014, 12:37
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#6

AW: Devexpress TcxComboBox Indy TIdTCPServer und TIdTCPClient

  Alt 10. Jun 2014, 12:57
Als Prozedur, oder als Methode?
Methode = eine Prozedur in einer Klasse

Versuch mal.
TThread.Synchronize(nil, ClearItems);
$2B or not $2B
  Mit Zitat antworten Zitat
oakley

Registriert seit: 15. Aug 2005
287 Beiträge
 
#7

AW: Devexpress TcxComboBox Indy TIdTCPServer und TIdTCPClient

  Alt 10. Jun 2014, 13:04
Als Methode.
Unter meine Form Klasse habe ich die Prozedur ClearItems eingebunden.

TThread.Synchronize(nil, ClearItems) functioniert. Vielen Dank !!

Gruß

Mirko
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#8

AW: Devexpress TcxComboBox Indy TIdTCPServer und TIdTCPClient

  Alt 10. Jun 2014, 13:40
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 const SYNCHRONIZE = $00100000; aus der Unit Windows war
und danach ist natürlich keine ( erlaubt.
$2B or not $2B
  Mit Zitat antworten Zitat
oakley

Registriert seit: 15. Aug 2005
287 Beiträge
 
#9

AW: Devexpress TcxComboBox Indy TIdTCPServer und TIdTCPClient

  Alt 11. Jun 2014, 09:02
Super, vielen Dank für Eure Hilfe !!

Mirko
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:59 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