![]() |
einzelne Items in ListBox färben
Liste der Anhänge anzeigen (Anzahl: 1)
hallo,
Ich habe in meinem Programm ein Suchfeld, in dem ich ein Wort eingeben kann wonach es dann in der ListBox sucht. Nun würde ich gerne den Linien, in denen das Wort vorhanden ist, einen anderen Hintergrund geben. Mit dem Canvas habe ich es bis jezt nur geschafft, alle Items zu färben. Ich habe bis jezt schon viele Threads gelesen, bin aber immer noch nicht darauf gekommen. Hier die zwei Ausschnitte meines Programmes mit der Such Funktion und der OnDraw Item Procedure:
Delphi-Quellcode:
[edit=sakura] [delphi]Tags Mfg, sakura[/edit]
// Mark Items within KeyWord
procedure TFmLog.KeyWordSearchM; var nPos : integer; stKey : string; nIdx : integer; begin try // Disable Update SendMessage(FlbOutput.Handle, WM_SETREDRAW, 0, 0); // Get Search Text stKey := FedSearch.Text; // Process all ListBox Items for nIdx := (FlbOutput.Items.Count - 1) downto 0 do begin // Check Item for Search String nPos := Pos(stKey, FlbOutput.Items[nIdx]); // Delete Lines without Search Text if (nPos <> 0) then FlbOutput.Selected[nIdx] := True; end; finally // ReEnable Update & Repaint List SendMessage(FlbOutput.Handle, WM_SETREDRAW, 1, 0); FlbOutput.Repaint; end; end; { ********************************************* ********************************************* } procedure TFmLog.OnDrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState); var TopDif: Integer; // Gleicht die Höhendifferenz aus begin with (Control as TListbox) do begin Canvas.Brush.Color := $00FF7777; //Hintergrundfarbe Canvas.Font.Color := clBlack; //Schriftfarbe TopDif := (ItemHeight div 2) - (Canvas.TextHeight(#32) div 2); Canvas.TextRect(Rect, Rect.Left, Rect.Top + TopDif, Items[Index]); end; end; |
Re: einzelne Items in ListBox färben
Du hast keine Kontrolle darüber, für welchen Item-Index das Event OnDrawItem gefeuert wird.
Du musst die Hintergrundfarbe innerhalb von OnDrawItem abfragen und zur Anwendung bringen.
Delphi-Quellcode:
Nachdem du das Suchwort geändert hast, musst du die Liste neu zeichen:
procedure TFmLog.OnDrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState); var TopDif: Integer; // Gleicht die Höhendifferenz aus begin with (Control as TListbox) do begin Canvas.Brush.Color := GetBackColor(Items[Index]); // <=== Canvas.Font.Color := clBlack; //Schriftfarbe TopDif := (ItemHeight div 2) - (Canvas.TextHeight(#32) div 2); Canvas.TextRect(Rect, Rect.Left, Rect.Top + TopDif, Items[Index]); end; end; function TFmLog.GetBackColor(const value:string):Tcolor; begin result := clWhite; if Pos(FedSearch.Text, value) >= 0 then Result := $00FF7777; end;
Delphi-Quellcode:
FlbOutput.RePaint;
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:27 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