Einzelnen Beitrag anzeigen

Flinto

Registriert seit: 28. Okt 2004
Ort: Schlieren
40 Beiträge
 
#1

einzelne Items in ListBox färben

  Alt 2. Nov 2004, 10:49
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]
Angehängte Dateien
Dateityp: pas unit1_496.pas (1,3 KB, 4x aufgerufen)
  Mit Zitat antworten Zitat