Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   ListView Scroll (https://www.delphipraxis.net/173224-listview-scroll.html)

epm5 13. Feb 2013 10:56

Delphi-Version: 5

ListView Scroll
 
Hi,

zur Anzeige von Stringlisten verwende ich eine ListView.
In dieser LV soll aber nichts markiert werden können (nur anzeigen).

Ist LV.enable := true kann der User den Itemindex per Mausklick verändern. Das soll er aber nicht.
Ist LV.enable := false kann der User den Itemindex per Mausklick nicht verändern, aber u.U. auch nicht mehr alles sehen, da Scrollen nicht mehr funktioniert.
Der User soll in der LV nichts markiern aber trotzdem scrollen und idealerweise auch die Breite der Spalten verändern können. Gibt es dafür eine Lösung?

Gollum 13. Feb 2013 11:44

AW: ListView Scroll
 
Hallo,

evtl. HideSelection:=True oder wenn das nicht hilft, das Ereignis OnChanging überschreiben und AllowChange:=False setzen.

epm5 14. Feb 2013 13:11

AW: ListView Scroll
 
dadurch ( OnChanging ) verschwindet bei mir der Inahlt der ersten Spalte ( Caption ) und ich kann auch nichts mehr per Programm an der LV ändern.
Das soll aber möglich sein - nur der User soll nichts selektieren können. Gibt es da noch einen Weg?

Volker Z. 14. Feb 2013 13:45

AW: ListView Scroll
 
Hallo,

versuch es mal mit
Delphi-Quellcode:
procedure TForm4.ListView1Changing(Sender: TObject; Item: TListItem; Change: TItemChange; var AllowChange: Boolean);
begin
  AllowChange := Change <> ctState
end;
Gruß

epm5 14. Feb 2013 14:44

AW: ListView Scroll
 
Hallo Volker,

danke, jetzt sehe ich wieder den Inhalt der ersten Spalte, aber leider wird immer noch jeder Versuch den ItemIndex per Programm zu verändern um durch die Liste zu wandern mit einer

Exception der Klasse EAccessViolation quittiert.

Sobald ich deinen Vorschlag

if Change <> ctState then
begin
AllowChange := true;
end else begin
AllowChange := false;
end;

auskommentiere, kann ich den ItemIndex verändern aber der User leider auch wieder einen beliebigen Eintrag markieren.

Bin dankbar für jeden weiteren Vorschlag..

Klaus

DeddyH 14. Feb 2013 14:48

AW: ListView Scroll
 
Definier Dir doch ein privates Boolean-Feld des Formulars, nennen wir es mal FChangedByCode oder so. Wenn Du also im Code den ItemIndex setzen willst, setzt Du dieses Feld auf true, machst Deine Änderungen und setzt es wieder auf false. Im EventHandler musst Du dann natürlich das Feld noch zusätzlich auswerten.
Delphi-Quellcode:
procedure TForm4.ListView1Changing(Sender: TObject; Item: TListItem; Change: TItemChange; var AllowChange: Boolean);
begin
  AllowChange := (Change <> ctState) or FChangedByCode;
end;
Ungetestet, sollte aber funktionieren.

epm5 14. Feb 2013 16:25

AW: ListView Scroll
 
Danke, damit geht es wie gewünscht
jetzt muss ich nur noch verstehen weshalb...
AllowChange := Change <> ctState ???

Volker Z. 14. Feb 2013 17:21

AW: ListView Scroll
 
Hallo,

Zitat:

jetzt muss ich nur noch verstehen weshalb...
AllowChange := Change <> ctState ???
Wenn eine der Eigenschaften Cut, Focused oder Selected eines Listeneintrags geändert wird, dann wird - falls vorhanden - ein OnChanging-Event getriggert mit Change = ctState

Gruß


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:46 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