Autor Beitrag
schaumermal
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 72



BeitragVerfasst: Fr 06.06.08 10:49 
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
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 394
Erhaltene Danke: 8

Win XP
D5 Prof, C# Express 2005
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 72



BeitragVerfasst: 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
ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.Button1Click(Sender: TObject);
begin
     ClientSocket.Socket.SendText(fmText.Text);
end;

Auf dem Server empfange ich mit
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 394
Erhaltene Danke: 8

Win XP
D5 Prof, C# Express 2005
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 72



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 394
Erhaltene Danke: 8

Win XP
D5 Prof, C# Express 2005
BeitragVerfasst: Fr 06.06.08 11:44 
Habe nochmal in der Doku geschaut. Mein Delphi 5 RichEdit hat gar keine Property "Text"...

Versuch mal
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: 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:
ausblenden 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:
ausblenden 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:
  • Das wird nur mit Texten funktionieren, die im RTF-Format kleiner als 8KB sind, und
  • deine Datenrate klein genug bleibt, um nicht mehrere Datenpakete auf einmal zu lesen :arrow: [url=www.delphi-library.d...ml]FAQ-Beitrag[/url]
cu
Narses

//EDIT: :oops: Fehler im Code korigiert

_________________
There are 10 types of people - those who understand binary and those who don´t.


Zuletzt bearbeitet von Narses am Di 10.06.08 22:23, insgesamt 2-mal bearbeitet
schaumermal Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 72



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: 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

_________________
There are 10 types of people - those who understand binary and those who don´t.
schaumermal Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 72



BeitragVerfasst: Fr 06.06.08 14:47 
Hi,

thx.

Geht wunderbar.
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: 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

_________________
There are 10 types of people - those who understand binary and those who don´t.
schaumermal Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 72



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: 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.

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.