Seite 1 von 1

Tree und Combobox-Gadgets mehrspaltig

Verfasst: 14.03.2013 18:52
von Garfield
Hallo.

Hat vielleicht schon jemand eine Umsetzung von zwei(oder mehr)-spaltigen Tree-Gadget?

Bild

Dieses müsste ja meiner Meinung nach über ein modifiziertes Listview geschehen.
VB: http://btmtz.mvps.org/listview/ --> LvItemTree


Als zweite Frage:
Ich suche eine Möglichkeit um in einer Combobox mehrspaltig Inhalte anzeigen zu lassen (z.B. per Tabstop oder Semikolon getrennt).

Bild


Ich suche zu beiden Fragen schon vielleicht vorhandene Code-Fetzen.

Re: Tree und Combobox-Gadgets mehrspaltig

Verfasst: 18.03.2013 17:43
von Shardik
Garfield hat geschrieben:Als zweite Frage:
Ich suche eine Möglichkeit um in einer Combobox mehrspaltig Inhalte anzeigen zu lassen (z.B. per Tabstop oder Semikolon getrennt).
Die einfachste Möglichkeit besteht darin, einen Font zu verwenden, in dem alle Buchstaben gleich breit sind. Man kann dann den Zwischenraum zwischen den Spalten einfach mit Leerzeichen füllen:

Code: Alles auswählen

