GUI Erstellung & Event Handling - Methoden, Strategien

Anfängerfragen zum Programmieren mit PureBasic.
K.Putt
Beiträge: 122
Registriert: 01.09.2006 00:17

GUI Erstellung & Event Handling - Methoden, Strategien

Beitrag von K.Putt »

Hallo,
ich weiß gerade nicht wohin mit dem Thema, deshalb frage ich mal hier :D

Was mich schon lange an PureBasic etwas stört ist die recht umständliche GUI Programmierung,
bzw. der Teil des Event Handlings.
Mal ein Vergleich zu VB.NET oder Real Basic:
Dort kann man sich das Event-Handling größtenteils sparen, da durch klicken von Elementen ind er GUI
bestimmte Events gewählt und Funktionen automatisch zugewiesen werden.

Meine Frage:

Wir des sowas jemals auch in dem GUI Designer von PureBasic geben?

Falls nun die Frage kommt "Warum nimmst Du dann nicht VB oder Real?"
Meines Wissens kann Real noch nicht mit HTTPs umgehen, und VB ist natürlich plattformabhängig...

Wichtigere Frage deshalb:
Was für Strategien habt Ihr um den Aufwand für die GUI Gestaltung und Event-Handling so gering wie möglich zu halten?
Bin für jeden Tip oder Anregung dankbar - da es mir bei komplexeren Anwendungen jedesmal kopfzerbrechen bereitet
und mich oft auch abhält überhaupt mit einem Projekt zu beginnen.

Danke Euch, Gruß in die Runde :allright:
PB 5.x & Win 7 64Bit
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: GUI Erstellung & Event Handling - Methoden, Strategien

Beitrag von ts-soft »

Guck z.B. mal hier: http://www.purebasic.fr/german/viewtopi ... =8&t=22530

Es gibt aber sicher noch viel mehr Beispiele hier im Forum. Ich persönliche mag diese
EventProcedureGeneration von VB überhaupt nicht. War einer der Gründe, warum
ich von VB6 gewechselt bin.

Gruß
Thomas
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
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: GUI Erstellung & Event Handling - Methoden, Strategien

Beitrag von Kiffi »

.NET-Programme laufen auch unter Linux und MacOS.

Stichwort: Mono

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
mk-soft
Beiträge: 3845
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: GUI Erstellung & Event Handling - Methoden, Strategien

Beitrag von mk-soft »

Eigenwerbung...

VisualGenerate erstellt alle erforderlichen Events. Ist aber noch nicht für den neuen VD von Purebasic v5.0 angepasst...

Siehe Signatur
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
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: GUI Erstellung & Event Handling - Methoden, Strategien

Beitrag von ts-soft »

Hier noch ein simpler Weg: http://www.purebasic.fr/english/viewtop ... 21#p312121

Code: Alles auswählen

  ;{- Event Handler
Prototype ProtoEvents(Type)

Global NewMap Gadgets()
;}

;{- Form Constants
Enumeration
  #Window_MAIN
EndEnumeration

Enumeration
  #ListIcon_EVENT
  #Button_SHOWALL
  #Button_HIDEALL
  #Button_HIDE0
  #Button_HIDE1
  #Button_1
  #Button_0
  #Text_MESSAGE
EndEnumeration
;}

