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/)
-   -   ListBox Item verstecken? (https://www.delphipraxis.net/211321-listbox-item-verstecken.html)

DieDolly 29. Aug 2022 19:23

ListBox Item verstecken?
 
Gibt es die Möglichkeit, Einträge einer ListBox zu verstecken? Sei es komplett verstecken oder nur die Höhe auf 1px einstellen. Geht sowas?

venice2 29. Aug 2022 19:28

AW: ListBox Item verstecken?
 
Ja. Indem man diese gar nicht erst addiert.

DieDolly 29. Aug 2022 19:33

AW: ListBox Item verstecken?
 
Die müssen leider in der Liste sein, da ich sonst mit meiner Zählung und den Texten nicht hinkomme.
Ich würde ja eine VirtualStringTree nehmen aber das ist viel Aufwand, wenn die am Ende genau so aussehen soll wie meine ListBox aktuell.

venice2 29. Aug 2022 19:41

AW: ListBox Item verstecken?
 
Listbox Items haben keinen visiblen Status.

Du könntest sowas versuchen aber ob es Funktioniert habe ich noch nicht getestet.
Delphi-Quellcode:
SendMessage( hWnd, LB_SETITEMHEIGHT, rowIndex, 0)


Damit sollte die Höhe der Zeile auf 0 gesetzt werden.

himitsu 29. Aug 2022 19:46

AW: ListBox Item verstecken?
 
Keine Datenhaltung in der Anzeige. (Index der Komponente ist vollkommen egal)
C und D fehlen, dennoch keine Probleme damit.

Items löschen, einfügen, verschieben, sortieren, umbenennen (z.B. Mehrsprachigkeit) ... alles keine Problem.

Delphi-Quellcode:
ListBox1.Items.AddObject('A', TObject(0));
ListBox1.Items.AddObject('B', TObject(1));
ListBox1.Items.AddObject('E', TObject(4));

ListBox1.Items.IndexOf('E') == 2
NativeInt(ListBox1.Items.Objects[2]) == 4
Es ist zwar als TObject deklariert, aber in der LISTBOX (WinAPI) ist es bloß ein dummer "Integer". MSDN-Library durchsuchenCB_SETITEMDATA


Falls du keine bösen Casts magst, dann nimm eben ein Datenobjekt dafür.
Delphi-Quellcode:
type
  TDataObject = class
    Index: Integer;
    constructor Create(AIndex: Integer);
  end;

ListBox1.Items.AddObject('A', TDataObject.Create(0));
ListBox1.Items.AddObject('B', TDataObject.Create(1));
ListBox1.Items.AddObject('E', TDataObject.Create(4));

ListBox1.Items.IndexOf('E') == 2
TDataObject(ListBox1.Items.Objects[2]).Index == 4

// und die Freigabe natürlich nicht vergessen

DieDolly 29. Aug 2022 19:51

AW: ListBox Item verstecken?
 
Mh ich glaube ich schreibe alles auf VST um, das ist dann wesentlich einfacher mit dem Ein- und Ausblenden.

himitsu 29. Aug 2022 20:08

AW: ListBox Item verstecken?
 
TDBListBox + TClientDataSet o.Ä.
TListView
Delphi-Referenz durchsuchenTControlList
Bei Google suchenTEasyListview (GetIt)
...

Millionen Wege

DieDolly 29. Aug 2022 20:10

AW: ListBox Item verstecken?
 
Dann lieber VST, weil ich schon an anderen Stellen 2 VST nutze, die komplett auf meine bedürfnisse angepasst wurden.

jaenicke 29. Aug 2022 20:39

AW: ListBox Item verstecken?
 
Wenn man den VST generisch nutzt und nicht mit Pointern hantiert wie in vielen Beispielen, ist der auch sehr einfach nutzbar. Das lässt sich leicht implementieren und dafür spart man sich später viel Quelltext und Aufwand.

Rolf Frei 30. Aug 2022 12:21

AW: ListBox Item verstecken?
 
Mach doch einfach noch eine TStringList mit allen Einträgen udn fülle dann eine ListBoix nur mit den WErten die wu brauchst. Wenn du dann in der Combobox was auswählst suchst du in der StringListe den Eintrag über den Namen der Conbobox-Auswahl und verwendest dannn den entsprechenden Index aus der StringList.

KodeZwerg 30. Aug 2022 12:31

AW: ListBox Item verstecken?
 
Zitat:

Zitat von Rolf Frei (Beitrag 1511012)
Mach doch einfach noch eine TStringList mit allen Einträgen udn fülle dann eine ListBoix nur mit den WErten die wu brauchst. Wenn du dann in der Combobox was auswählst suchst du in der StringListe den Eintrag über den Namen der Conbobox-Auswahl und verwendest dannn den entsprechenden Index aus der StringList.

TPair würde ich da nehmen. Eine Liste für beides.

ggscholz 30. Aug 2022 17:13

AW: ListBox Item verstecken?
 
Zitat:

Zitat von jaenicke (Beitrag 1510983)
Wenn man den VST generisch nutzt und nicht mit Pointern hantiert wie in vielen Beispielen, ist der auch sehr einfach nutzbar. Das lässt sich leicht implementieren und dafür spart man sich später viel Quelltext und Aufwand.

Hast du dafür ein Beispiel, würde mich mal interessieren?

Harry Stahl 30. Aug 2022 18:04

AW: ListBox Item verstecken?
 
Ich nehme mal an, Du meinst eine VCL-Listbox? Ja, das geht auch hier, wenn Du für Deine ListBox den Style "lbOwnerDrawVariable" wählst und dann im MeasureItem-Event für das gewünschte auszublendende Element die Höhe von Null angibst:

Delphi-Quellcode:
procedure TForm21.ListBox1MeasureItem(Control: TWinControl; Index: Integer; var Height: Integer);
begin
  if Index = 2 then Height := 0;
end;
Ich nutze das in meinem PixPower-Programm, nicht um Sachen auszublenden, aber z.B. um bei Icondateien, die mehrere Icons unterschiedlicher Größe enthalten, diese dann in der entsprechenden Originalgröße in der Listbox anzuzeigen (allerdings auch nur bis 48 Pix, bei Größen darüber wird dann runterskaliert).

DieDolly 30. Aug 2022 19:41

AW: ListBox Item verstecken?
 
Ich setze das am Wochenende mal um was ich vorhabe. Aber das hier ist echt die einfachste Lösung. Dann erspare ich mir das VST.


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