Zum Inhalt springen

ListView Objekt


MichaK

Empfohlene Beiträge

hi,

meines wissens nach geht das nicht (kann mich aber auch irren).

ich glaube mich zu erinnern, dass ich das problem mal hatte und mit folgender loesung zurechgekommen bin:

die hoehe der betroffenen zeile auf 0 setzen

dann darf der user allerding auch nicht die moeglichkeit haben, die zeilen-hoehe zu aendern (allowUserResize oder so aehnlich).

kann ich aber bei bedarf gerne noch mal nachsehen...

hoffe, geholfen zu haben.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Stimmt, hab gerade mal nachgesehen, gibt es nicht... es gibt allerdings die Eigenschaft ListView, darin steht das ListView in dem das ListItem angezeigt wird. Meine Idee wäre jetzt mal das auf nil zu setzen. Es geht dabei wie gesagt nur um die Anzeige, das ListItem bleibt erhalten...

Wieder nur eine Idee, hab ich nicht probiert...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ok, hab mal kurz was programmiert. Hier kannst du ein gewähltes ListItem "verstecken". Ist nur mal kurz als Beispiel gedacht, du müsstest es noch selber ausarbeiten...



type

  THiddenItems = Array of TListItem;


  TForm1 = class(TForm)

    ListView1: TListView;

    Button1: TButton;

    Button2: TButton;

    Button3: TButton;

    ImageList1: TImageList;

    procedure Button1Click(Sender: TObject);

    procedure Button2Click(Sender: TObject);

    procedure Button3Click(Sender: TObject);

  private

    { Private-Deklarationen }

    HiddenArray: THiddenItems;

  public

    { Public-Deklarationen }

  end;


var

  Form1: TForm1;


implementation


{$R *.DFM}


// ListItem hinzufügen

procedure TForm1.Button1Click(Sender: TObject);

begin

  with ListView1.Items.Add do

  begin

    ImageIndex:= ListView1.Items.Count;

    Caption:= 'Item'+ IntToStr(ListView1.Items.Count);

  end;

end;


// selektiertes ListItem verstecken

procedure TForm1.Button2Click(Sender: TObject);

begin

  SetLength(HiddenArray, Length(HiddenArray)+1);

  HiddenArray[High(HiddenArray)]:= TListItem.create(ListView1.Items); // Das Item muss ein

// TListItems als Parent haben, nil geht nicht (gibt Fehler beim Zugriff)


  HiddenArray[High(HiddenArray)].Caption:= ListView1.Selected.Caption;

  HiddenArray[High(HiddenArray)].ImageIndex:= ListView1.Selected.ImageIndex;



  ListView1.Selected.Delete;

end;



// ListItems wieder anzeigen

// Es werden allebisher "versteckten" angezeigt

// es müsste noch aus dem Array gelöscht werden

procedure TForm1.Button3Click(Sender: TObject);

var i: Integer;

    item: TListItem;

begin

  for i:= 0 to High(HiddenArray) do

  begin

    item:= ListView1.Items.Add;


    item.Caption:= HiddenArray[i].Caption;

    item.ImageIndex:= HiddenArray[i].ImageIndex;


  end;

end;


end.


Das mit dem Array ist nur ein Beispiel, wenn du nur ein bestimmtes Item verstecken willst kannst du das auch mit einer Variable o.ä. machen. auch evtl. mehr Werte als Caption und ImageIndex...

Hoffe es hilft...

P.S. Mir fällt gerade auf, ich hab vergessen am Ende aufzuräumen, du müsstest alle von dir Erzeugten ListItems auch wieder freigeben... sollte eigentlich klar sein.

Link zu diesem Kommentar
Auf anderen Seiten teilen

hi,

ich habe mal nachgesehen, aber ich hatte das problem nicht bei einer listview sondern bei einem anderen control (spread). bei dem konnte man die zeilenhoehe festlegen...

allerding ist der ansatz von JesterDay ja nicht verkehrt...

du baust dir eine speicherstruktur (z.b. eine klasse mit den spalten der listview als eigenschaften oder ein array, oder ein type, ...) auf, in der du die elemente der listview ablegst. dabei sollte man die itemdata-eigenschaft der listitems (kann auch anders heissen) nutzen um diese in der speicherstruktur wiederzufinden.

dann gehst du mit einer schleife ueber alle element der listview und loeschst alle elemente, welche du nicht anzeigen moechtest. umgekehrt gehst du mit einer schleife ueber deine speichersturuktur und fuegst alle elemente wieder ein, welche du anzeigen moechtest.

den code dazu musst du aber schon selber schreiben... :-)

viel erfolg!

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 2 Wochen später...

Der gedanke ist zwar nicht schlecht Peregrin, aber was machst du wenn in dem Listview 2000 bis 3000 einträge stehen und du dazu noch eine Array erzeugen musst.

Um das Listview zu durchsuchen und das Array zuschreiben braucht der Rechner zu viel zeit.

Damit ist kein flüssiges Arbeiten mehr möglich.

need support - help me

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...