Panel Gadget - Schaltflächen aktivieren

Anfängerfragen zum Programmieren mit PureBasic.
xivoo
Beiträge: 5
Registriert: 24.02.2010 11:47
Wohnort: München
Kontaktdaten:

Panel Gadget - Schaltflächen aktivieren

Beitrag von xivoo »

Hallihallo,

ich evaluiere PureBasic gerade für ein Datenbankprojekt, an dem ich als Werkstudent bei In****on arbeite (und für mich selber :wink: ). Die ersten zwei Revisionen des Tools habe ich in Access zusammengehackt, jetzt will ich sozusagen an einer "Next Generation" Version arbeiten die Standalone und mit SQLite funktioniert. Mehr kann ich erstmal nicht dazu sagen (NDA).

Mein Problem ist nun: ich habe lange am Papier gesessen um ein möglichst intuitives UI zu konstruieren. Daran arbeite ich jetzt gerade mit der PB Demo. Das UI besteht praktisch nur aus Panels mit Unterpanels, etc. (in etwa wie eine mehrdimensionale Navigationsleiste einer Website). Funktioniert soweit ganz gut und war auch nicht schwer zu programmieren. Jetzt kommt aber der Knackpunkt: als kleine Hilfe soll der User auch im Fenstermenü z.B. auf Database und dann About klicken können und das Programm soll eben das gewünschte Panelelement aktivieren.
Das scheint aber nur mit den Hauptpanels zu funktionieren (also mit den Elementen, die per PanelGadget erstellt wurden). Wie kann ich denn die Reiter aktivieren, die mit AddGadgetItem erstellt worden sind?
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: Panel Gadget - Schaltflächen aktivieren

Beitrag von ts-soft »

Code: Alles auswählen

SetGadgetState(#Panel, item)
xivoo
Beiträge: 5
Registriert: 24.02.2010 11:47
Wohnort: München
Kontaktdaten:

Re: Panel Gadget - Schaltflächen aktivieren

Beitrag von xivoo »

ts-soft hat geschrieben:

Code: Alles auswählen

SetGadgetState(#Panel, item)
Danke, das habe ich schon versucht, aber Item muss eine Zahl sein (und SetGadgetItemState funktioniert nicht für Panel Schaltflächen). Die einzige Referenz die ich für die Schaltflächen habe ist aber der Bezeichner. Ein kurzer Codeausschnitt:

Code: Alles auswählen

;	Set up the panels that will contain all the information
  panelMain = PanelGadget (#PB_Any, 0, 0, 1024, 768)
  	;	Generate the "Welcome" panel
  	AddGadgetItem (panelMain, -1, "Welcome")
  	
  	;	Generate the "Account" panel
  	AddGadgetItem (panelMain, -1, "Account")
So, es wird das Panel panelMain erstellt, auf diesem dann die Schaltflächen "Welcome" und "Account". Standardmäßig wird ja "Welcome" angezeigt, jetzt will ich, dass der User du klicken eines Eintrags im Fenstermenü auf "Account" wechselt (hört sich hier lächerlich an, aber ich hab in dem Programm bis zu 3 Panellevels, also in etwa "Search" - "Chipdata" - "NAND" und will jetzt, dass der User - sollte er die "NAND" Schaltfläche nicht in den Panels finden - im Menü auf NANDSearch klicken kann und damit dann die NAND Schaltfläche öffnet).
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: Panel Gadget - Schaltflächen aktivieren

Beitrag von ts-soft »

Ungetested, sollte aber gehen:

Code: Alles auswählen

Procedure FindGadgetItem(id, text.s)
  Protected count = CountGadgetItems(id)
  Protected i
  
  If count
    For i = 1 To count
      If LCase(GetGadgetItemText(id, i)) = LCase(text)
        ProcedureReturn i - 1
      EndIf
    Next
  EndIf
  
  ProcedureReturn -1 ; fehler
EndProcedure
xivoo
Beiträge: 5
Registriert: 24.02.2010 11:47
Wohnort: München
Kontaktdaten:

Re: Panel Gadget - Schaltflächen aktivieren

Beitrag von xivoo »

Vielen Dank :allright:
Das hat zwar nicht 100% gestimmt, aber mit einer kleinen Anpassung (i zurückgeben statt i - 1) funktioniert es perfekt!

Code: Alles auswählen

Procedure FindGadgetItem(id, text.s)
  Protected count = CountGadgetItems(id)
  Protected i
  
  If count
    For i = 1 To count
      If LCase(GetGadgetItemText(id, i)) = LCase(text)
        ProcedureReturn i
      EndIf
    Next
  EndIf
  
  ProcedureReturn -1 ; fehler
EndProcedure
Da darf sich das PureBasic Team wohl bald über eine weitere verkaufte Lizenz freuen <)

Edit: ich hab dich als Autor der Funktion im Quellcode verewigt wenn's Recht ist :wink:
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: Panel Gadget - Schaltflächen aktivieren

Beitrag von ts-soft »

xivoo hat geschrieben:Vielen Dank :allright:
Das hat zwar nicht 100% gestimmt...
Deine Korrektur ist aber auch falsch :wink:
Hab mir jetzt die Mühe gemacht und getested, hierfür wäre es immer nett, wenn Du ein
kleines Beispiel postest, das ausführbar ist und das Problem aufzeigt, hätte mir Arbeit gespart.
Hier der korrigierte Code:

Code: Alles auswählen

Procedure FindGadgetItem(id, text.s)
  Protected count = CountGadgetItems(id)
  Protected i
 
  If count
    For i = 0 To count - 1
      If LCase(GetGadgetItemText(id, i)) = LCase(text)
        ProcedureReturn i
      EndIf
    Next
  EndIf
 
  ProcedureReturn -1 ; fehler
EndProcedure 
Gruß
Thomas
xivoo
Beiträge: 5
Registriert: 24.02.2010 11:47
Wohnort: München
Kontaktdaten:

Re: Panel Gadget - Schaltflächen aktivieren

Beitrag von xivoo »

Oh danke :praise:
Meine Korrektur hat bei mir funktioniert, aber ich habs natürlich auf die schnelle nicht mit allen Panels getestet. Das hätte mich später noch gewundert.

In Zukunft werde ich mich bemühen, kleine Codebeispiele zusammenzubasteln!

Edit: Ein kurzes Addendum habe ich noch, falls Jemand ein ähnliches Problem haben sollte. Mit der Funktion kann man sehr einfach Panels aktivieren, das geht dann so:

Code: Alles auswählen

SetGadgetState (Hauptpanel, FindGadgetItem(Hauptpanel,Schaltflächenname$))

Will man jetzt aber bei mehreren Subpanels sowas machen geht das nicht direkt, sondern so:

Code: Alles auswählen

SetGadgetState (Hauptpanel, FindGadgetItem(Hauptpanel,"Suche"))
            	SetGadgetState (Suchpanel, FindGadgetItem(Suchpanel,"DVD"))
            	SetGadgetState (DVDPanel, FindGadgetItem(DVDPanel,"Thriller"))
:D
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: Panel Gadget - Schaltflächen aktivieren

Beitrag von ts-soft »

Alternativ könntest Du auch eine Map anlegen, mit den Itemtexten und dem Item als Wert.

Gruß
Thomas
Antworten