![]() |
Re: alle Strings aus Edit.Text in der ListBox farbig darstel
Moin Holger,
wenn ich es so mache
Delphi-Quellcode:
wird alles, was sich in Edit2 befindet, und in der auszugebenden ListBoxzeile steht rot geschrieben
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; |
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:
zum Teil stammt der Code aus vorhergegangenen Beiträgen.
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; Achtung: Listbox.style auf lbOwnerDrawFixed setzen. Rainer |
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. |
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