Guter Einwand Code Commander
Allerdings plane ich das ganze auch zu veröffentlichen, und du weisst auch,
dass man sowas dann beinahe absolut narrensicher machen muss...
Da ich alles bisher schön mit den nativen PB Funktionen steuern kann, wie SetGadgetColor usw.
wäre das natürlich umso besser, wenn man das ganze auch noch mit der eigenen Nummerierung
oder per #PB_Any hinhauen würde.
@Sicro : Es ist eigentlich nicht das Problem eine Zahl zu finden. Es ist das Problem eine Zahl zu finden,
die NICHT von PB für die GadgetNummerierung genutzt wird. Man stelle sich vor, eine umfangreiche Maske
mit mehr als 100 Gadgets und dann knallt es mit merkwürdigen Fehlern, weil PB die gleichen Nummern erwischt hat
wie die Zahlenspielerei.... Darum gehts.
Deswegen wäre das unterdrücken der restlichen EventTypes für ein Canvasgadget die bessere Wahl, dachte ich mir.
Eventuell über den Callback, wobei danach bestimmt noch ein weiterer Callback kommt... oder ist der GadgetCallback
in der VT vom PB SDK der letzte oder gar der einzige, den das Gadget hat.... bzw. werden dann komplett alle Funktionen
des Gadgets ausgehebelt... wenn ich den ersetze ?
An den hab ich mich noch nicht rangewagt....
Event und/oder EventType Unterdrücken ?
Re: Event und/oder EventType Unterdrücken ?
PureBasic 6.10 LTS (Windows x86/x64) | Windows10 Pro x64 | Asus TUF X570 Gaming Plus | R9 5900X | 64GB RAM | GeForce RTX 3080 TI iChill X4 | HAF XF Evo | build by vannicom
Re: Event und/oder EventType Unterdrücken ?
Ja, stimmt.Bisonte hat geschrieben:@Sicro : Es ist eigentlich nicht das Problem eine Zahl zu finden. Es ist das Problem eine Zahl zu finden,
die NICHT von PB für die GadgetNummerierung genutzt wird.
Im folgenden Code wird die Problematik nun gelöst, indem echte Gadgets anstatt virtuelle Gadgets erstellt und diese unsichtbar geschaltet werden. Der aktuelle Status kann jetzt per GetGadgetState() ermittelt werden.
Code: Alles auswählen
Enumeration Gadget
#MyOwnCheckbox_1
#MyOwnCheckbox_2
#MyOwnCheckbox_5
EndEnumeration
Structure CanvasGadgetStruc
Checkbox.i
EndStructure
Global.CanvasGadgetStruc NewMap CanvasGadgets()
Procedure CanvasGadgetEventHandler()
Protected MouseX = GetGadgetAttribute(EventGadget(), #PB_Canvas_MouseX)
Protected MouseY = GetGadgetAttribute(EventGadget(), #PB_Canvas_MouseY)
; Ist der Mauszeiger innerhalb der Checkbox?
If MouseX > 4 And MouseX < 26 And MouseY > 4 And MouseY < 26
;SetGadgetData(EventGadget(), Bool(Not GetGadgetData(EventGadget())))
SetGadgetState(CanvasGadgets(Str(EventGadget()))\Checkbox, Bool(Not GetGadgetState(CanvasGadgets(Str(EventGadget()))\Checkbox)))
If StartDrawing(CanvasOutput(EventGadget()))
Box(5, 5, 20, 20)
FrontColor(#Black)
DrawingMode(#PB_2DDrawing_Outlined)
Box(5, 5, 20, 20)
If GetGadgetData(EventGadget())
; Zeichne ein Kreuz in die Checkbox
LineXY(5, 5, 25, 25)
LineXY(25, 5, 5, 25)
EndIf
StopDrawing()
EndIf
; Sende Klick-Event der virtuellen Checkbox
;PostEvent(#PB_Event_Gadget, EventWindow(), CanvasGadgets(Str(EventGadget()))\Checkbox, 0, GetGadgetData(EventGadget()))
PostEvent(#PB_Event_Gadget, EventWindow(), CanvasGadgets(Str(EventGadget()))\Checkbox)
EndIf
EndProcedure
Procedure.i CreateMyOwnCheckbox(Gadget, x, y, Text$)
Protected Result
If AddMapElement(CanvasGadgets(), Str(CanvasGadget(#PB_Any, x, y, 200, 30)))
BindGadgetEvent(Val(MapKey(CanvasGadgets())), @CanvasGadgetEventHandler(), #PB_EventType_LeftClick)
; Zeichne Checkbox
If StartDrawing(CanvasOutput(Val(MapKey(CanvasGadgets()))))
FrontColor(#Black)
DrawingMode(#PB_2DDrawing_Outlined)
Box(5, 5, 20, 20)
DrawingMode(#PB_2DDrawing_Transparent)
DrawText(30, 5, Text$)
StopDrawing()
EndIf
Result = CheckBoxGadget(Gadget, 0, 0, 10, 10, "")
If Gadget = #PB_Any : Gadget = Result : EndIf
HideGadget(Gadget, #True)
CanvasGadgets()\Checkbox = Gadget
EndIf
ProcedureReturn Gadget
EndProcedure
If OpenWindow(0, 0, 0, 220, 220, "Canvas example", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
CreateMyOwnCheckbox(#MyOwnCheckbox_1, 10, 10, "Checkbox 1")
CreateMyOwnCheckbox(#MyOwnCheckbox_2, 10, 50, "Checkbox 2")
Define MyOwnCheckbox_3 = CreateMyOwnCheckbox(#PB_Any, 10, 90, "Checkbox 3")
Define MyOwnCheckbox_4 = CreateMyOwnCheckbox(#PB_Any, 10, 130, "Checkbox 4")
CreateMyOwnCheckbox(#MyOwnCheckbox_5, 10, 170, "Checkbox 5")
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_Gadget
Select EventGadget()
Case #MyOwnCheckbox_1 : Debug "Checkbox 1 ("+ Str(EventGadget()) +") wurde angeklickt -- Wert: " + GetGadgetState(EventGadget()) ;EventData()
Case #MyOwnCheckbox_2 : Debug "Checkbox 2 ("+ Str(EventGadget()) +") wurde angeklickt -- Wert: " + GetGadgetState(EventGadget()) ;EventData()
Case MyOwnCheckbox_3 : Debug "Checkbox 3 ("+ Str(EventGadget()) +") wurde angeklickt -- Wert: " + GetGadgetState(EventGadget()) ;EventData()
Case MyOwnCheckbox_4 : Debug "Checkbox 4 ("+ Str(EventGadget()) +") wurde angeklickt -- Wert: " + GetGadgetState(EventGadget()) ;EventData()
Case #MyOwnCheckbox_5 : Debug "Checkbox 5 ("+ Str(EventGadget()) +") wurde angeklickt -- Wert: " + GetGadgetState(EventGadget()) ;EventData()
EndSelect
EndIf
Until Event = #PB_Event_CloseWindow
EndIf
Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version
Re: Event und/oder EventType Unterdrücken ?
Mit PB-Internen funktionen habe ich es für Windows und Linux am laufen.
Nur MacOS bekomme ich es nicht hin. Die SDK für Mac gibt es jetzt auch. Steige da aber nicht hinter wie es geht...
http://www.purebasic.fr/german/viewtopi ... =8&t=27851
Nur MacOS bekomme ich es nicht hin. Die SDK für Mac gibt es jetzt auch. Steige da aber nicht hinter wie es geht...
http://www.purebasic.fr/german/viewtopi ... =8&t=27851
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Re: Event und/oder EventType Unterdrücken ?
@Sicro: Das ist eine Idee. Es wird zwar alles doppelt, aber das bisschen Speicherverlust kann man verschmerzen.
@mk-soft:
Genauso hab ich das ganze aufgebaut und erweitert. Bei Mac hab ich auch nix hinbekommen. Aber wenn ich
mir das SDK vom Mac so anschaue, sieht das aus wie OOP... das ist eh nicht meine Welt
@mk-soft:
Genauso hab ich das ganze aufgebaut und erweitert. Bei Mac hab ich auch nix hinbekommen. Aber wenn ich
mir das SDK vom Mac so anschaue, sieht das aus wie OOP... das ist eh nicht meine Welt
PureBasic 6.10 LTS (Windows x86/x64) | Windows10 Pro x64 | Asus TUF X570 Gaming Plus | R9 5900X | 64GB RAM | GeForce RTX 3080 TI iChill X4 | HAF XF Evo | build by vannicom
Re: Event und/oder EventType Unterdrücken ?
Bin auch kein fan mehr davon intern die VT zu verbiegen. Sollte sich mal intern etwas ändern funktioniert alles nicht mehr.
OOP finde ich manchmal aber sinnvoll da die Daten immer an den Objekt gebunden sind.
Siehe Beispiel ButtonColorGadget. Link http://www.purebasic.fr/german/viewtopi ... =8&t=28903
Ich selber arbeite auch gerne mit Maps um die zurückgegebene ID zu verwalten. Muss aber jedesmal erst in eine String gewandelt werden.
Dazu hatte ich heute Morgen eine Idee. Der Integer ist bei x86 immer vier byte lang und bei x64 immer acht Byte lang.
Diesen kann man auch direkt als String betrachten und als MapKey übergeben. Muss ja nicht als Mensch leserlich sein.
Mache dafür mal einen neuen Thread auf...
Link http://www.purebasic.fr/german/viewtopi ... =8&t=30065
OOP finde ich manchmal aber sinnvoll da die Daten immer an den Objekt gebunden sind.
Siehe Beispiel ButtonColorGadget. Link http://www.purebasic.fr/german/viewtopi ... =8&t=28903
Ich selber arbeite auch gerne mit Maps um die zurückgegebene ID zu verwalten. Muss aber jedesmal erst in eine String gewandelt werden.
Dazu hatte ich heute Morgen eine Idee. Der Integer ist bei x86 immer vier byte lang und bei x64 immer acht Byte lang.
Diesen kann man auch direkt als String betrachten und als MapKey übergeben. Muss ja nicht als Mensch leserlich sein.
Mache dafür mal einen neuen Thread auf...
Link http://www.purebasic.fr/german/viewtopi ... =8&t=30065
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive