Autor |
Beitrag |
DecKeL
      
Beiträge: 22
Windows XP
D7, D4 - Professional
|
Verfasst: Di 12.02.08 14:34
Hallo,
Ich habe folgendes Problem.
Ich Will 2, oder mehrere Text Felder in eins schreiben.
Das Problem ist, das der Text in den Feldern RichEdit Format hat und das dann so aussieht.
Zitat: | angebotd{\rtf1\ansi\ansicpg1252\deff0{\fonttbl{\f0\fnil\fcharset0 MS Sans Serif;}}
{\colortbl ;\red255\green128\blue64;}
\viewkind4\uc1\pard\qc\cf1\lang1031\b\f0\fs16 test\cf0
\par } |
anstatt so:
Offensichtlich erkennt das RichEdit Feld nicht, das das 2. Feld auch ein RichEdit Format hat, und schreibt dann den ganzen Code rein, anstatt einfach nur den Text, der da eigentlich stehen sollte.
Ich hoffe ich habe mich verständlich ausgedrückt.
Kennt da jemand eine Simple Lösung, oder gibt es da eine Komponente, die das automatisch erkennt???
Danke schon mal im Voraus
Manu Moderiert von jasocul: Topic aus Datenbanken verschoben am Mi 13.02.2008 um 10:15
|
|
Lannes
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: Di 12.02.08 17:00
Hallo,
das Thema wurde dort schon mal ausführlich besprochen:
[Richedit, VCL Win32] Text aus RTF mit formatierung übertragen
denke das Dir das weiterhilft 
_________________ MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
|
|
DecKeL 
      
Beiträge: 22
Windows XP
D7, D4 - Professional
|
Verfasst: Di 12.02.08 17:39
Entweder habe ich mich falsch ausgedrück, oder du hast mein Problem leider nicht verstanden.
Ich lese den Text direkt aus einem Datenbank Feld aus via. query.FieldByName('feld').asstring und nicht aus dem DBRichEdit.
hier der Code:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| FrmAnhang.zqAnhang.First; While not FrmAnhang.zqAnhang.Eof do begin REBemerkung.Text := REBemerkung.Text+#13#13+'__________'+ 'Anhang vom '+DateTimeToStr(FrmAnhang.zqAnhang.FieldByName('datum').AsDateTime)+'__________'+#13+ FrmAnhang.zqAnhang.FieldByName('notiz').AsString+#13;
FrmAnhang.zqAnhang.Next; end; |
Leider bin ich so schlecht im erklären, aber vielleicht kannst du/ihr dir/euch vorstellen, warum das nicht funktioniert.
aussehen tut mein RichEdit dann z.B. so:
Zitat: |
bla bla bla
__________Anhang vom 31.01.2008 16:33:39__________
{\rtf1\ansi\deff0{\fonttbl{\f0\fnil\fcharset0 MS Sans Serif;}{\f1\fnil MS Sans Serif;}}
\viewkind4\uc1\pard\lang1031\i\f0\fs32 TEEEE\i0\f1
\par }
__________Anhang vom 06.02.2008 16:28:39__________
{\rtf1\ansi\deff0{\fonttbl{\f0\fnil\fcharset0 MS Sans Serif;}}
\viewkind4\uc1\pard\lang1031\i\f0\fs32 res
\par }
|
bei dem Roten sollte jetzt z.B. nur TEEEE stehen und nicht das ganze Format.
|
|
Xong
      
Beiträge: 113
WIN 2000
Borland Developer Studio 2006
|
Verfasst: Di 12.02.08 17:48
Wird das auch rot dargestellt oder ist alles schwarz?
|
|
DecKeL 
      
