AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

einzelne Items in ListBox färben

Ein Thema von Flinto · begonnen am 2. Nov 2004 · letzter Beitrag vom 2. Nov 2004
Antwort Antwort
Flinto

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

einzelne Items in ListBox färben

  Alt 2. Nov 2004, 09: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
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: einzelne Items in ListBox färben

  Alt 2. Nov 2004, 10:27
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:
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;
Nachdem du das Suchwort geändert hast, musst du die Liste neu zeichen:
FlbOutput.RePaint;
Andreas
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:20 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