![]() |
Einfaches Memo mit einfachem Einfärben von Wörtern?
Hallo! Weiß jemand, wie man einem normalen TMemo beibringt, dass er einzelne Wörter in roter Schrift oder mit gelbem Hintergrund darstellt? Beispiel: In dem Text "Das ist ein schöner Text" soll er die Wörter "ist" und "Text" mit der gleichen Farbe hervorheben. Mehr soll er nicht können müssen.
Es gibt zwar mehrere hoch-entwickelte Memos mit Syntax-Highlighting, aber das sind allesamt "schwere Brocken" mit Fähigkeiten, die ich für diesen speziellen Einsatzzweck gar nicht brauche. Ich möchte nicht, dass es mein Programm um mehrere zig oder gar hunderte KB aufbläht. |
AW: Einfaches Memo mit einfachem Einfärben von Wörtern?
Kurz und knapp, das geht nicht.
Nimm als einfachste Variante ein TRichedit, ggf. könntest Du auch mit HTML was machen und den Webbrowser für die Anzeige mißbrauchen. Gruß K-H |
AW: Einfaches Memo mit einfachem Einfärben von Wörtern?
Die Anforderung hört sich nach "Wasch mich, aber mach mich nicht nass".
Willest du nur Anzeige haben oder auch Editieren? Evt. ein ListView/Listbox mit Ownerdraw mißbrauchen. |
AW: Einfaches Memo mit einfachem Einfärben von Wörtern?
Zitat:
|
AW: Einfaches Memo mit einfachem Einfärben von Wörtern?
Dann vllt. selber machen?
TCanvas bietet alls was Du benötigst. Gruß K-H |
AW: Einfaches Memo mit einfachem Einfärben von Wörtern?
Das mit TRichEdit war ein guter Tipp. Ich habe jetzt das hier geschrieben, funktioniert sehr gut:
Delphi-Quellcode:
procedure ColorWords(ARichEdit: TRichEdit; AWordsStr: string);
var SP, TextLength: Integer; i: Integer; sl: TStringList; procedure ColorAWord(const ASearchStr: string); begin SP := ARichEdit.FindText(ASearchStr, 0, TextLength, []); while SP <> -1 do begin ARichEdit.SelStart := SP; ARichEdit.SelLength := Length(ASearchStr); ARichEdit.SelAttributes.Color := clRed; SP := ARichEdit.FindText(ASearchStr, SP + Length(ASearchStr), TextLength, []); end; end; begin TextLength := Length(ARichEdit.Lines.Text); sl := TStringList.Create; try sl.Text := StringReplace(AWordsStr, ' ', #13#10, [rfReplaceAll]); for i := 0 to sl.count - 1 do ColorAWord(sl[i]); finally sl.Free; end; end; procedure TForm1.btnColorWordsClick(Sender: TObject); begin ColorWords(RichEdit1, 'ein Text'); end; |
AW: Einfaches Memo mit einfachem Einfärben von Wörtern?
Nur mal ein Beispiel, was es so in den letzten vielen Jahren "Neues" im Delphi gab.
SplitString, ReplaceStr (k.A. warum sorum, aber dafür ohne die Flags), For-In
Delphi-Quellcode:
bzw.
begin
TextLength := Length(ARichEdit.Text); for S in SplitString(AWordsStr, ' ') do ColorAWord(S); end;
Delphi-Quellcode:
begin
TextLength := Length(ARichEdit.Text); // TextLength := ARichEdit.Text.Length; for S in SplitString(AWordsStr, ' ') do begin SP := ARichEdit.FindText(ASearchStr, 0, TextLength, []); while SP <> -1 do begin ARichEdit.SelStart := SP; ARichEdit.SelLength := Length(S); ARichEdit.SelAttributes.Color := clRed; SP := ARichEdit.FindText(ASearchStr, SP + Length(S) {SP + S.Length}, TextLength, []); end; end; end; |
AW: Einfaches Memo mit einfachem Einfärben von Wörtern?
Danke für die Hinweise!
TextLength := ARichEdit.Text.Length; funktioniert aber nicht. (E2018 Record, object or class type required) |
AW: Einfaches Memo mit einfachem Einfärben von Wörtern?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:41 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