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 Einfaches Memo mit einfachem Einfärben von Wörtern? (https://www.delphipraxis.net/184413-einfaches-memo-mit-einfachem-einfaerben-von-woertern.html)

PeterPanino 24. Mär 2015 15:23

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.

p80286 24. Mär 2015 15:31

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

Bernhard Geyer 24. Mär 2015 15:34

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.

PeterPanino 24. Mär 2015 15:49

AW: Einfaches Memo mit einfachem Einfärben von Wörtern?
 
Zitat:

Zitat von Bernhard Geyer (Beitrag 1294656)
Willest du nur Anzeige haben oder auch Editieren?

Nur Anzeige.

p80286 24. Mär 2015 16:27

AW: Einfaches Memo mit einfachem Einfärben von Wörtern?
 
Dann vllt. selber machen?
TCanvas bietet alls was Du benötigst.

Gruß
K-H

PeterPanino 24. Mär 2015 16:42

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;

himitsu 24. Mär 2015 18:20

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:
begin
  TextLength := Length(ARichEdit.Text);
  for S in SplitString(AWordsStr, ' ') do
    ColorAWord(S);
end;
bzw.
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;

PeterPanino 24. Mär 2015 19:02

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)

himitsu 25. Mär 2015 00:57

AW: Einfaches Memo mit einfachem Einfärben von Wörtern?
 
Müsste aber funktionieren :gruebel:
siehe Delphi-Referenz durchsuchenTStringHelper.Length


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:49 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