AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign RichEdit markiert nicht mehrere unterschiedliche Einträge.
Thema durchsuchen
Ansicht
Themen-Optionen

RichEdit markiert nicht mehrere unterschiedliche Einträge.

Ein Thema von Bjoerk · begonnen am 30. Jun 2014 · letzter Beitrag vom 1. Jul 2014
Antwort Antwort
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#1

AW: RichEdit markiert nicht mehrere unterschiedliche Einträge.

  Alt 1. Jul 2014, 08:11
Wenn du magst kannst du ja mal das durchlaufen lassen und kur Bescheid geben ob das auch für > D2007 jeht?. Thanx!
Delphi-Quellcode:
type
  TForm1 = class(TForm)
    RichEdit1: TRichEdit;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    FSelList: TStringList;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure Highlight(RichEdit: TRichEdit;
  SelList: TStrings; SelColor: TColor; SelStyle: TFontStyles);
var
  I, J, Pos, Index: Integer;
begin
  RichEdit.Lines.BeginUpdate;
  try
    Index := 0;
    for I := 0 to RichEdit.Lines.Count - 1 do
    begin
      for J := 0 to SelList.Count - 1 do
      begin
        Pos := PosEx(SelList[J], RichEdit.Lines[I], 1);
        while Pos > 0 do
        begin
          RichEdit.SelStart := Index + Pos - 1;
          RichEdit.SelLength := Length(SelList[J]);
          RichEdit.SelLength := Length(SelList[J]);
          RichEdit.SelAttributes.Color := SelColor;
          RichEdit.SelAttributes.Style := SelStyle;
          Pos := PosEx(SelList[J], RichEdit.Lines[I], Pos + 1);
        end;
      end;
      Index := Index + Length(RichEdit.Lines[I]) + Length(sLineBreak);
    end;
  finally
    RichEdit.Lines.EndUpdate;
    RichEdit.SelStart := 0;
    RichEdit.SelLength := 0;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  RichEdit1.Font.Color := clLtGray;

  RichEdit1.Lines.Add('+++ Liveticker Deutschland gegen Algerien +++');
  RichEdit1.Lines.Add('Löw ist restlos bedient - wie reagiert er?');
  RichEdit1.Lines.Add('Deutschland, der klare Favorit im WM-Achtelfinale? Denkste!');
  RichEdit1.Lines.Add('Algerien ist überlegen, hat viele Großchancen.');
  RichEdit1.Lines.Add('Deutschland spielt unsicher und konfus.');
  RichEdit1.Lines.Add('Löw ist restlos bedient - hat er ist einen Plan?');
  RichEdit1.Lines.Add('Verfolgen Sie die Partie im Liveticker.');

  FSelList.Clear;
  FSelList.Add('Löw');
  FSelList.Add('ist');
  FSelList.Add('Liveticker');

  Highlight(RichEdit1, FSelList, clBlack, [fsBold]);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  FSelList := TStringList.Create;
  // RichEdit1.HideSelection := false;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  FSelList.Free;
end;
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.660 Beiträge
 
Delphi 12 Athens
 
#2

AW: RichEdit markiert nicht mehrere unterschiedliche Einträge.

  Alt 1. Jul 2014, 08:26
Unter XE laufen lassen (siehe Screenshot).
Angehängte Grafiken
Dateityp: png RichEdit.png (8,9 KB, 13x aufgerufen)
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: RichEdit markiert nicht mehrere unterschiedliche Einträge.

  Alt 1. Jul 2014, 09:12
Gut. Dann ist Length(sLineBreak) um 1 falsch (zu groß). Was ist denn bei dir Length(sLineBreak)?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.660 Beiträge
 
Delphi 12 Athens
 
#4

AW: RichEdit markiert nicht mehrere unterschiedliche Einträge.

  Alt 1. Jul 2014, 09:15
Erwartungsgemäß 2. Allerdings glaube ich, dass das RichEdit in Delphi XE ziemlich verbuggt ist, ich hatte mit ähnlichen Routinen auch schon schier unlösbare Probleme.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: RichEdit markiert nicht mehrere unterschiedliche Einträge.

  Alt 1. Jul 2014, 09:47
Ok. Danke. Ich glaub ich wird mir erst dann eine neue Delphiversion holen wenn es einen Compilerschalter $Ansistrings gibt.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.660 Beiträge
 
Delphi 12 Athens
 
#6

AW: RichEdit markiert nicht mehrere unterschiedliche Einträge.

  Alt 1. Jul 2014, 09:54
Also im Klartext nie
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.396 Beiträge
 
Delphi 12 Athens
 
#7

AW: RichEdit markiert nicht mehrere unterschiedliche Einträge.

  Alt 1. Jul 2014, 13:28
Erwartungsgemäß 2. Allerdings glaube ich, ...
Es ist ja nicht so, als wenn ich nicht schon gesagt hätte, was dort mit den Zeilenumbrüchen los ist. (seit mindestens D2009)
Emba hat da vor 5 Jahren Mist gebau und es bis jetzt nicht für Wichtig erachtet das mal zu reparieren.

Und nein, ich kann eh grade nicht Testen und warum sollen wir uns erst das Testprogramm (GUI) zusammenstellen, nur um das zu testen, was du auch selber machen kannst.

- den Code debuggen und schauen was da passiert

und ansonsten eventuell auch noch (nach und nach)
- BeginUpdate/EndUpdate auskommentieren und schauen was passiert
- das :=0 am Ende auskommentieren und schauen ob nun das Letzte Markiert ist
- die Schleife früher abbrechen (jeweils nach X Durchläufen) und schauen was was da nun am Ende markiert ist (oder Repaint+Sleep und schauen was zwischendurch markiert ist)
- ...
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 1. Jul 2014 um 13:33 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:06 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