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:
// 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;
[edit=sakura] [delphi]Tags Mfg, sakura[/edit]