OpenWindow(0, 0, 0, 370, 180, "ComboBoxGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ComboBoxGadget(0, 10, 10, 350, 21)
SetGadgetFont(0, LoadFont(0, "Courier", 10))

AddGadgetItem(0, -1, "Penicillin           Alexander Fleming")
AddGadgetItem(0, -1, "Radium               Marie Curie")
AddGadgetItem(0, -1, "Pasteurization       Louis Pasteur")
AddGadgetItem(0, -1, "Vaccination          Edward Jenner")

SendMessage_(GadgetID(0), #CB_SHOWDROPDOWN, 1, 0)

Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
Wenn man dies nicht möchte, wird der Aufwand größer und man muß dem ComboBoxGadget als Ausklappliste ein ListIconGadget verpassen, was wohl nur mit API-Funktionen und Subclassing machbar ist... :wink:

Hier ist ein Beispiel für Visual Basic 5 oder 6:
http://www.mvps.org/vbnet/index.html?co ... stview.htm

Re: Tree und Combobox-Gadgets mehrspaltig

Verfasst: 19.03.2013 11:18
von Lambda
Zum ersteren kann ich dir das Tree Gadget der Nexus Library empfehlen. Das ist genau das was dein Bildchen zeigt, eine Kombination aus ListIcon und Tree.

Letzteres würde ich keines Falls durch WinAPI Gepfusche Lösen. Das für oft zu Fehlern und ist auch nicht cross-platform. Gelöst werden kann das ganz einfach durch ein Canvas, was wenn man es ohne WinAPI löst, cross-platform ist.

Falls dir das zu aufwendig ist und möglichst einfach schnell eine Lösung willst, kannst du es durch ein Button + Popup lösen. Popup Menü-Items können nebeneinander dargestellt werden. Beispielcode von RSBasic. Ist aber doch etwas hardcoded und umständlicher zu handhaben.

Re: Tree und Combobox-Gadgets mehrspaltig

Verfasst: 19.03.2013 16:32
von Shardik
cOoki3druqs hat geschrieben:Letzteres würde ich keines Falls durch WinAPI Gepfusche Lösen. Das für oft zu Fehlern und ist auch nicht cross-platform.
Diese Aussage kann ich so nicht unwidersprochem lassen! Denn erstens hat Garfield nicht gesagt, dass die gewünschten Beispiele auf allen drei von PB unterstützten Betriebssystem-Plattformen laufen sollen (sein zweites Bildschirmfoto zeigt ein Windows 7 Fenster) und zweitens man kann sehr wohl WinAPI-Funktionen nutzen und trotzdem alle drei Betriebssystem-Plattformen unterstützen, indem man nämlich die WinAPI-Funktionen für Linux und MacOS X in CompilerIf-Zweigen durch die jeweiligen GTK- bzw. Cocoa-Framework API-Funktionen ersetzt. Ich selbst habe schon eine ganze Reihe solcher Code-Beispiele demonstriert und drei meiner Lösungen sind mittlerweile bereits in PureBasic integriert worden und stehen dadurch nativ für alle drei Plattformen zur Verfügung. Eine Liste von plattform-unabhängigen API-Beispielen (die nicht nur von mir sind) habe ich hier zusammengestellt:
http://www.purebasic.fr/english/viewtop ... 3&start=11

Wenn man sich mit betriebssystem-naher Programmierung nicht auskennt, kann dies durchaus zu "WinAPI Gepfusche" führen. Aber es existieren ja bereits eine ganze Reihe an (teilweise kommerziellen) Controls zu den von Garfield gestellten Fragen, die demonstrieren, dass nicht notwendigerweise jede angebotene WinAPI-Lösung aus "WinAPI-Gepfusche" bestehen muß... :wink:

Re: Tree und Combobox-Gadgets mehrspaltig

Verfasst: 19.03.2013 16:43
von Lambda
Das stimmt natürlich, habe es nur für eine "fixe Lösung" etwas grob ausgedrückt. :D Aber es gibt fast nichts was nicht auch mit Canvas lösbar wäre, da erspart man sich auch die Portierung der Befehle.

Finde das klasse! Wollte schon ein Thread dafür eröffnen. Mal etwas offtopic: Wären Befehle wie BitBlt, GetSystemMetrics, GetSysColor, SetParent auch portierbar?

Re: Tree und Combobox-Gadgets mehrspaltig

Verfasst: 19.03.2013 16:57
von ts-soft
Alles kein grosses Problem, nur viel suchen ist nötig (und die passenden Begriffe :mrgreen: )

GetSysColor: http://www.purebasic.fr/english/viewtop ... 22#p405822

Re: Tree und Combobox-Gadgets mehrspaltig

Verfasst: 19.03.2013 17:24
von Lambda
Uh uh uh, wo wir gerade dabei sind. SetLayeredWindowAttributes für transparente PNG Fenster. :mrgreen: Das wäre natürlich eine tolle Sache.

Re: Tree und Combobox-Gadgets mehrspaltig

Verfasst: 20.03.2013 02:12
von Garfield
cOoki3druqs hat geschrieben:Zum ersteren kann ich dir das Tree Gadget der Nexus Library empfehlen. Das ist genau das was dein Bildchen zeigt, eine Kombination aus ListIcon und Tree.
Oh, das Teil ist wirklich sehr schick und ist mir bisher nie über dem Weg gelaufen und das obwohl ich mir auch dessen ExGrid zulegen werde :)

Danke für den Hinweis!

Die Combo-Box ist nicht so wichtig, dies kann ich vom Programmaufbau her (wird eine komplexere Datenbank-Anwendung) auch anders gestalten, so dass ich Grids oder Listviews verwenden kann.
Shardik hat geschrieben:Die einfachste Möglichkeit besteht darin, einen Font zu verwenden, in dem alle Buchstaben gleich breit sind. Man kann dann den Zwischenraum zwischen den Spalten einfach mit Leerzeichen füllen
Auch dir Danke für den Hinweis. Dies wäre vielleicht auch eine Alternative.

Re: Tree und Combobox-Gadgets mehrspaltig

Verfasst: 23.03.2013 17:57
von Lambda
Wollte nur mal den Hinweis geben, falls Interesse deinerseits besteht. :D

Hau in kürze das nächste Steuerelement raus. Es ist ein List\Grid\Tree Control in einem. Bietet auch wesentlich mehr Anpassungsmöglichkeiten. Pro Zelle können mehrere Units hinzugefügt werden, solch eine Unit kann ein Bild, Knopf, CheckBox oder ComboBox sein. Header Drag&Drop, Item Drag&Drop, automatische Header-Breite etc. :D