Tree und Combobox-Gadgets mehrspaltig

Für allgemeine Fragen zur Programmierung mit PureBasic.
Garfield
Beiträge: 2
Registriert: 14.03.2013 17:36

Tree und Combobox-Gadgets mehrspaltig

Beitrag 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.
Benutzeravatar
Shardik
Beiträge: 752
Registriert: 25.01.2005 12:19

Re: Tree und Combobox-Gadgets mehrspaltig

Beitrag 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
Lambda
Beiträge: 526
Registriert: 16.06.2011 14:38

Re: Tree und Combobox-Gadgets mehrspaltig

Beitrag 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.
Benutzeravatar
Shardik
Beiträge: 752
Registriert: 25.01.2005 12:19

Re: Tree und Combobox-Gadgets mehrspaltig

Beitrag 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:
Lambda
Beiträge: 526
Registriert: 16.06.2011 14:38

Re: Tree und Combobox-Gadgets mehrspaltig

Beitrag 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?
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Tree und Combobox-Gadgets mehrspaltig

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Lambda
Beiträge: 526
Registriert: 16.06.2011 14:38

Re: Tree und Combobox-Gadgets mehrspaltig

Beitrag 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.
Garfield
Beiträge: 2
Registriert: 14.03.2013 17:36

Re: Tree und Combobox-Gadgets mehrspaltig

Beitrag 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.
Lambda
Beiträge: 526
Registriert: 16.06.2011 14:38

Re: Tree und Combobox-Gadgets mehrspaltig

Beitrag 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
Antworten