Beiträge: 22
Windows XP
D7, D4 - Professional
|
Verfasst: Di 12.02.08 17:52
iss alles schwarz das war nur um den Fehler hervorzuheben. also der Parst gar nichts, außer den ersten Eintrag.
|
|
Lannes
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: Di 12.02.08 19:46
Hallo,
DecKeL hat folgendes geschrieben: | Entweder habe ich mich falsch ausgedrück, oder du hast mein Problem leider nicht verstanden. |
keins von beiden, Du hast das von mir vorgeschlagene Thema nicht gelesen.
Aus dem von Dir geposteten Beispiel konnte ich Dein Problem erkennen.
DecKeL hat folgendes geschrieben: | ... Zitat: | angebotd{\rtf1\ansi\ansicpg1252\deff0{\fonttbl{\f0\fnil\fcharset0 MS Sans Serif;}}
{\colortbl ;\red255\green128\blue64;}
\viewkind4\uc1\pard\qc\cf1\lang1031\b\f0\fs16 test\cf0
\par } |
|
Das ist das Ergebnis einer Verkettung eines String(in Deinem Beispiel 'angebotd') mit einem String in dem RTF-Formatierungs-Code enthalten ist. Dabei ist es völlig irrelevant ob der RTF-Formatierte String aus einer DB, oder was weis ich woher, stammt. Das Problem ist immer das gleiche.
Die grobe Vorgehensweise ist den String 'angebotd' ins RichEdit zu schreiben und dann den zweiten String mit dem RTF-Formatierungs-Code unter zuhilfenahme eines Streams dahinterzusetzen.
Wie man das, unter Berücksichtigung der verschiedensten Randbedingungen, realisiert wird eingehend in dem verlinkten Thema besprochen, bzw. es sind dort weitere Links zu ausführlicheren Informationen und Codebeispielen enthalten.
_________________ MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
|
|
DecKeL 
      
Beiträge: 22
Windows XP
D7, D4 - Professional
|
Verfasst: Mi 13.02.08 10:35
ok. Danke das du nochmal so ausführlich beschrieben hast. ich werde mir das jetzt nochmal genauer anschauen.
Ich berichte, wenn es geklappt hat, oder wenn es neue Probleme gibt. 
|
|
DecKeL 
      
Beiträge: 22
Windows XP
D7, D4 - Professional
|
Verfasst: Mi 13.02.08 14:44
so. da bin ich mal wieder.
ALso mit der Zitat: | procedure SetRTFToRichEdit(sRTF: String;aRichEdit: TRichEdit); |
hat das mehr oder weniger gut geklappt.
Der Parst jetzt das RichEdit Format zu ca. 80%
es gibt jetzt noch folgendes Problem, was entweder ich mal wieder nicht checke, oder die Procedure nicht macht.
bei mir siet das jetzt so aus:
RichEdit hat folgendes geschrieben: | kjsadf
__________Anhang vom 13.02.2008 09:50:26__________
Anhang eins dick
__________Anhang vom 13.02.2008 09:50:59__________
normal
__________Anhang vom 13.02.2008 11:15:33__________
unterstrichen
__________Anhang vom 13.02.2008 11:16:03__________
hallo
__________Anhang vom 13.02.2008 11:28:47__________
dich kursif unterstrichen
|
Aussehen sollte es aber eigentlich so:
RichEdit hat folgendes geschrieben: | kjsadf
__________Anhang vom 13.02.2008 09:50:26__________
Anhang eins dick
__________Anhang vom 13.02.2008 09:50:59__________
normal
__________Anhang vom 13.02.2008 11:15:33__________
unterstrichen
__________Anhang vom 13.02.2008 11:16:03__________
hallo
__________Anhang vom 13.02.2008 11:28:47__________
dich kursif unterstrichen
|
Ich vermute mal, das der nur die Format Eigenschaften von dem letzten Datensatz nimmt. also dick, unterstricken und kursiv und überträgt das dann auf den ganzen Text und nicht nur für die, für die es eigentlich sein sollte.
|
|
Lannes
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: Mi 13.02.08 19:37
Hallo,
da weis ich jetzt nicht wie Du das RichEdit fütterst, Dein Code -der das falsche Ergebnis liefert-, würde mir helfen Dir zu helfen. 
_________________ MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
|
|
DecKeL 
      
