Delphi-PRAXiS
Seite 1 von 2  1 2      

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 15: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 15:22

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

Green 19. Jun 2006 18: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 18: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 18: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 18:20

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

jfheins 19. Jun 2006 18: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 18: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 19: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 20: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...


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:49 Uhr.
Seite 1 von 2  1 2      

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 by Thomas Breitkreuz