![]() |
ListView-Eintrag selektieren ohne ListView-Fokus
Hi,
bisschen seltsamer Titel, nur konnte ich das so kurz nicht beschreiben. :stupid: Die hier relevanten Komponenten sind ein TEdit und eine TListView. Das Edit soll eine Schnellsuche ermöglichen. Ich tippe also etwas in das Edit ein und "live" wird in der ListView in einer bestimmten Spalte nach diesem Suchwort gesucht. Ich möchte die erste Zeile, die in der Spalte mit dem Suchwort beginnt, während ich ins Edit schreibe, hervorheben. Ich habe es so versucht, doch sehe ich den selektierten Eintrag nicht, wenn die ListView keinen Fokus besitzt:
Delphi-Quellcode:
Und keine Angst, mehr als 200 Einträge werden nicht in der ListView vorkommen, also von der Performance her ist das in Ordnung.
procedure TForm1.EditSearchChange(Sender: TObject);
var i: Integer; begin for i := 0 to ListView1.Items.Count - 1 do begin if Pos(AnsiUpperCase(EditSearch.Text), ListView1.Items[i].SubItems[0]) = 1 then begin ListView1.ItemIndex := i; ListView1.Items[i].Selected := true; break; end; end; end; Geht mein Vorhaben irgendwie oder ist das so nicht möglich? Denn beispielsweise im Windows MediaPlayer 10 gibt es ja auch diese Schnellsuche und da geht das irgendwie. [edit=Sharky] Mfg, Sharky[/edit] |
Re: ListView-Eintrag selektieren ohne ListView-Fokus
suchst du TListview.HideSelection:=false;?
Gruß Frank |
Re: ListView-Eintrag selektieren ohne ListView-Fokus
Hallo Frank
Zitat:
Wieso stell ich immer nur so primitive Fragen ... :lol: Der Eintrag ist nun jedoch Grau und nicht Dunkelblau. geht das auch irgendwie, oder muss ich mich mit dem Grau zufrieden geben? Grau ginge auch, nur Blau fände ich schöner. |
Re: ListView-Eintrag selektieren ohne ListView-Fokus
also mit dem blau ist das net so einfach... (es sei denn, du gibst dem listview den focus ;) )
du müsstest den eintrag dann selber malen, wenn es überhaupt möglich ist bei deiner delphi-version. Stichwort OwnerDraw Gruß Frank |
Re: ListView-Eintrag selektieren ohne ListView-Fokus
Zitat:
|
Re: ListView-Eintrag selektieren ohne ListView-Fokus
Hai Matze,
ich hatte eben etwas Zeit ;-) Knalle doch mal aus Spass diesen Code in das OnOwnerDrawItem deines ListViews:
Delphi-Quellcode:
uses
CommCtrl; const LVHighliterColor: TColor = clAqua; LVHighliterColorOnFocused: TColor = clBlue; procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView; Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean); var ColumnRect: TRect; TextRect: TRect; Drawstate: Cardinal; SubitemIndex: Integer; begin Drawstate := 0; DefaultDraw := False; if TListView(Sender).ViewStyle = vsReport then begin with (sender as TListView) do begin if (Item.Selected) then begin if (Sender.Focused) then begin Canvas.Pen.Color := LVHighliterColorOnFocused; Canvas.Brush.Color := LVHighliterColorOnFocused; end else begin Canvas.Pen.Color := LVHighliterColor; Canvas.Brush.Color := LVHighliterColor; end; end else begin Canvas.Pen.Color := clWhite; Canvas.Brush.Color := clWhite; end; ListView_GetItemRect(Handle, Item.Index, ColumnRect, LVIR_BOUNDS); Canvas.Rectangle(ColumnRect); ListView_GetItemRect(Handle, Item.Index, TextRect, LVIR_LABEL); DrawText(Canvas.Handle, Pchar(Item.Caption), Length(Item.Caption), TextRect, Drawstate); for SubitemIndex := 1 to Columns.Count - 1 do begin ListView_GetSubItemRect(Handle, Item.Index, SubitemIndex, LVir_Label, @textrect); DrawText(Canvas.Handle, Pchar(Item.SubItems[SubitemIndex - 1]), Length(Item.SubItems[SubitemIndex - 1]), TextRect, Drawstate); end; end; end; end; |
Re: ListView-Eintrag selektieren ohne ListView-Fokus
Hallo Stephan,
herzlichen Dank! Nun weiß ich, wie man so etwas angehen kann. Das funktioniert, wie es sollte. Mein Problem war, dass ich die Schriftfarbe nicht gesetzt habe, denke ich. Ich hatte alles übermalt. :stupid: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:05 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 by Thomas Breitkreuz