Beiträge: 22
Windows XP
D7, D4 - Professional
|
Verfasst: Do 14.02.08 10:35
ahh.. sry.
also heir der alte und der Neue zum Vergleich:
alt: Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| FrmAnhang.zqAnhang.First; While not FrmAnhang.zqAnhang.Eof do begin REBemerkung.Text := REBemerkung.Text+#13#13+'__________'+ 'Anhang vom '+DateTimeToStr(FrmAnhang.zqAnhang.FieldByName('datum').AsDateTime)+'__________'+#13+ FrmAnhang.zqAnhang.FieldByName('notiz').AsString+#13;
FrmAnhang.zqAnhang.Next; end; |
Neu:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| FrmAnhang.zqAnhang.First; While not FrmAnhang.zqAnhang.Eof do begin FieldText := FrmAnhang.zqAnhang.FieldByName('notiz').AsString; SetRTFToRichEdit(FieldText, REBemerkung);
RichEditText := RichEditText+#13#13+'__________'+ 'Anhang vom '+DateTimeToStr(FrmAnhang.zqAnhang.FieldByName('datum').AsDateTime)+'__________'+#13+ REBemerkung.Text+#13;
FrmAnhang.zqAnhang.Next; end; REBemerkung.Text := RichEditText; end; |
|
|
Lannes
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: Fr 15.02.08 10:12
Hallo,
so richtig gelesen hast Du immer noch nicht
Du musst grundsätzlich unterscheiden zwischen
a.) den kompletten Inhalt eines RichEdit mit RTF-Code füllen
b.) an oder in einen formatierten RichEdit-Inhalt weiteren RTF-Code hinzufügen
Die Funktion SetRTFToRichEdit bedient a.)
zu b.) kannst Du Informationen aus dem Beitrag ( Link) in dem von mir verlinkten Thema entnehmen. Oder, falls es nicht funktioniert(BS-abhängig), findest Du in dem Thema auch einen Link bzgl. function _AddRtfCallback.
Zu Deinem Code-Ansatz:
Du siehst es richtig, das das Format des ersten RTF-Codes für alle weiteren Einträge genutzt wird, denn interpretiert wird nur einmal im ersten Schleifendurchgang.
Außerdem kannst Du nicht RichEdit.Text verwenden, denn es beinhaltet keine RTF-Codes.
Hab Dir mal einen kurzen Code geschrieben, denke das Du darauf aufbauen kannst. Aber nur wenn Du Dich näher mit dem Thema beschäftigst.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| var s1,s2 : String; begin s1 := '{\rtf1\ansi\ansicpg1252\deff0{\fonttbl{\f0\fnil\fcharset0 MS Sans Serif;}}' +'{\colortbl ;\red255\green128\blue64;}' +'\viewkind4\uc1\pard\qc\cf1\lang1031\b\f0\fs16 Fett\cf0\par }';
s2 := '{\rtf1\ansi\ansicpg1252\deff0{\fonttbl{\f0\fnil\fcharset0 MS Sans Serif;}}' +'{\colortbl ;\red255\green128\blue64;\red255\green0\blue255;}' +'\viewkind4\uc1\pard\qc\cf2\lang1031\ul\f0\fs16 unterstrichen\cf0\par }'; with RichEdit1 do begin SelAttributes := DefAttributes;
SelText := '__________Anhang vom '+DateTimeToStr(now)+'__________'+#13#10; SelText := s1;
SelText := '__________Anhang vom '+DateTimeToStr(now)+'__________'+#13#10; SelText := s2; end; |
_________________ MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
|
|
DecKeL 
      
Beiträge: 22
Windows XP
D7, D4 - Professional
|
Verfasst: Mo 18.02.08 17:07
So, damit euch nicht langweilig wird.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| REBemerkung.Text:=' '; REBemerkung.SelAttributes := REBemerkung.DefAttributes;
REBemerkung.SelText := dsKontaktAkquiseKontakt.DataSet.FIeldByName('bemerkung').AsString;
for zaehler := 0 to i-1 do begin REBemerkung.SelAttributes := REBemerkung.DefAttributes; REBemerkung.SelText := #10#13+'__________Anhang von:' +DateTimeTOStr(AnhangDate[zaehler]) +'__________'+#13; REBemerkung.SelText := AnhangField[zaehler];
end; |
mit ein bisschen Ceaten und "eher untypischen mitteln" funktioniert es jetzt.
Ich bedanke mich nochmal für die Hilfe, die ich von euch(und vor allem dir @Lannes) bekommen habe.
Ich werde mich bestimmt nochmal hier Melden 
|
|
|