Übereinanderliegende Gadgets

Für allgemeine Fragen zur Programmierung mit PureBasic.
matbal
Beiträge: 246
Registriert: 30.03.2011 20:53

Re: Übereinanderliegende Gadgets

Beitrag von matbal »

Es ist ein Fehler in der zweiten Prozedur. Du versuchst, den Cursor in das das deaktivierte Grid zu setzen. Ich habe die geänderte Zeile markiert.

Code: Alles auswählen

Procedure ColGadFirst(GridNr.i,ColGadNr.i)
HideGadget(ColGadNr,0)
DisableGadget(ColGadNr,0)
DisableGadget(GridNr,1)
SetActiveGadget(ColGadNr) ; <----- 
EndProcedure
Benutzeravatar
ProgOldie
Beiträge: 236
Registriert: 19.05.2012 17:09
Computerausstattung: Windows11, Arduinos, Pi3, PureBasic 6.02

Re: Übereinanderliegende Gadgets

Beitrag von ProgOldie »

@DarkSoul: Leider müssen - allein schon aus optischen Gründen und wegen der Benutzerfreundlichkeit - die Spaltengadgets in das ListiconGadget eingepasst werden. Die Grundidee habe ich (stark erweitert) von hjBremer, der es stets mit StringGadgets gemacht hat. Ich verwende jetzt an den Datentyp angepasste Gadgets.

@matbal: Danke für den Hinweis, das war in der Tat im Demoprogramm ein Logikfehler. Ich habe das jetzt in der ursprünglichen Forumsversion geändert.

Wenn man in dieser Version das Programm startet und das erste Mal F1 betätigt, erkennt man das Problem: Das ComboBoxGadget ist nicht komplett sichtbar.
Woran liegt das?
Windows10 / PB5.70 / Arduino (-Due) / Raspberry Pi3 /Linux Mint 18
Lord
Beiträge: 313
Registriert: 21.01.2008 19:11

Re: Übereinanderliegende Gadgets

Beitrag von Lord »

@ProgOldie:

Hast Du mk-softs Hinweis nicht beachtet?
mk-soft hat geschrieben:Ich glaube das reicht

Code: Alles auswählen

InvalidateRect_(GadgetID(Gadget), 0, #True)
...
Damit funktioniert Dein Beispiel doch:

Code: Alles auswählen

EnableExplicit
;Umschalten zwischen des Gadgets mit F1 bzw. F2
Define WinNr.i,LIcNr.i,GadNr.i,Ev.i,Nr.i,GridZeile.s,ColGad.i

Procedure GridFirst(GridNr.i,ColGadNr.i)
HideGadget(ColGadNr,1)
DisableGadget(ColGadNr,1)
DisableGadget(GridNr,0)
SetActiveGadget(GridNr)
EndProcedure

Procedure ColGadFirst(GridNr.i,ColGadNr.i)
HideGadget(ColGadNr,0)
DisableGadget(ColGadNr,0)
DisableGadget(GridNr,1)
InvalidateRect_(GadgetID(ColGadNr), 0, #True)
SetActiveGadget(ColGadNr) ; <-- nach einem Hinweis von matbal geändert,Danke!
EndProcedure


WinNr=OpenWindow(#PB_Any,20,20,600,200,"Testwindow")
AddKeyboardShortcut(WinNr,#PB_Shortcut_F1,1)
AddKeyboardShortcut(WinNr,#PB_Shortcut_F2,2)

LicNr=ListIconGadget(#PB_Any,10,30,400,160,"Nr",50,#PB_ListIcon_FullRowSelect)
ColGad=ComboBoxGadget(#PB_Any,80,48,80,30)
AddGadgetItem(ColGad,-1,"Auswahl A1")
AddGadgetItem(ColGad,-1,"Auswahl b1")
AddGadgetItem(ColGad,-1,"Auswahl C1")
SetGadgetText(ColGad,"Auswahl b1")

AddGadgetColumn(LicNr,1,"Spalte 1",90)
AddGadgetColumn(LicNr,2,"Spalte 2",90)
AddGadgetColumn(LicNr,3,"Spalte 3",90)

For Nr=1 To 5
  GridZeile=Str(Nr)+Chr(10)+"A"+Chr(10)+"B"+Chr(10)+"C"+Chr(10)
  AddGadgetItem(LicNr,-1,GridZeile)
Next

Repeat
  Ev=WaitWindowEvent()
  If Ev=#PB_Event_Menu
    Select EventMenu()
      Case 1
        ColGadFirst(LicNr,ColGad)
      Case 2
        GridFirst(LicNr,ColGad)
    EndSelect
 EndIf       
Until Ev=#PB_Event_CloseWindow
Bild
Benutzeravatar
ProgOldie
Beiträge: 236
Registriert: 19.05.2012 17:09
Computerausstattung: Windows11, Arduinos, Pi3, PureBasic 6.02

Re: Übereinanderliegende Gadgets

Beitrag von ProgOldie »

@Lord+mk-soft: Sorry, den Hinweis hatte ich übersehen. Jetzt funktioniert das Demobeispiel.
Danke für die Hilfen!

Edit: Nach Einbau von InvalidateRect_(GadgetID(ColGadNr), 0, #True) klappt's auch in meinem Programm!
Windows10 / PB5.70 / Arduino (-Due) / Raspberry Pi3 /Linux Mint 18
Antworten