Entwickler-Ecke

Internet / Netzwerk - RichEdit-Inhalt über Sockets senden


schaumermal - Fr 06.06.08 10:49
Titel: RichEdit-Inhalt über Sockets senden
Hi,

ich habe folgende Frage:

Wie kann ich den Inhalt, den ich in einem TRichEdit Feld habe über eine Socketverbindung vom Client an den Server übertragen.

Aktuell habe ich nur die Möglichkeit gefunden, mit

Delphi-Quelltext
1:
Socket.SendText('Meldung an den Server');                    

Text zu übertragen. Ich möchte aber auch gerne die Formatierung (fett, unterstrichen, usw.) übertragen.

Es existiert noch die Methode Socket.SendBuf bei der ich aber nicht weis wie ich diese Nutzen könnte um meinen formatieren Text zu übergeben.

Kann mit hierzu jemand einen Hinweise geben?

Danke und Gruß

Moderiert von user profile iconNarses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Fr 06.06.2008 um 12:01
Moderiert von user profile iconNarses: Titel geändert.


iKilledKenny - Fr 06.06.08 10:56

RichText ist kein binäres Format, sondern Text mit "Steuerzeichen". Du kannst das also auch mit den Formatierungen als Text übertragen.


schaumermal - Fr 06.06.08 11:08

Hi,

danke für die Info.
Leider kommt aber auf dem Server der Text ohne Formatierung an.

Auf dem Client sende ich mit

Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.Button1Click(Sender: TObject);
begin
     ClientSocket.Socket.SendText(fmText.Text);
end;

Auf dem Server empfange ich mit

Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.ServerSocketClientRead(Sender: TObject; Socket: TCustomWinSocket);
begin
     fmText.Text:=Socket.ReceiveText;
end;

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt


iKilledKenny - Fr 06.06.08 11:15

Was ist denn fmText bei dir? Das sollte natürlich auch ein RichEdit sein...

P.S.: Habe eben mal in der Doku geschaut, RichEdit.PlainText := False; könnte evtl. helfen...


schaumermal - Fr 06.06.08 11:22

fmText ist das TRichedit

PlainText steht auf False.

Du hast geschrieben, dass

user profile iconiKilledKenny hat folgendes geschrieben:
RichText ist kein binäres Format, sondern Text mit "Steuerzeichen". Du kannst das also auch mit den Formatierungen als Text übertragen.


Kannst Du mir sagen wie ich ggf. ein binär Format übertragen kann (wenn auch hier ggf. nicht notwendig)?


iKilledKenny - Fr 06.06.08 11:44

Habe nochmal in der Doku geschaut. Mein Delphi 5 RichEdit hat gar keine Property "Text"...

Versuch mal

Delphi-Quelltext
1:
SetWindowText (fmText.Handle, PChar (Socket.ReceiveText));                    

so funktioniert das zumindest bei mir.

Wegen Übertragung von binären Dateien:
Ich verwende eigentlich immer XML zum Übertragen und wandele deshalb meine binären Daten in Text um, bevor ich sie verschicke...


Narses - Fr 06.06.08 12:11

Moin!

user profile iconschaumermal hat folgendes geschrieben:
Leider kommt aber auf dem Server der Text ohne Formatierung an.
Probier das mal so:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure TForm1.Button1Click(Sender: TObject);
begin
  var
    RTF: TStringStream;
begin
  RTF := TStringStream.Create('');
  try
    RichtEdit1.Lines.SaveToStream(RTF);
    ClientSocket.Socket.SendText(RTF.DataString);
  finally
    RTF.Free;
  end;
end;
Und so lesen:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TForm1.ServerSocketClientRead(Sender: TObject; Socket: TCustomWinSocket);
  var
    RTF: TStringStream;
begin
  RTF := TStringStream.Create(Socket.ReceiveText);
  try
    RichEdit1.Lines.LoadFromStream(RTF);
  finally
    RTF.Free;
  end;
end;
Aber: :mahn:cu
Narses

//EDIT: :oops: Fehler im Code korigiert


schaumermal - Fr 06.06.08 14:38

Hi,

danke für Deinen Hinweis.
Allerdings kommt folgende Meldung bei ClientSocket.Socket.SendText(RTF);

[Fehler] USocketClient.pas(101): Inkompatible Typen: 'String' und 'TStringStream'


Narses - Fr 06.06.08 14:40

Moin!

user profile iconschaumermal hat folgendes geschrieben:
Allerdings kommt folgende Meldung bei ClientSocket.Socket.SendText(RTF);
[Fehler] USocketClient.pas(101): Inkompatible Typen: 'String' und 'TStringStream'
Jup, hatte was im Code oben vergessen :? ist aber jetzt mit drin. ;)

cu
Narses


schaumermal - Fr 06.06.08 14:47

Hi,

thx.

Geht wunderbar.


Narses - Fr 06.06.08 15:00

Moin!

user profile iconschaumermal hat folgendes geschrieben:
thx.
Bitte. ;)

user profile iconschaumermal hat folgendes geschrieben:
Geht wunderbar.
Auf die Hinweise achten, die Lösung ist unsauber! :mahn:

cu
Narses


schaumermal - Fr 06.06.08 15:18

Noch eine Nachfrage,

könnte ich auf diesem Weg auch eine Datei übertragen?

Nur zum Verständnis:
Ich muss eine Anwendung erstellen in dem ich über diesen Weg (formatierten Text und ggf. Dateianhang) übertragen kann.

Die Serveranwendung soll mit den empfangenen Daten (also Text und ggf. Dateien) dann mit unserem Exchange Server kommunizieren und Newsletter für unsere Kunden erstellen.

Aus Sicherheitsgründen darf ich nicht direkt mit dem Exchangeserver kommunizieren.
Deswegen möchte ich diese Weg wählen.


Narses - Fr 06.06.08 15:25

Moin!

user profile iconschaumermal hat folgendes geschrieben:
Noch eine Nachfrage,
Normalerweise: neue Frage, neuer Thread! :| Aber das ist wohl noch nah genug am Thema. ;)


user profile iconschaumermal hat folgendes geschrieben:
könnte ich auf diesem Weg auch eine Datei übertragen?
Was ist denn "auf diesem Weg" für dich? :nixweiss: Die TCP-Verbindung? Die Art-und-Weise deines Ansatzes?

Grundsätzlich: ja; in der Praxis ist das aber schon etwas schwerer :arrow: Tutorial zum Binärdatentransfer über die Sockets [http://www.delphi-library.de/topic_BinaerProtokollTutorial+Sockets+v100+MalChatFiles_66706.html].

cu
Narses