;{- Event Procedures
Procedure ListIcon_EVENT_Event(Type)
  Debug "#ListIcon_EVENT"
  lineclick = GetGadgetState(#ListIcon_EVENT)
  SetGadgetText(#Text_MESSAGE, "You clicked line: "+Str(lineclick))
EndProcedure

Procedure Button_SHOWALL_Event(Type)
  Debug "#Button_SHOWALL"
  last$ = GetGadgetText(#Text_MESSAGE)
  AddGadgetItem(#Listicon_EVENT, -1, last$)
  SetGadgetText(#Text_MESSAGE, "A;; buttons now shown...")
  For X = #Button_1 To #Button_0
    HideGadget(X,0)
  Next
EndProcedure

Procedure Button_HIDEALL_Event(Type)
  Debug "#Button_HIDEALL"
  last$ = GetGadgetText(#Text_MESSAGE)
  AddGadgetItem(#Listicon_EVENT, -1, last$)
  SetGadgetText(#Text_MESSAGE, "ALL BUTTONS HIDDEN.")
  For X = #Button_1 To #Button_0
    HideGadget(X,1)
  Next
EndProcedure

Procedure Button_HIDE1_Event(Type)
  Debug "#Button_HIDE1"
  last$ = GetGadgetText(#Text_MESSAGE)
  AddGadgetItem(#Listicon_EVENT, -1, last$)
  SetGadgetText(#Text_MESSAGE, "Button HIDE event...")
  HideGadget(#Button_1,1)
EndProcedure

Procedure Button_HIDE0_Event(Type)
  Debug "#Button_HIDE0"
  last$ = GetGadgetText(#Text_MESSAGE)
  AddGadgetItem(#Listicon_EVENT, -1, last$)
  SetGadgetText(#Text_MESSAGE, "Button HIDE event...")
  HideGadget(#Button_0,1)
EndProcedure

Procedure Button_1_Event(Type)
  Debug "#Button_1"
  last$ = GetGadgetText(#Text_MESSAGE)
  AddGadgetItem(#Listicon_EVENT, -1, last$)
  SetGadgetText(#Text_MESSAGE, "Button 1 PRESSED!")
EndProcedure

Procedure Button_0_Event(Type)
  Debug "#Button_0"
  last$ = GetGadgetText(#Text_MESSAGE)
  AddGadgetItem(#Listicon_EVENT, -1, last$)
  SetGadgetText(#Text_MESSAGE, "Button 0 PRESSED!")
EndProcedure
;}

;{- Build Form
Procedure Open_Window_MAIN()

  If OpenWindow(#Window_MAIN, 5, 5, 400, 277, "JILES EXAMPLE 1.0",  #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_TitleBar )
    TextGadget(#Text_MESSAGE, 5, 255, 390, 20, "", #PB_Text_Center | #PB_Text_Border)
    ButtonGadget(#Button_0, 5, 10, 120, 30, "Button 0")
    Gadgets(Str(#Button_0)) = @Button_0_Event()
    ButtonGadget(#Button_1, 5, 45, 120, 30, "Button 1")
    Gadgets(Str(#Button_1)) = @Button_1_Event()
    ButtonGadget(#Button_HIDE0, 5, 80, 120, 30, "HIDE BUTTON 0")
    Gadgets(Str(#Button_HIDE0)) = @Button_HIDE0_Event()
    ButtonGadget(#Button_HIDE1, 5, 115, 120, 30, "HIDE BUTTON 1")
    Gadgets(Str(#Button_HIDE1)) = @Button_HIDE1_Event()
    ButtonGadget(#Button_HIDEALL, 5, 150, 120, 30, "HIDE ALL BUTTONS")
    Gadgets(Str(#Button_HIDEALL)) = @Button_HIDEALL_Event()
    ButtonGadget(#Button_SHOWALL, 5, 220, 120, 30, "SHOW ALL BUTTONS")
    Gadgets(Str(#Button_SHOWALL)) = @Button_SHOWALL_Event()
    ListIconGadget(#ListIcon_EVENT, 140, 10, 250, 240, "EVENT", 130, #PB_ListIcon_GridLines)
    Gadgets(Str(#ListIcon_EVENT)) =  @ListIcon_EVENT_Event()
  EndIf
EndProcedure
;}


;{- Main Program Loop
Open_Window_MAIN()

SetGadgetText(#Text_MESSAGE, "PROGRAM START")

Define EventFunction.ProtoEvents
Repeat

  Event  = WaitWindowEvent()
  Gadget = EventGadget()
  Type   = EventType()
  Window = EventWindow()

  Select Event
    Case #PB_Event_Gadget
      EventFunction = Gadgets(Str(Gadget))
      EventFunction(Type)
  EndSelect

Until Event = #PB_Event_CloseWindow

End
;} 
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
Lothar Schirm
Beiträge: 41
Registriert: 30.04.2012 16:38

Re: GUI Erstellung & Event Handling - Methoden, Strategien

Beitrag von Lothar Schirm »

Hallo K.Putt,

der neue Form Designer 5.00 nimmt Dir doch beim Event Handling einiges an Arbeit ab, wenn Du ihn für jedes Fenster eine Event-Prozedur erstellen lässt. Du brauchst dann für jedes Fenster nur ein Event-File anzulegen, in das Du für Deine Gadgets die Event-Prozeduren schreibst. Ins Hauptprogramm schreibst Du dann nur einen kurzen Eventloop für Deine Fenster. Schau mal ins englische Forum, da gibt es eine Beschreibung von Polo dazu:
http://forums.purebasic.com/english/vi ... 0ad1f2dc3
Benutzeravatar
Kurzer
Beiträge: 1617
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Re: GUI Erstellung & Event Handling - Methoden, Strategien

Beitrag von Kurzer »

Ich muss zugeben, dass mich der neue FormDesigner bislang nicht sonderlich tangiert hat, da ich mit einem externen arbeite und auch meinen eigenen Eventhandler benutze (ts-soft hat ihn ja netterweise schon beworben).

Nachdem ich im "Fred-Interview" gelesen habe, dass der neu FormDesigner ab der kommenden Version integraler Bestandteil der IDE sein wird, habe ich die Befürchtung, dass ich mich mit ihm anfreunden "muss". Weiß jemand, ob man das ganze dann ohne Funktionseinbußen deaktivieren/ignorieren kann?

Ich habe nichts im speziellen gegen den neuen Designer, aber ich habe den externen FromDesigner und meinen Eventhandler einfach liebgewonnen und bin vermutlich zu unflexibel um mich umzugewöhnen (zumindest sofern ich ohne weiteres damit weiterarbeiten kann. ;)
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.02 x64, OS: Win 7 Pro x64 & Win 11 x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Useralter in 2024: 56 Jahre.
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Re: GUI Erstellung & Event Handling - Methoden, Strategien

Beitrag von PMV »

Wie kommst du auf ein "muss"? Es ändert sich nichts, als
das lediglich ein neues (lang gewünschtes) Feature dazu
kommt. Und sollte aus welchen unerfindlichen Gründen
doch dadurch deine Umgebung nicht mehr wie gewohnt
funktionieren, kannst du dich sicher bei Fred beschweren,
sprich es als Bug melden. <)

MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Antworten