Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Vordefinierten Zeilenumbruch in Label laden
delphistart - Sa 19.07.08 21:20
Titel: Vordefinierten Zeilenumbruch in Label laden
Hallo,
Seit langem habe ich mal wieder Urlaub UND Zeit ein bisschen zu mit Delphi zu Programmieren.
Für folgendes Problem finde ich aber leider einfach keine Lösung:
Ich habe auf meinem Formular mehrere Labels. Diese werden mit Daten gefüllt, die ich aus einer Textdatei lade.
Nun möchte ich in der Techtdatei irgendwie Zeilenumbrüche vordefinieren. Das heist wenn dort z.B. das Zeichen '#' vorkommt soll es als Zeilenumbruch ausgegeben werden.
Dann muss ich noch irgendwie Abfragen wie viele Zeileumbrüche dieser Art vorhanden sind.
Wäre echt super, wenn jemand von euch eine Lösung hat!
Hidden - Sa 19.07.08 21:42
Hi,
Das verstehe ich nicht: In Delphi ist ein Zeilenumbruch ein #13#10.. In einer Textdatei kann man doch auch einfach Zeilenumbrüche einfügen(Enter!; bzw. per Delphi #13#10).
Wenn du alle '#'s durch Zeilenumbrüche ersetzen willst, müsstest du folgendes machen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| function Parse(S: String): String; var i: Integer; begin StringReplace(S, #13#10, '', [rfReplaceAll]); StringReplace(S, '#', #13#10, [rfReplaceAll]); result := S; end; |
E: Siehe auch:
http://r2c2.weingut-rehn.de/content3_Stringverarbeitung_mit_Delphi.htm
mfG,
delphistart - Sa 19.07.08 22:03
Ja, genau so habe ich das auch zuerst probiert, aber bei dieser Variante bekomme ich #13#10 als Text ausgegeben und nicht als Zeilenumbruch, weil das dann ja quasi so da steht:
'Text#13#10Text'
die Korrekte Angabe wäre aber
'Text'#13#10'Text'
Nur wie bekomme ich die #13#10 in Label.Caption auserhalb vom String bzw. zwischen die beiten Teilstrings?
Delete - Sa 19.07.08 22:13
am besten bauen wir uns ein schleifchen ...
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| NeuStr = ''; for c in AltStr do if c = '#' then NeuStr := NeuStr + #10#13 else NeuStr := NeuStr + c; |
delphistart - Sa 19.07.08 22:41
Grenzgaenger hat folgendes geschrieben: |
am besten bauen wir uns ein schleifchen ...
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| NeuStr = ''; for c in AltStr do if c = '#' then NeuStr := NeuStr + #10#13 else NeuStr := NeuStr + c; | |
Vielen Herzlichen Dank!
So funktionierts!!! :dance2:
delfiphan - So 20.07.08 10:28
Hidden hat folgendes geschrieben: |
Delphi-Quelltext 1:
| StringReplace(S, #13#10, '', [rfReplaceAll]); | |
delphistart hat folgendes geschrieben: |
Ja, genau so habe ich das auch zuerst probiert, aber bei dieser Variante bekomme ich #13#10 als Text ausgegeben und nicht als Zeilenumbruch, weil das dann ja quasi so da steht:
'Text#13#10Text' |
Der Code oben ist korrekt. Du hast wohl was falsch abgetippt oder falsch verstanden.
Hingegen rate ich von folgendem Code ab. Der Windows Zeilenumbruch ist #13#10, und nicht #10#13. Ausserdem sollte man Strings nicht zeichenweise zusammenbauen, da dann bei jedem Schleifendurchgang ein um 1 Byte grösserer String angelegt werden muss (d.h. ein FreeMem/GetMem pro Iteration. Dann muss auch noch jedesmal ein grösserer Speicherblock gefunden werden und die alten Daten kopiert werden). Um Strings zu ersetzen ist StringReplace da ;)
Grenzgaenger hat folgendes geschrieben: |
am besten bauen wir uns ein schleifchen ...
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| NeuStr = ''; for c in AltStr do if c = '#' then NeuStr := NeuStr + #10#13 else NeuStr := NeuStr + c; | |
Hidden - So 20.07.08 11:56
Hi,
Aus deiner Beschreibung entnehme ich mal, dass du #13#10 einfach unter properties\caption eingetippt hast.
Nochmal eine vollständige Lösung:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| function Parse(S: String): String; var i: Integer; begin StringReplace(S, '#13#10', #13#10, [rfReplaceAll]); result := S; end;
procedure TForm1.FormCreate(Sender: TObject); begin Label1.Caption := Parse(Label1.Caption); end; |
mfG,
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!