Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi alle Strings aus Edit.Text in der ListBox farbig darstellen (https://www.delphipraxis.net/76483-alle-strings-aus-edit-text-der-listbox-farbig-darstellen.html)

Christian Seehase 7. Sep 2006 00:00

Re: alle Strings aus Edit.Text in der ListBox farbig darstel
 
Moin Holger,

wenn ich es so mache

Delphi-Quellcode:
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);

const
  _aclFont : array [boolean] of TColor = (clBlack,clRed);

var
  lb   : TListBox;
  sLine : string;
  sOut : string;
  iPos : integer;
  iLeft : integer;

begin
  lb   := Control as TListBox;
  sLine := lb.Items[Index];
  iLeft := Rect.Left;
  while length(sLine) > 0 do begin
    iPos := pos(Edit2.Text,sLine);
    case iPos of
      0 : begin
        sOut := sLine;
        sLine := '';
      end;
      1 : begin
        sOut := copy(sLine,1,length(Edit2.Text));
        sLine := copy(sLine,length(Edit2.Text)+1,MaxInt);
      end;
      else begin
        sOut := copy(sLine,1,iPos-1);
        sLine := copy(sLine,iPos,MaxInt);
      end;
    end;
    lb.Canvas.Font.Color := _aclFont[iPos=1];
    lb.Canvas.TextOut(iLeft,Rect.Top,sOut);
    iLeft := lb.Canvas.PenPos.X;
  end;
end;
wird alles, was sich in Edit2 befindet, und in der auszugebenden ListBoxzeile steht rot geschrieben

runger 7. Sep 2006 06:33

Re: alle Strings aus Edit.Text in der ListBox farbig darstel
 
Hallo,

meine Auszubildenden meinen:
so kann man das Ganze verstehen und es funktioniert auch:
(das Ganze ist gedacht als Beispiel dafür wie man eine ganze Zeile einfärbt)

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    lb: TListBox;
    Edit: TEdit;
    procedure lbDrawItem(Control: TWinControl; Index: Integer; Rect: TRect;
      State: TOwnerDrawState);
    procedure EditChange(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    a:string;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.LBDrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);

var
  sValue : string;
  iLeft : integer;
  iTop  : integer;

begin
  // Auszugebenden Eintrag merken
  sValue := lb.Items[Index];
  // Startpunkt für die Ausgabe merken
  iLeft := Rect.Left;
  iTop  := Rect.Top;
  if lb.items[index]=a then lb.Canvas.Font.Color:=clred else lb.Canvas.Font.Color:=clblue;
  // Text ausgeben
  // (Dadurch wird auch gleich die Ausgabeposition neu gesetzt)
  lb.Canvas.TextOut(iLeft,iTop,svalue);
  iLeft := lb.Canvas.PenPos.X;
end;

procedure TForm1.EditChange(Sender: TObject);
begin
   a:=edit.Text;
   lb.Repaint;
end;
zum Teil stammt der Code aus vorhergegangenen Beiträgen.
Achtung: Listbox.style auf lbOwnerDrawFixed setzen.

Rainer

newuser01 7. Sep 2006 11:12

Re: alle Strings aus Edit.Text in der ListBox farbig darstel
 
Hallo DANKE für eure Hilfe und vor allem DANKE für die Geduld die ihr mit mir als Hobbyprogrammierer habt :)

Christian dein Code funktionier soweit sehr gut bis auf zwei kleine Fehler. Wenn in ListBox.items.string[0] zb: drin steht

"test1 test2 test3 test4 test5 test6"

und ich im Editfeld zu stehn habe "test1" dann wird auch "test1" in der Listbox gefunden und rot hervorgehoben. Wenn ich aber im Editfeld "Test1" zu stehn habe 1.Fehler also case sensitive dann findet er nichts mehr. Der zweite Fehler ist wenn ich im Editfeld zb: "test1 test3" zu stehn habe findet er es ebenfalls nicht mehr steht aber "test1 test2" drin findet er es wieder.

Christian zu dem Code möchte ich noch sagen das es mir nichts bringt ihn einfach zu kopieren. Ich möchte es auch verstehen könntest du ihn vielleicht auskommentieren ? Ich weiß ich NERVE :mrgreen:


Gruß
Holger


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:10 Uhr.
Seite 2 von 2     12   

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