Erweiterung für Listbox gesucht

Ich benötige ine Listbox, bei der man eine Zeile aufklappen kann, das soll dann so aussehen wie auf dem Bild.
Ich habe noch nie ein Controll selbst erweitert, das ist mir zu viel Aufwand. Kennst jemand eine solche Listbox? vieles gibt es ja schon!
Oder kann mir das jemand gegen einenen kleinen Obulus bauen?

Ich denke piDog hat was Du brauchst: http://www.pidog.com/piDogScrollingCanvas/DataView.shtml

Bin mich gerade am wundern, Stefan das gibt es doch mit XOJO Hausmitteln? Hierarchische Listboxen.
Schau mal in den Examplesunter / Desktop / Controls / Listbox / Listbox Example nach

Oops! Tomas hat recht.
Ich hatte ein Popup in den Zeilen/Zellen im Gedanken. (Sowas kommt von sowas wenn man das Forum auf der Arbeit “quer” liest.) :wink:

…dann sind wir uns alle also basisdemokratisch einig, dass der kleine Obulus an mich geht? :wink:

Verabredet euch doch einfach zu einem kühlen Getränk am 19. Mai in Koblenz :slight_smile:

Ja Moment, ist das dann auch Editable?

ein kühles Getränk? im Moment eher ein heißer Kakao :wink:

Ich will hoffen, dass wir im Mai im Biergarten sitzen können.
Freue mich, wenn ihr beiden euch noch anmelden würdet :slight_smile:

PS: Editierter kann man die Listbox schon machen. Aufklappen geht auch.

Hier sieht man das Problem deutlich… die Zeile ist ja nur so breit wie die Spalte, sie soll aber über die gesamte Breite der Listbox gehen.

das geht leider nicht direkt
du kannst natürlich ein TextField selber davor setzen oder unter der Liste und das selber machen.

Beim Malen über viele Zellen kann man den CellTextPaintEvent selber implementieren.

Wenn’s eine reine Mac-Lösung ist, wäre da natürlich was via NSTableView möglich, denke ich. Oder, um Christians Gedanken aufzugreifen: Stimmt doch einfach für diesen Vortrag und kommt in Koblenz vorbei; dann schau ich mal, dass ich bis Mai auch CustomCells berücksichtige :wink:

https://forum.xojo.com/30646-session-voting-for-mbs-xojo-conference/0#p251619

P.S. Gab’s nicht irgendein Projekt mit Merged Cells? Von Beatrix? Hab ich gerade nur sehr vage in Erinnerung.

Das ist von Karen Atkocius:
http://www.katkosoft.com/Mergeable%20Listbox%20Page/MergeableCellListbox.html

Wow, beeindruckend… jedoch etwas überdimensioniert …

Sorry Koblenz klappt nicht!

[quote=251613:@Christian Schmitz]das geht leider nicht direkt
du kannst natürlich ein TextField selber davor setzen oder unter der Liste und das selber machen.

Beim Malen über viele Zellen kann man den CellTextPaintEvent selber implementieren.[/quote]

Ein TextField davor setzen hört sich gut an, da ich das eh schon mache, jedoch bisher so, wie auf dem Bild zu sehen. Wie kann ich das nun so implentieren, dass es es wie eine Zeile der Listbox aussieht? Ohne die Buttons natürlich, die brauche ich ja dann nicht…

Du könntest Dir ein Container Control mit einem Textfield drin bauen, und dann via

myContainerControl.EmbedWithin (lb,  lb.Column(0).WidthActual, _
lb.top - 11 + (lb.DefaultRowHeight * row)  ,  lb.Column(1).WidthActual, lb.DefaultRowHeight)

…in die Listbox bauen.

Lies am besten mal die Doku zu ContainerControl.embedWithin. Der Axel Schneider hat dazu mal ein Demo-Projekt gemacht, Google is your friend…

Vorsicht! Das klingt erst einmal recht praktikabel, Du wirst aber auf diverse nicht zu unterschätzende Herausforderungen treffen.

Z.B. ist das korrekte Platzieren des TextField im Container innerhalb eines Fensters nicht ganz einfach da das Koordinaten System nicht Fehlerfrei ist (oder von mir noch nicht ganz verstanden wurde…).
Dann musst Du das TextField bei Fenstergrößen Änderungen, beim Scrollen der ListBox, usw. so schnell & sauber neu platzieren das der Nutzer nicht bemerkt das Du “trickst”.
Das Navigieren mit der Tastatur ist nicht leicht zu lösen, da Du fließend aus der ListBox in das TextField und umgekehrt gehen musst.

Je länger ich darüber nachdenke desto unattraktiver wird diese Lösung :frowning:

Ich kann euch sagen, die passenden x und y Koordinaten kann man nicht genau ermitteln, das bleibt immer nur eine Annhrung , das Problem hatte ich schon bei der Version, wie es auf dem Bild oben zu sehen ist.

Ich halte (wenn es WIRLICH SELBER machen WILL) Christians Ansatz am praktikabelsten:

Das Zeichnen der ListBox- und Zell- Rahmen ist nicht schwer und die Logik dahinter kann auch ohne jahrelange Erfahrung (und/oder mit unserer Hilfe) erarbeitet werden.

Aber wenn das Projekt nicht nur für Dich selbst ist, würde ich einen Entscheider/Finanzier davon überzeugen das die Mergeable Cell Listbox eine sinnvolle Anschaffung ist. Und wer weiß wo Du diese Control sonst noch gebrauchen kannst.

Wage zumindest mal einen Versuch mit der Mergeable Cell ListBox bevor Du unendlich viel Zeit und Kraft in eine Lösung investierst die möglicherweise immer ein Kompromiss bleiben wird.

Mal ne blöde Frage…
Warum nicht einfach so etwas: Ich habe eine Beispiellistbox mit 3 Spalten gebaut.
Dort habe ich dann

Function CellClick(row as Integer, column as Integer, x as Integer, y as Integer) As Boolean me.ColumnWidths = "0,*,0" me.EditCell(row,column) End Function Sub CellLostFocus(row as Integer, column as Integer) me.ColumnWidths = "*,*,*" End Sub

Damit wird dann einfach das Feld über die ganze Breite gesetzt und wenn die Zelle fertig ist wieder zurückgesetzt. Mit ein wenig Logik zu den Spaltenbreiten sollte das doch eine einfache Lösung sein…

Aber das würde doch bedeuten das sämtliche Spalten vor und nach der aktuellen Spalte “unsichtbar” für den Nutzer sind, oder?
Das sieht nur nicht schön aus, sondern ist auch ungewohnt und irritierend. :wink: