AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi ListView-Eintrag selektieren ohne ListView-Fokus

ListView-Eintrag selektieren ohne ListView-Fokus

Ein Thema von Matze · begonnen am 18. Aug 2006 · letzter Beitrag vom 20. Aug 2006
Antwort Antwort
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#1

ListView-Eintrag selektieren ohne ListView-Fokus

  Alt 18. Aug 2006, 22:55
Hi,

bisschen seltsamer Titel, nur konnte ich das so kurz nicht beschreiben.

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:
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;
Und keine Angst, mehr als 200 Einträge werden nicht in der ListView vorkommen, also von der Performance her ist das in Ordnung.

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]
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#2

Re: ListView-Eintrag selektieren ohne ListView-Fokus

  Alt 18. Aug 2006, 23:02
suchst du TListview.HideSelection:=false;?

Gruß Frank
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: ListView-Eintrag selektieren ohne ListView-Fokus

  Alt 18. Aug 2006, 23:23
Hallo Frank

Zitat von _frank_:
suchst du TListview.HideSelection:=false;?
Ja das ist doch schonmal was, danke.
Wieso stell ich immer nur so primitive Fragen ...

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.
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#4

Re: ListView-Eintrag selektieren ohne ListView-Fokus

  Alt 18. Aug 2006, 23:29
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
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: ListView-Eintrag selektieren ohne ListView-Fokus

  Alt 18. Aug 2006, 23:34
Zitat von _frank_:
Stichwort OwnerDraw
Ach damit geht das. Da habe ich auch herumgespielt, nur wurde der Inhalt dann nicht mehr korrekt angezeigt. *g* Aber grau ist das auch ok. Ich danke dir.
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#6

Re: ListView-Eintrag selektieren ohne ListView-Fokus

  Alt 20. Aug 2006, 08:21
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;
Stephan B.
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: ListView-Eintrag selektieren ohne ListView-Fokus

  Alt 20. Aug 2006, 09:06
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.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 14:51 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