Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi RichEdit: Problem mit Textfarbe und Markierungsfarbe (https://www.delphipraxis.net/134256-richedit-problem-mit-textfarbe-und-markierungsfarbe.html)

Helmi 18. Mai 2009 17:05


RichEdit: Problem mit Textfarbe und Markierungsfarbe
 
Hallo,

ich bin seit gestern am verzweifeln (gibts eigentlich einen DP-Psychiater?)

Ich habe ein RichEdit in dem ein Text geladen wird.
Die RichEdit hat im OI voreingestellt bei Font.Color = clBlack.

Mittels folgender Procedure suche ich nach bestimmten Vorraussetzungen in den
einzelnen RichEdit-Zeilen und mache dann diese Teil des Textes farbig.

Soweit so gut - das funktioniert alles bestens.

Wenn ich nun einen neuen Text in das RichEdit lade, so hat der komplette Text
nicht mehr die Textfarbe schwarz sondern die die in der Procedure zuvor genutzt wurde.

Delphi-Quellcode:
procedure TMainForm.RunAndColor(RichEdit: TRichEdit; Farbe: TColor);
var
  i            : Integer;
  Pos_Such     : Integer;
  RichEdit_Zeile: Integer;
  S_RichEdit   : String;
  S_Kommentar  : String;

begin
  with RichEdit do
    begin
      for i := 0 to Pred(lines.Count) do
        begin
          //Line-Text auslesen
          S_RichEdit := lines.Strings[i];

          //Position des Semikolons rausfinden
          Pos_Such := Pos(const_Semikolon, S_RichEdit);

          //wenn kein Semikolon vorhanden ist, dann neuer Schleifendurchgang
          If Pos_Such = 0 then
            continue;

          //RichEdit-Zeile auslesen
          RichEdit_Zeile := Perform(EM_LINEINDEX , i, 0);

          //Kommentar-Text aus Zeile rauskopieren
          S_Kommentar := Copy(S_RichEdit, Pred(Pos_Such), length(S_RichEdit));

          //Zeile + Position = Markierungsstart
          SelStart   := RichEdit_Zeile + Pred(Pos_Such);

          //Markierungslänge
          SelLength  := Length(S_Kommentar);

          //Farbe setzen
          SelAttributes.Color := Farbe;

          SelLength  := 0;
        end;
    end;
end;
Ich hab folgendes schon versucht, davor und danach zu definieren, aber ohne Erfolg.

Delphi-Quellcode:
RichEdit_SPL.Font.Color := clBlack;
RichEdit_SPL.SelAttributes.Color := clBlack;
Weiss jemand was mein Problem sein könnte?

p80286 18. Mai 2009 17:49

Re: RichEdit: Problem mit Textfarbe und Markierungsfarbe
 
hallo Helmi,

leider zeigst Du nicht wie Du den neuen Text lädst.
Da das RichEdit aber eine Microsoft-Komponete ist, vermute ich, daß von der letzten Attributzuweisung noch ein Rest übrig geblieben ist ("die letzte Absatzmarke") daher wird die letzte Formatierung übernommen.
Wenn ich die Hilfe richtig interpretiere, reicht es das erste Zeichen zu selektieren und die gewünschten Attribute zu setzen.
Das sollte es gewesen sein.

Gruß
K-H

Helmi 18. Mai 2009 17:57

Re: RichEdit: Problem mit Textfarbe und Markierungsfarbe
 
Hallo,

geladen wird ganz einfach:

Delphi-Quellcode:
  //Datei-Namen auf Variable speichern
  S := OpenDialog.FileName;

  //SPL-Programm in RichEdit laden
  RichEdit_SPL.Lines.LoadFromFile(S);
[Edit] Ich hab mal vor dem Laden folgendes ausprobiert:

Delphi-Quellcode:
  RichEdit_SPL.SelStart := 0;
  RichEdit_SPL.SelLength := length(RichEdit_SPL.Text);
  RichEdit_SPL.SelAttributes.Color := clBlack;
  RichEdit_SPL.SelAttributes.Style := [];
  RichEdit_SPL.SelStart := 0;
Aber das bringt leider auch nichts...

Pfoto 18. Mai 2009 20:21

Re: RichEdit: Problem mit Textfarbe und Markierungsfarbe
 
Hallo Helmi,

das ist aber ein merkwürdiges Verhalten...

Du könntest ja mal den reinen Formatierungs-Code auslesen,
hier gibt es so eine Funktion dafür:
http://www.swissdelphicenter.ch/de/showcode.php?id=843

Vielleicht entdeckst du darin noch irgendwas, was dafür
verwantwortlich ist.

Gruß
Jürgen

Lannes 18. Mai 2009 23:02

Re: RichEdit: Problem mit Textfarbe und Markierungsfarbe
 
Hallo,

liegt der Text im RTF-Format vor?

setz mal vor LoadFromFile die Zeile:
Delphi-Quellcode:
RichEdit1.Clear;

p80286 19. Mai 2009 11:13

Re: RichEdit: Problem mit Textfarbe und Markierungsfarbe
 
Hallo Helmi,

ich hab einmal versucht, das Verhalten was Du beschrieben hast, nachzustellen, war aber nicht so erfolgreich.
Text der über RichEdit.Text geladen wurde war schwarz und Text der über .Lines.LoadfromFile geladen wurde (RTF-Datei) hatte genau die in der Datei gespeicherten Attribute.

Gruß
K-H

Helmi 19. Mai 2009 15:17

Re: RichEdit: Problem mit Textfarbe und Markierungsfarbe
 
Hallo,

ich hab mir jetzt mal den Text im RTF-Format ausgeben lassen.

Vor dem ersten Laden bekomm ich dieses Format ausgegeben:

Zitat:

---------------------------
SPL Light
---------------------------
{\rtf1\ansi\ansicpg1252\deff0\deflang1031{\fonttbl {\f0\fnil Courier New;}}
\viewkind4\uc1\pard\f0\fs20
\par }

---------------------------
OK
---------------------------

Vor dem zweiten Laden bekomm ich folgendes Format.

Zitat:

---------------------------
SPL Light
---------------------------
{\rtf1\ansi\ansicpg1252\deff0\deflang1031{\fonttbl {\f0\fnil Courier New;}}
{\colortbl ;\red255\green0\blue0;}
\viewkind4\uc1\pard\cf1\f0\fs20
\par }

---------------------------
OK
---------------------------
(Alle Zitate wurden aus ShowMessage-Texte rauskopiert)

Dort sieht man ganz klar, dass die Farbe Rot aktiv ist.
Aber nur warum?

Ein RichEdit.Clear bringt nichts, hatte ich zuvor schon drin.

[Edit]
Ich setz jetzt vor dem Laden folgende Farbe:
Delphi-Quellcode:
  RichEdit_SPL.DefAttributes.Color := clBlack;
und jetzt funktionierts


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:45 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz