Autor Beitrag
CenBells
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1547

Win 7
Delphi XE5 Pro
BeitragVerfasst: Do 30.01.14 22:35 
Hallo zusammen,

nach langer Zeit habe ich mich entschlossen, mein D2007 durch XE5 abzulösen. Bislang haben mich mangelnde Zeit und die Unicode Thematik davon abgehalten.

Das Unicode thema ist nun zu einem Problem?! geworden, das ich zwar lösen konnte, allerdings bin ich mir nicht sicher, ob das der ideale weg ist.

Folgender Code aus D2007 (simplifiziert zu darstellungszwecken)

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
var
  LStream: TStringStream;
  LString: string;
begin
  LString := 'Dies ist ein test'#13#10;

  LStream := TStringStream.create('');
  LStream.WriteBuffer(LString[1], Length(LString));
  
  Memo1.Text := LStream.DataString
end;


Wenn ich diesen Code mit XE5 kompiliere, wird nur das erste Zeichen im Memo angezeigt. Im DataString ist hinter jedem Char des Quellstrings ein '#0' eingefügt worden.

Nach etwas recherche habe ich den obigen Code wie folgt geändert

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
var
  LStream: TStringStream;
  LString: string;
begin
  LString := 'Dies ist ein test'#13#10;

  LStream := TStringStream.create('', TEncoding.UniCode);
  LStream.WriteBuffer((Pointer(s)^, Length(s) * SizeOf(Char));
  
  Memo1.Text := LStream.DataString
end;


Nun ist die Anzeige im Memo ok, allerdings weiß ich nicht, ob ich mir irgendwelche Folgeprobleme reingeholt habe.

Wie ist denn Eure Erfahrung? Was habt ihr geändert? Würdet Ihr das auch so lösen?

Vielen Dank im Voraus.

viele GRüße
CenBells

Moderiert von user profile iconNarses: Code- durch Delphi-Tags ersetzt

_________________
Eine Klasse beschreibt die Struktur und das Verhalten einer Menge gleichartiger Objekte.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 31.01.14 00:23 
Das ist so prinzipiell schon in Ordnung. Ob es die beste Lösung ist, lässt sich ohne etwas mehr Kontext (was passiert mit dem Stream, ...) schlecht sagen.

Das Beispiel an sich wäre so sinnvoller:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
var
  LStream: TStringStream;
  LString: string;
begin
  LString := 'Dies ist ein test'#13#10;

  LStream := TStringStream.create(LString, TEncoding.UniCode);
  
  Memo1.Text := LStream.DataString
end;
CenBells Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1547

Win 7
Delphi XE5 Pro
BeitragVerfasst: Sa 01.02.14 22:55 
Hallo jaenicke,

danke für die Antwort.

Der Stream selbst, wird an verschiedenen Stellen im Quellcode mit unterschiedlichen Strings befüllt. Der angegebene Code ist tatsächlic nur zur Darstellung sehr weit vereinfacht worden :)

Viele Grüße
CenBells

_________________
Eine Klasse beschreibt die Struktur und das Verhalten einer Menge gleichartiger Objekte.