![]() |
TListView: Deselektieren verhindern?
Wie kann man bei einem TListView (ViewStyle: vsReport) verhindern, dass bei einem Klick auf die weiße Fläche unterhalb der Einträge das aktuell selektierte Item deselektiert und somit die Eigenschaft ItemIndex auf -1 gesetzt wird?
(Dies hat nichts mit der Eigenschaft HideSelection zu tun, die lediglich beim Verlust des Fokus des ListView die Selektion des selektierten Eintrages in grauer Farbe weiterhin anzeigt). |
Re: TListView: Deselektieren verhindern?
Zitat:
Nebenbei: Warum willst'e das? ^^ |
Re: TListView: Deselektieren verhindern?
Hallo Peter,
schau mal:
Delphi-Quellcode:
Grüße vom marabu
procedure TDemoForm.ListViewClick(Sender: TObject);
var item: TListItem; pt: TPoint; begin with Sender as TListView do begin pt := ScreenToClient(Mouse.CursorPos); item := GetItemAt(pt.X, pt.Y); if Assigned(item) then ShowMessage(item.Caption) else ItemIndex := ItemFocused.Index; end; end; |
Re: TListView: Deselektieren verhindern?
Mit diesem Code habe ich herausgefunden, dass bei der Selektion eines Items (wenn vorher ein anderes Item selektiert war), dieses Ereignis OnChanging 3 mal aufgerufen wird:
Delphi-Quellcode:
Aber ich habe noch nicht herausgefunden, wie man verhindern kann, dass ListView.ItemIndex auf -1 gesetzt wird.
procedure TForm1.ListViewChanging(Sender: TObject; Item: TListItem;
Change: TItemChange; var AllowChange: Boolean); begin if (Change = ctState) then Windows.Beep(Random(100) + 150, 300); end; |
Re: TListView: Deselektieren verhindern?
Zitat:
Zitat:
|
Re: TListView: Deselektieren verhindern?
Zitat:
Delphi-Quellcode:
procedure TForm1.ListViewClick(Sender: TObject);
var item: TListItem; pt: TPoint; begin with Sender as TListView do begin pt := ScreenToClient(Mouse.CursorPos); item := GetItemAt(pt.X, pt.Y); if (not Assigned(item)) and Assigned(ItemFocused) then begin ItemIndex := ItemFocused.Index; end; end; if ListView.ItemIndex = -1 then Windows.Beep(Random(100) + 150, 300); end; |
Re: TListView: Deselektieren verhindern?
Es gibt doch noch ein Problem: Aus verschiedenen Gründen bin ich darauf angewiesen, meine Verarbeitungen im Ereignis OnSelectItem durchzuführen (wobei ItemIndex nicht -1 sein soll). Da nun aber OnSelectItem VOR OnClick ausgeführt wird, ist ItemIndex beim Klick auf eine freie Fläche immer noch auf -1 und wird erst nachher im Ereignis OnClick korrigiert.
Wenn ich nun aber versuche, einen ähnlichen Mechanismus in OnSelectItem einzubauen, so funktioniert das leider nicht:
Delphi-Quellcode:
procedure TForm1.ListViewSelectItem(Sender: TObject; Item: TListItem;
Selected: Boolean); begin with ListView do begin if Assigned(ItemFocused) and (ItemIndex = -1) then begin ItemIndex := ItemFocused.Index; end; end; if ListView.ItemIndex = -1 then Windows.Beep(Random(100) + 150, 300); end; |
Re: TListView: Deselektieren verhindern?
Zitat:
Wieso muss die Verarbeitung im OnSelectItem sein? |
Re: TListView: Deselektieren verhindern?
Zitat:
|
Re: TListView: Deselektieren verhindern?
Ich weiß nicht, ob es funktioniert, aber versuch's doch einfach mal:
Sende dir im OnSelectItem mit PostMessage eine Nachricht. In der Empfangsroutine für die Nachricht kannst du dann hoffentlich auf ItemFocused prüfen... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:31 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-2025 by Thomas Breitkreuz