Seite 1 von 1

GUI Erstellung & Event Handling - Methoden, Strategien

Verfasst: 16.12.2012 15:44
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:

Re: GUI Erstellung & Event Handling - Methoden, Strategien

Verfasst: 16.12.2012 15:54
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

Re: GUI Erstellung & Event Handling - Methoden, Strategien

Verfasst: 16.12.2012 16:25
von Kiffi
.NET-Programme laufen auch unter Linux und MacOS.

Stichwort: Mono

Grüße ... Kiffi

Re: GUI Erstellung & Event Handling - Methoden, Strategien

Verfasst: 16.12.2012 16:29
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

Re: GUI Erstellung & Event Handling - Methoden, Strategien

Verfasst: 16.12.2012 17:37
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
;} 

Re: GUI Erstellung & Event Handling - Methoden, Strategien

Verfasst: 17.12.2012 17:16
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

Re: GUI Erstellung & Event Handling - Methoden, Strategien

Verfasst: 17.12.2012 17:33
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. ;)

Re: GUI Erstellung & Event Handling - Methoden, Strategien

Verfasst: 19.12.2012 14:11
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