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 Farben im RichEdit (schon wieder ^^) (https://www.delphipraxis.net/71683-farben-im-richedit-schon-wieder-%5E%5E.html)

Green 19. Jun 2006 14:17


Farben im RichEdit (schon wieder ^^)
 
also mein problem is eigentlich recht einfach und ich hab auch schon in diversen foren gesucht aber NIX gefunden was geklappt hat.
folgendes Problem:

ich habe ein RichEdit und will eben diesem klar machen das es ab einem bestimmten moment alles was dazu kommt in rot schreiben soll.
fogende ansätze (keiner funzt richtig) das ganze is in eine proc gepackt welche mir einen String buchstabe für buchstabe durchgeht und in ein RichEdit addet und immer wenn ein steuerzeichen (#3) kommt soll in Rot geschrieben werden:
Delphi-Quellcode:
{Version 1}
  procedure ProcColoredText( S: string; var RichEdit: TRichEdit);
    var
      i: integer;
      buffer: string;
      colored, bold, underlined: boolean;
  begin
    colored := false; bold := false; underlined := false;
    //richedit.Lines.Append('');
    if length(S) <> 0 then
    for i := 1 to length(S) do
    begin
      if S[i] = #3 then begin
        RichEdit.SelStart := Length(RichEdit.Lines[RichEdit.Lines.Count-1]) + 2; //ich weiss nit warum 2(habs ausprobiert ^^ aber s geht
        RichEdit.SelAttributes.Color := clRed;
      end else
        //RichEdit.Lines[RichEdit.Lines.Count-1] := RichEdit.Lines[RichEdit.Lines.Count-1] + S[i];
        RichEdit.SelText := S[i];
    end;
    RichEdit.Lines.Append('');
  end;

{Version 2}
  procedure ProcColoredText( S: string; var RichEdit: TRichEdit);
    var
      i: integer;
      buffer: string;
      colored, bold, underlined: boolean;
  begin
    colored := false; bold := false; underlined := false;
    richedit.Lines.Append('');
    if length(S) <> 0 then
    for i := 1 to length(S) do
    begin
      if S[i] = #3 then begin
        RichEdit.SelStart := Length(RichEdit.Lines[RichEdit.Lines.Count-1]);
        RichEdit.SelAttributes.Color := clRed;
      end else
        RichEdit.Lines[RichEdit.Lines.Count-1] := RichEdit.Lines[RichEdit.Lines.Count-1] + S[i];
    end;
  end;
beim zeweiten hab ich gar keine farbe und beim ersten wird zwar farbig geschrieben, aber wenn ich in einer neuen zeile nochmal farbigen text screiben will wird der farbige an das ende des letzten farbigen geaddet, was n bissel komisch is...

also wie gesagt alles was ich machen will is meinem RichEdit sagen zu können: 'ab jetzt alles rot schreiben' oder alles grün oder fett oder sonstwas ^^

mfG Green

3_of_8 19. Jun 2006 14:22

Re: Farben im RichEdit (schon wieder ^^)
 
Das geht auch so nicht. Informier dich mal über RichText-Steuercodes.

Green 19. Jun 2006 17:00

Re: Farben im RichEdit (schon wieder ^^)
 
ääähm also google liefert mir zu RichText Steuercodes sagenhafte 66 ergebnise ( :roll: ) mit denen ich irgendwie nix anfangen kann... kannst du mir da ma kurz erklären was du jetzt meinst? also meinst du #3 sollte ich an sich nicht verwenden? oder was, weil das kann ich leider nicht ändern, das is 'vorgegeben'. Kennstes IRC? dann weisstes (Strg + k drücken :D )

3_of_8 19. Jun 2006 17:06

Re: Farben im RichEdit (schon wieder ^^)
 
Das Asciizeichen #3 ist das ETX (end of text) Zeichen, aber das dürfte in diesem Fall unerheblich sein.

Du kannst dem RichEdit nicht direkt sagen, dass alles ab #3 rot ist. Du musst den Text, der rot sein soll, mit einem ensprechenden RichText-Steuercode versehen. Wie der genau aussieht weiß ich nicht. Aber du könntest mal Wordpad öffnen, nen Text eingeben, rot machen, abspeichern, in *.txt umbenennen, mit notepad öffnen und dir dann den Steuercode raussuchen.

Green 19. Jun 2006 17:19

Re: Farben im RichEdit (schon wieder ^^)
 
naja, rot war nur nen beispiel. es soll farben mässig möglichst dynamisch sein ^^

3_of_8 19. Jun 2006 17:20

Re: Farben im RichEdit (schon wieder ^^)
 
Kann es auch. Wenn du einmal das System kennst.

jfheins 19. Jun 2006 17:25

Re: Farben im RichEdit (schon wieder ^^)
 
Also ich hab' mal diesen Code geschrieben, der ein Log in ein Richedit schreibt und abhängig von EventType färbt ...
(ist aus meinem SmallFTP Programm)
Delphi-Quellcode:
procedure TForm1.AddToLog (Sender: TObject; EventText: String; EventType: TEventType);
var
  SelStart: Cardinal;
  Str: String;
begin
  if EventType = etError then MessageBeep(MB_ICONERROR);

  if (EventType = etCommand) and (copy (EventText, 1, 4) = 'PASS') then
    EventText := 'PASS ' + StringOfChar ('*', length (EventText) - 5);

  SelStart := length (Log.Text);

  Str := LogPrefix[EventType] + ' ' + EventText + ' ' + LogSuffix[EventType];
  Log.Lines.Add(Str);

  if (EventType <> etCommand) or (copy (EventText, 1, 4) <> 'PASS') then LogText := LogText + Str + #13#10;

  Log.SelStart := SelStart;
  Log.SelLength := Length (Str);
  Log.SelAttributes.Color := LogColors[EventType];

  Log.SelStart := SelStart;
  Log.SelLength := Length (LogPrefix[EventType]);
  Log.SelAttributes.Style := [fsBold];

  Log.SelStart := (length (Log.Text) - 2) - length (LogSuffix[EventType]);
  Log.SelLength := Length (LogSuffix[EventType]);
  Log.SelAttributes.Style := [fsBold];

  Log.Perform(WM_VSCROLL, SB_BOTTOM,0);
end;
Zeile 8/9 ist ... nur, damit ich nicht alle Passwörter bekomme, wenn mir das Log zugeschickt wird (man ist ja nett :mrgreen: )

Wichtig sind für dich soweit isch das jetzt gesehen hab', Zeilen 18-20:

Du merkst dir die länge des Texts im Richedit, fügst deinen Text hinzu und kannst dann den hinzugrfügten Text färben.

Green 19. Jun 2006 17:31

Re: Farben im RichEdit (schon wieder ^^)
 
also ich hab mal folgenden text in Word pad geschrieben

hallo hallo

ergebnis:
Code:
{\rtf1\ansi\deff0{\fonttbl{\f0\fswiss\fcharset0 Arial;}}
{\colortbl ;\red255\green0\blue0;}
{\*\generator Msftedit 5.41.15.1503;}\viewkind4\uc1\pard\lang1031\f0\fs20 hallo \cf1 hallo\cf0\par
}
da blick ich nit sooo durch

€: wenn ich des in nen rich edit einlad dann funzt des au ^^

des kann doch nit sein des des sooo schwer is ...

stz 19. Jun 2006 18:54

Re: Farben im RichEdit (schon wieder ^^)
 
Hallo zusammen,
ich finde das hier alles furchtbar kompliziert...

Wenn ich nicht gerade völlig auf dem Schlauch stehe hilft dir folgendes:

Delphi-Quellcode:
procedure TextAusgabe(RTE: TRichEdit; Text: String);
var
  i: Integer;
  rot: Bool;
begin
  rot := False;
  RTE.Clear;
  for i := 1 to Length(Text) do
  begin
    if Text[i] = #3 then
      rot := not rot
    else
    begin
      if rot then
        RTE.SelAttributes.Color := clRed
      else
        RTE.SelAttributes.Color := clBlack;
      RTE.SelText := Text[i];
    end;
  end;
end;

Green 19. Jun 2006 19:39

Re: Farben im RichEdit (schon wieder ^^)
 
tja das problem is das seltext in dem Fall Schei**e baut...beim ersten mal geht das noch, also er macht die farbe richtig, aber wenn ich in der nächsten zeile nochmal seltext verwende, addet er denn farbigen text an die zeile davor, und den nicht farbigen in eine neue zeile, aber wenn du genau hinguckst, siehst du das die eine von den beiden versionen von mir praktisch mit deiner identisch ist...

stz 19. Jun 2006 19:57

Re: Farben im RichEdit (schon wieder ^^)
 
Was für Schei**e?? Ich ruf das z.B. so auf
Delphi-Quellcode:
TextAusgabe(RichEdit1, 'schwarz'#3'rot'#13#10'rot'#3'schwarz'#3'rot');
und bin ganz zufrieden

Green 19. Jun 2006 20:06

Re: Farben im RichEdit (schon wieder ^^)
 
so jetzt mach das mal mehrmals, also mach das so wie dus gemacht hast und das gleiche in ner neuen zeile...

dann siehstes

stz 19. Jun 2006 20:10

Re: Farben im RichEdit (schon wieder ^^)
 
Ich seh immer noch keinen Fehler. Wie produzierst du denn eine neue Zeile?

Green 19. Jun 2006 20:12

Re: Farben im RichEdit (schon wieder ^^)
 
mit lines.add oder lines.append

so hab ichs probiert (ProcColoredText2) is deine funktion
Delphi-Quellcode:
  ProcColoredText2('hallo'+#3+'hallo'+#3+'hallo',RichEdit1);
  RichEdit1.Lines.Append('');
  ProcColoredText2('hallo'+#3+'hallo'+#3+'hallo',RichEdit1);
mfG Green

Green 19. Jun 2006 20:25

Re: Farben im RichEdit (schon wieder ^^)
 
aber noch mal ne frage zu dem mit dem RichText:

wenn ich den aus einer Datei Lad dann geht des, aber per Lines.add geht des irgendwie nit

stz 19. Jun 2006 21:04

Re: Farben im RichEdit (schon wieder ^^)
 
mach das doch mal so:
Delphi-Quellcode:
ProcColoredText2('hallo'+#3+'hallo'+#3+'hallo',RichEdit1);
RichEdit1.SelText := #13#10; //statt RichEdit1.Lines.Append('');
ProcColoredText2('hallo'+#3+'hallo'+#3+'hallo',RichEdit1);
dann geht es. Wenn man zwischendurch an der Lines bzw. Text-Eigenschaft was ändert verhält sich TRichEdit oft - sagen wir mal - nicht so, wie man es erwartet. Aber man kann ja so auch eine neue Zeile einfügen...

//Edit: Irgendwie waren ja noch gar nicht alle Fragen beantwortet:
Zitat:

wenn ich den aus einer Datei Lad dann geht des, aber per Lines.add geht des irgendwie nit
Wenn du was aus einer Datei lädst, lädst du aus der ja auch die besagten RichEdit-Steuercodes (die du weiter oben so schön undurchsichtig geposted hast) und per Lines.Add fügst du die nicht mit ein (denke ich doch mal ganz stark). Also geht das ganze schief.
Wenn du die Eigenschaft SelText veränderst, verhält sich RichEdit so, als würde ein User den Text eingegeben haben, d.h. die bestehenden Formatierungen werden weiterhin verwendet. Deshalb klappt es, wenn du den Zeilenumbruch auch per SelText einbaust. (s.o.)
(Hab ich mir so zusammengereimt - Wiederspruch erwünscht, söllte ich voll daneben liegen :wink: )

Green 19. Jun 2006 21:17

Re: Farben im RichEdit (schon wieder ^^)
 
also so den text den du gechrieben hast geht nit:
Delphi-Quellcode:
ProcColoredText2('hallo'+#3+'hallo'+#3+'hallo',RichEdit1);
RichEdit1.SelText := #13#10; //statt RichEdit1.Lines.Append('');
ProcColoredText2('hallo'+#3+'hallo'+#3+'hallo',RichEdit1);
da erhalte ich nur EINE Zeile

achso und des mit den steuercodes, das is ganz normaler txt, da sind keine steuercodes

Khabarakh 19. Jun 2006 21:58

Re: Farben im RichEdit (schon wieder ^^)
 
Zitat:

Zitat von Green
achso und des mit den steuercodes, das is ganz normaler txt, da sind keine steuercodes

Und was hast du dann oben selbst gepostet?
stz hat schon Recht, der User sieht natürlich nur den formatierten Inhalt und kann auch nur solchen eingeben - es sei denn, PlainText ist aktiviert.
http://msdn.microsoft.com/library/de...ml/rtfspec.asp

Green 19. Jun 2006 22:49

Re: Farben im RichEdit (schon wieder ^^)
 
aber wenn ich jetzt diese RichText Steuercodes verwenden will, dann muss ich die ja irgenwdwie in mein RichEdit reinmachen. wenn ich die txt mit den Steuercodes lade, dann geht ja, aber wenn ich die Steuercodes jetzzt hinzufüge dann parst der die nit, waurm auch, aber wie mache ich ihm denn jetzt klar das er das was ich ihm gebe umwandeln soll:
Code:
{{\colortbl ;\red255\green0\blue0;\red0\green255\blue0;}
hallo \cf1hallo \cf2hallo\cf0\par
}
steht in meiner .txt
jetzt lade ich diese txt und siehe da, ich erhalte nur hallo hallo hallo in schwarz, rot und grün.
jetzt nehme ich den gleichen text und adde ihn in das rich edit, per RichtEdit.Lines.add, oder append, oder lines[x], nix davon geht.
kann mir jetzt jemand sagen wie ich jetz den text umgewandelt krieg?

stz 20. Jun 2006 10:25

Re: Farben im RichEdit (schon wieder ^^)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Green
also so den text den du gechrieben hast geht nit:
Delphi-Quellcode:
ProcColoredText2('hallo'+#3+'hallo'+#3+'hallo',RichEdit1);
RichEdit1.SelText := #13#10; //statt RichEdit1.Lines.Append('');
ProcColoredText2('hallo'+#3+'hallo'+#3+'hallo',RichEdit1);
da erhalte ich nur EINE Zeile

So, nachdem ich da jetzt die Nacht drüber geschlafen habe, ist mir immer noch nicht so ganz klar, wie du das schaffst. Ich hänge jetzt an diesen Beitrag mal das ganze Projekt an, so wie das bei mir wunderbar funktioniert. Ich habe jetzt statt
Delphi-Quellcode:
#13#10
Delphi-Quellcode:
sLineBreak
verwendet. Damit hast du ab Delphi6 zu jedem OS den passenden Zeilenumbruch. Das sollte jetzt bestens funktionieren...


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:04 Uhr.

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