![]() |
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:
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...
{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; 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 |
Re: Farben im RichEdit (schon wieder ^^)
Das geht auch so nicht. Informier dich mal über RichText-Steuercodes.
|
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 )
|
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. |
Re: Farben im RichEdit (schon wieder ^^)
naja, rot war nur nen beispiel. es soll farben mässig möglichst dynamisch sein ^^
|
Re: Farben im RichEdit (schon wieder ^^)
Kann es auch. Wenn du einmal das System kennst.
|
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:
Zeile 8/9 ist ... nur, damit ich nicht alle Passwörter bekomme, wenn mir das Log zugeschickt wird (man ist ja nett :mrgreen: )
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; 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. |
Re: Farben im RichEdit (schon wieder ^^)
also ich hab mal folgenden text in Word pad geschrieben
hallo hallo ergebnis:
Code:
da blick ich nit sooo durch
{\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 } €: wenn ich des in nen rich edit einlad dann funzt des au ^^ des kann doch nit sein des des sooo schwer is ... |
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; |
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. |
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