Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - RichText aus TRichEdit mit Formatierung nach Excel TextBox ü
Stecky2000 - Mi 24.06.09 13:48
Titel: RichText aus TRichEdit mit Formatierung nach Excel TextBox ü
Hi allerseits.
Ich habe hier und in anderen Foren (Google) viele Threads zum Thema TRichEdit, RichText und Excel gefunden, aber meist geht es um komplett andere Dinge als ich vorhabe.
Ich verwende unter Delphi7 in eine Anwendung (Dienstplanprogramm), die das Resultat (den Dienstplan) in ein Excel-Sheet (Firmenvorgabe) exportiert. Das ganze läuft über die Funktionalitäten wie
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| excel := CreateOleObject('Excel.Application'); ... Excel.Workbooks.Open(sRootDir + 'Vorlage.xls'); ... Excel.Cells[33, 29].Value := Edit2.Text; ... Excel.Selection.Interior.ColorIndex := 4; Excel.Selection.Interior.Pattern := xlSolid; Excel.Selection.Font.Bold := True; |
usw.
Nun gibt es in dem Excel-Formular eine TextBox die ich, wenn ich den Dienstplan nach Excel exportiere, ebenfalls von Delphi aus befüllen will. Das klappt auch teils, mit unformatiertem Text, ggf. noch mit Zeilenumbruch.
Damit ich Texte vorher auch bearbeiten/formatieren kann, hab ich in Delphi ein TRichEdit verwendet dessen Inhalt ich speichern und laden kann. Ich kann dort auch Schrift ändern, färben, Hintergrundfarbe setzen etc.. Das kann man alles in ein File speichern und auch so wieder laden und die Formatierungen sind zu sehen.
Nur, wie kann ich nun den formatierten Text wieder nach Excel in die TextBox schieben, so dass dort auch die Formatierungen zu sehen sind?
Ich hoffe es hat jemand einen Tipp.
Stecky2000 - Fr 26.06.09 10:45
Hallo,
weis denn wirklich keiner etwas?
Ich habe mir ja überlegt, da es scheinbar nicht mal innerhalb von Excel funktioniert einen formatierten Text von Textbox1 nach Textbox2 zu kopieren, ob es nicht so in dem Stil laufen könnte:
- Text unformatiert, höchstens mit Zeilenumbruch, in Textbox kopieren
- Textteile markieren
- markierten Textteil formatieren
Die Frage wäre dennoch, wie bekomme ich es hin, die im RichEdit erzeugten RTF-Steuerzeichen so abzufragen, dass ich entsprechende Textteile im Excel markieren kann und formatieren kann?
Na kommt Ihr Fachleute, wer weis was ich machen kann und gibt mir einen Schubs?
Lannes - Fr 26.06.09 15:19
Hallo,
da hilft Dir RichEdit.SelStart, -SelLength, -SelText und -SelAttributes. ...
oder auch RichEdit1.SelAttributes.ConsistentAttributes.
Ist natürlich abhängig von den gesetzten Formaten, Textattribute, Absatzattribute etc.
Du kannst zum einen jedes Zeichen behandeln, z.B.:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| for z := 1 to Length(RichEdit.Text) do begin RichEdit.SelStart := z; if fsBold in RichEdit.SelAttributes.Style then Memo.Lines.Add('Zeichen: '+RichEdit.Text[z]+' = Style: Bold'); Memo.Lines.Add('Zeichen: '+RichEdit.Text[z]+ ' = Color: '+ColorToString(RichEdit.SelAttributes.Color)); end; |
oder Du prüfst Teile des Textes auf einheitliche Formatierung, z.B.:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| RichEdit.SelStart := 0; RichEdit.SelLength := 1; while (caBold in RichEdit.SelAttributes.ConsistentAttributes) and (caColor in RichEdit.SelAttributes.ConsistentAttributes) and (caSize in RichEdit.SelAttributes.ConsistentAttributes) and (RichEdit.SelLength < Length(RichEdit.Text)-1) do begin RichEdit.SelLength := RichEdit.SelLength +1; end; RichEdit.SelLength := RichEdit.SelLength -1; showmessage('Alle Zeichen von: '+RichEdit.SelText+#13#10 +'sind in Fettschrift'+#13#10 +'Schriftfarbe: '+ColorToString(RichEdit.SelAttributes.Color)+#13#10 +'Schriftgröße: '+IntToStr(RichEdit.SelAttributes.Size)); |
Stecky2000 - Fr 26.06.09 20:32
Danke Lannes!
Das muss ich mir erstmal verstehen, werde mich also damit befassen.
Wenn ich dich richtig verstehe, ist die eine Routine um einzelne Zeichen zu bearbeiten,
die andere für Textteile, sprich ganze Wörter oder Sätze.
Wenn das so ist, dann brauche ich ja beides, da ja nie auszuschliessen ist dass man einelene Zeichen oder ganze Wörter/Sätze gemischt in einem Text formatiert.
Stecky2000 - Sa 27.06.09 17:27
Hi,
ich habe beide proceduren probiert, habe jedoch bei dieser das Problem, dass sie endlos läuft.
Ich bekomme nicht heraus warum.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| RichEdit.SelStart := 0; RichEdit.SelLength := 1; while (caBold in RichEdit.SelAttributes.ConsistentAttributes) and (caColor in RichEdit.SelAttributes.ConsistentAttributes) and (caSize in RichEdit.SelAttributes.ConsistentAttributes) and (RichEdit.SelLength < Length(RichEdit.Text)-1) do begin RichEdit.SelLength := RichEdit.SelLength +1; end; RichEdit.SelLength := RichEdit.SelLength -1; showmessage('Alle Zeichen von: '+RichEdit.SelText+#13#10 +'sind in Fettschrift'+#13#10 +'Schriftfarbe: '+ColorToString(RichEdit.SelAttributes.Color)+#13#10 +'Schriftgröße: '+IntToStr(RichEdit.SelAttributes.Size)); |
Scheinbar findet er hier
Delphi-Quelltext
1:
| (RichEdit.SelLength < Length(RichEdit.Text)-1) |
das Ende nicht.
Die andere procedure, als deine erste, funktioniert einwandfrei, berücksichtigt jedoch keinen Zeilenumbruch.
Da werde ich noch ein wenig testen.
Ich würde jedoch gerne erst sehen, was die zweite, die mit der Endlosschleife, für Ergebnisse auswirft.
---
Moderiert von
Narses: Beiträge zusammengefasst---
Hat sich erledigt. Endlosschleife wars wohl keine, nachdem ich zu Testzwecken ein Showmessage dazu gebaut habe
gehts auf ein mal. war wohl ein Fehler von mir drin.
Nun gut, ich teste weiter, denn die procedure tut nicht das was ich dachte.
Beispielsweise sagt sie, wenn nur ein unformatierter Text, z.B. 'Hallo' drin steht, dass 'Hallo' komplett in Fetschrift geschrieben wäre.
Wie gesagt, ich teste noch herum um die Funktionsweise zu begreifen und ggf. eine Idee zu bekommen, wie ich sie für die Lösung meines Problems einsetzen könnte.
Lannes - Sa 27.06.09 19:52
Hallo,
SelAttributes.ConsistentAttributes funktioniert nur wenn mit SelAttributes der Test formatiert wurde.
Für Text der nicht formatiert wird gilt das Format von DefAttributes(RichEdit.font ...), mit DefAttributes kann ConsistentAttributes nichts anfangen.
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!