Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi ListView TopItem festlegen (https://www.delphipraxis.net/115010-listview-topitem-festlegen.html)

cs.rumpelstilzchen 4. Jun 2008 11:56


ListView TopItem festlegen
 
Hallo Leute, ich verzweifel gerade... :wall:

Ich möchte das erste angezeigte Element einer ListView (vsReport) steuern.

Dazu setze ich - wie in der Hilfe beschrieben - das TopItem:
Delphi-Quellcode:
LvIrgendwas.TopItem := LvKunden.Items[ScrollPos]
... und bekomme die Meldung:
Delphi-Quellcode:
 [Fehler] E2129 Einer Nur-Lesen Eigenschaft kann kein Wert zugewiesen werden
Originaltext aus der Online-Hilfe:
Zitat:

Mit TopItem können Sie das oberste sichtbare Element der Listenansicht ermitteln und daraus den Umfang eines vorangegangenen Bildlaufs ablesen. Eine Wertzuweisung an TopItem ermöglicht außerdem einen Bildlauf in der Ansicht.

Die Eigenschaft TopItem ist nur implementiert, wenn ViewStyle auf vsReport oder vsList gesetzt ist. Bei vsIcon und vsSmallIcon können Sie mit der Eigenschaft ViewOrigin die Position in der Listenansicht bestimmen.
Bin ich zu blöd oderwieoderwas??? :roll:

Bbommel 4. Jun 2008 12:04

Re: ListView TopItem festlegen
 
Moin,

ich würde mal pauschal behaupten, dass der Compiler da durchaus recht hat. Aus der ComCtrls-Unit der paasende Eintrag zu ListView:
Delphi-Quellcode:
    property TopItem: TListItem read GetTopItem;
Da gibts keinen setter, also ist das Dingen wohl tatsächlich nur lesend.

Hilft dir vielleicht nicht, aber dann zweifelst du wenigstens nicht an dir selbst. ;)

Bis denn
Bommel

toms 4. Jun 2008 12:04

Re: ListView TopItem festlegen
 
Hallo

Eine Google Suche hat folgende Funktion hervor gebracht:

Delphi-Quellcode:
procedure ListViewSetTopItem(ListView: TListView; ItemIndex: Integer);
var
  Difference, ItemHeight: Integer;
begin
  if not (ListView.ViewStyle = vsReport) then
    Exit;
  if (ItemIndex < 0) or (ListView.Items.Count = 0) or
      (ItemIndex > ListView.Items.Count - 1) then
    raise EInvalidOperation.CreateFmt(SPropertyOutOfRange, ['TopItem']);
  with ListView do
  begin
    Difference := TopItem.Index - Items.Item[ItemIndex].Index;
    with Items.Item[0].DisplayRect(drBounds) do
      ItemHeight := Top - Bottom;
    Scroll(0, Difference *  ItemHeight);
  end;
end;


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