Autor Beitrag
DecKeL
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 22

Windows XP
D7, D4 - Professional
BeitragVerfasst: 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:

Zitat:

angebotd
test

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 user profile iconjasocul: Topic aus Datenbanken verschoben am Mi 13.02.2008 um 10:15
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: 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 :wink:

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
DecKeL Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 22

Windows XP
D7, D4 - Professional
BeitragVerfasst: 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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 113

WIN 2000
Borland Developer Studio 2006
BeitragVerfasst: Di 12.02.08 17:48 
Wird das auch rot dargestellt oder ist alles schwarz?
DecKeL Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 22

Windows XP
D7, D4 - Professional
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Di 12.02.08 19:46 
Hallo,
user profile iconDecKeL 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.
user profile iconDecKeL 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 22

Windows XP
D7, D4 - Professional
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 22

Windows XP
D7, D4 - Professional
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: 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. :wink:

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
DecKeL Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 22

Windows XP
D7, D4 - Professional
BeitragVerfasst: Do 14.02.08 10:35 
ahh.. sry.

also heir der alte und der Neue zum Vergleich:

alt:
ausblenden 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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: 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.
ausblenden 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
    //DefAttributes zu Anfang setzen,
    //damit die Attribute der Standardschrift des RichEdit
    //für die '... Anhang'-Zeilen gelten
    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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 22

Windows XP
D7, D4 - Professional
BeitragVerfasst: Mo 18.02.08 17:07 
So, damit euch nicht langweilig wird. ;-)
ausblenden 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 ;)