Seite 1 von 1

Bitte um "Initial"-Zündung, komme einfach nicht klar...

Verfasst: 02.11.2009 20:46
von hempelr
Versuche die Version 4.31 als Testversion unter Linux Mint Gloria (entspr. Ubuntu Jaunty, 9.04) einzusetzen, komme aber überhaupt nicht klar.
Gegenüberstellung zu kBasic und Gambas ist gedacht, weil ich dringend ein günstiges, gutes Cross-Plattform-Entwicklungstool lernen möchte.
Aber ich bekomme nichts hin in PureBasic.
Der Visuelle Editor (externer Download, entgegen der Aussage in den FAQs) integriert sich nicht in den Editor, ich hab versucht ihn manuell einzubinden mit Tastenkombination, da spinnt dann das gesamte PureBasic, man kann den Buchstaben oder die Zahl die in der Kombination mit Strg oder Alt oder Shift zugewiesen wurde im Editor nicht benutzen, weil da dann immer der visuelle Editor aufspringt.
Weiterhin sind keine Tooltips im VisEd (PureBasic Visual Designer v4.0 Alpha 16 build 1128) auf dem Gadgetwerkzeug vorhanden, die Werkzeugleiste passt bei 1024x768 nicht auf den Bildschirm. (In Win sind die Werkzeuge als Einzelfenster, nicht als MDI wie in Linux...)

Dann bau ich ein Formular mit ein paar Gadgets. Der Code, der erzeugt wird, ist so nirgendwo beschrieben, es kommt beim Ausführen, was auch nur über manuelles Laden in PureBasic funtkioniert, eine Fehlermeldung:
Depraced Function 'Create GadgetList' used

Wie Ereignisprozeduren dann angelegt werden, schneide ich absolut nicht, es ist irgendwie vollkommen anders als bei allen anderen Werkzeugen.

Um mal Nägel mit Köpfen zu machen, mal meine eigentlich triviale Aufgabenstellung:

bei Ändern des Datums im Monats-Gadget soll dieses im Textfeld angezeigt werden, bei Klick auf den Button soll das Datum auf wieder auf das aktuelle springen und im Textfeld soll der Text "Ausgangsansicht" ausgeben werden.

Hier der Quelltext, den der VisDes generiert:

Code: Alles auswählen

Global Window_0, Date_0, String_0, Button_0, Text_0
Procedure Open_Window_0()
  Window_0 = OpenWindow(#PB_Any, 5, 5, 283, 165, "Window 0",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
  If Window_0
    If CreateGadgetList(WindowID(Window_0))
      Date_0 = DateGadget(#PB_Any, 10, 10, 140, 23, "%dd.%mm.%yyyy", Date(), #PB_Date_UpDown)
      String_0 = StringGadget(#PB_Any, 160, 10, 110, 23, "")
      Button_0 = ButtonGadget(#PB_Any, 200, 130, 60, 23, "OK")
      Text_0 = TextGadget(#PB_Any, 10, 40, 260, 63, "Ausgangsansicht", #PB_Text_Center) 
    EndIf
  EndIf
EndProcedure

Open_Window_0()

Repeat
  Event  = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
End
Mhm - wie bekommt man da nun Ereignisprozeduren rein, die das machen, was ich will?

In den vergleichbaren Umgebungen (Gambas, kBasic, RealBasic) ist das in weniger als 5 Minuten fertig, ohne grosse Sucherei in Dokus und Foren, die Editoren helfen einen dabei.
Das manuell zu machen wäre ja auch kein Problem, aber ich habe in keiner der Dokus bis jetzt etwas einfaches, reproduzierbares dazu gefunden. Die eine Doku hantiert mit Konstanten der Art #PB_irgendwas, die andere mit GadgetIDs...


Wie geht das nun, wie kann man onChange, onClick etc. abfangen und dazu Ereignisprozeduren schreiben, wie kann man die Eigenschaften von Gadgets abfragen und ändern?
Bitte bitte erklärt das irgendjemand mal, ich möchte das gerne begreifen...das Beispiel von oben als Basis, wenn das klar wird, hoffe ich allein weiter zu kommen...

Fakt ist, dass keine der Entwicklungswerkzeuge so genial kleine ausführbare Dateien generiert, ohne dass man irgendwelche Bocksprünge mit Runtime oder sepziellen Bibs oder sonstwas machen muss.

Danke für eine Erklärung für einen, wahrscheinlich absolut dämlichen, Programmieranfänger der mit visuellen Werkzeugen "versaut" ist ;-)

Re: Bitte um "Initial"-Zündung, komme einfach nicht klar...

Verfasst: 02.11.2009 21:12
von ts-soft
PB ist kein OOP, bzw. Ereignisproceduren gibts so nicht, sondern eine Ereignisschleife.
Wie dies Aussieht, kannste den Beispielen im Examples-Ordner, sowie den div. Snippets
in den Foren, CodeArchiv usw. entnehmen.
Ein gutes Beispiel findeste hier: http://www.purebasic.fr/german/viewtopi ... 44#p247044

Wenn Du also unbedingt Ereignisprozeduren benötigst, schreib sie Dir :mrgreen:

Gruß
Thomas

Re: Bitte um "Initial"-Zündung, komme einfach nicht klar...

Verfasst: 02.11.2009 21:30
von Kaeru Gaman
mal dein Beipsiel erweitert:

Code: Alles auswählen

Global Window_0, Date_0, String_0, Button_0, Text_0
Procedure Open_Window_0()
  Window_0 = OpenWindow(#PB_Any, 5, 5, 283, 165, "Window 0",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
  If Window_0
    If CreateGadgetList(WindowID(Window_0))
      Date_0 = DateGadget(#PB_Any, 10, 10, 140, 23, "%dd.%mm.%yyyy", Date(), #PB_Date_UpDown)
      String_0 = StringGadget(#PB_Any, 160, 10, 110, 23, "")
      Button_0 = ButtonGadget(#PB_Any, 200, 130, 60, 23, "OK")
      Text_0 = TextGadget(#PB_Any, 10, 40, 260, 63, "Ausgangsansicht", #PB_Text_Center)
    EndIf
  EndIf
EndProcedure

Open_Window_0()

Repeat
  Event   = WaitWindowEvent()
  EvGadgt = EventGadget()
  Select Event
    Case #PB_Event_Gadget
      Select EvGadgt
        Case Date_0
          ; Event im Date-Gadget
        Case String_0
          ; Event im String-Gadget
        Case Button_0
          ; Event im Button-Gadget
        Case Text_0
          ; Event im Text-Gadget
      EndSelect
    Case #PB_Event_CloseWindow
      EXIT = 1
  EndSelect
Until EXIT = 1
End
PS:
sorry, du fragst ja nach Linux...
also, im Großen und Ganzen funktioniert das schon genauso, aber vielleicht entgeht mir das eine oder andere Detail was in Linux anders wäre...

Re: Bitte um "Initial"-Zündung, komme einfach nicht klar...

Verfasst: 02.11.2009 22:10
von hempelr
@TS-Soft
Danke für die Antwort, hast mich halt einfach noch mehr herausgefordert...

In Windows mit dem JaPBe ist einem ein sehr gutes Werkzeug gegeben, die Keywordergänzung und die Hilfe sind absolut gut, dank dessen ist es mir tatsächlich gelungen, das so hinzubekommen wie im Ausgangsposting angerissen.
Ich spiel mal noch bissel weiter rum, bis ich das begriffen und nicht nur abgeguckt habe, aber es sieht tatsächlich nach ersten kleinen Erfolgserlebnissen aus ;)

Nur nochmal zum Gegencheck:
a) Ereignisse werden in Schleifen abgefangen, je nach Ebene des Fensters bzw. Formulars bzw. Gruppe auf einem Formular sind dies verschachtelt - sehe ich das erst mal richtig?

b) Ereignisprozeduren werden als seperate Prozeduren definiert, innerhalb einer Schleife wird beim Eintreffen des betreffenden Ereignisses bei dem entsprechenden Gadget diese aufgerufen?

@Kaeru Gaman
so ungefähr begreife ich wie du das meinst. Persönlich hab ich was gegen SelectCase, in Perl gibts das nicht, deshalb sind mir else-elseif-Schleifen lieber (aber das ist wahrscheinlich in die Kategorie Altersstarrsinn des Hilfesuchenden einzustufen :mrgreen: )

Das was jetzt erst mal sowohl in lx als auch win passt ist das:

Code: Alles auswählen

 
... 
Event  = WaitWindowEvent()
  If EventGadget() = Button_0
    SetGadgetText(Text_0,"Test")
    SetGadgetText(String_0,GetGadgetText(Date_0))
    
  EndIf
...
Ich glaub ich muss noch bissel lesen und probieren, eh es zu brauchbaren Ergebnissen kommt... /:->, aber ich hoffe, die Mühe lohnt sich und rechne weiter mit Hilfe hier im Forum...

Re: Bitte um "Initial"-Zündung, komme einfach nicht klar...

Verfasst: 02.11.2009 22:24
von ts-soft
Deine Schleife passt leider noch nicht ganz. Hier ein etwas kompletteres Beispiel mit If - ElseIf - EndIf
da wird Dir auch schnell klar, warum Select - Case - EndSelect besser geeignet ist :mrgreen:

Code: Alles auswählen

event = WaitWindowEvent()
If event = #PB_Event_CloseWindow
  ; fenster schliessen
ElseIf event = #PB_Event_Gadget
  gadget = EventGadget()
  If gadget = #btnOk
    ; #btnOk wurde gedrückt
  ElseIf gadget = #btnStop
    ; #btnStop wurde gedrückt
    type = EventType()
    If type = #PB_EventType_LeftClick
      ; usw.
    EndIf
  EndIf
ElseIf event = #PB_Event_Menu
  menu = EventMenu()
  If menu = 0
  ; usw.
  EndIf
EndIf
Gruß
Thomas

Re: Bitte um "Initial"-Zündung, komme einfach nicht klar...

Verfasst: 02.11.2009 22:30
von Kiffi
hempelr hat geschrieben:Das was jetzt erst mal sowohl in lx als auch win passt ist das:

Code: Alles auswählen

 
... 
Event  = WaitWindowEvent()
  If EventGadget() = Button_0
    SetGadgetText(Text_0,"Test")
    SetGadgetText(String_0,GetGadgetText(Date_0))
    
  EndIf
...
nicht wirklich ;-)

Du hast vergessen abzufragen, ob das Event, welches Dir WaitWindowEvent()
zurückliefert, von einem Gadget erzeugt wurde. Erst dann solltest Du EventGadget()
auswerten:

Code: Alles auswählen

 
... 
Event  = WaitWindowEvent()

If Event = #PB_Event_Gadget ; <- Da!
  If EventGadget() = Button_0
    SetGadgetText(Text_0,"Test")
    SetGadgetText(String_0,GetGadgetText(Date_0))
    
  EndIf
...
ich persönlich verwende lieber Select ... Case ... EndSelect
als IF ... EndIf. Aber das ist Geschmackssache:

Code: Alles auswählen

Event = WaitWindowEvent()

Select Event 
    
  Case #PB_Event_Gadget
    
    Select EventGadget()
    
      Case Button_0
        
        SetGadgetText(Text_0,"Test")
        SetGadgetText(String_0,GetGadgetText(Date_0))
    
      Case ...
        
    EndSelect
    
  Case ...
    
EndSelect
Grüße ... Kiffi

Re: Bitte um "Initial"-Zündung, komme einfach nicht klar...

Verfasst: 02.11.2009 23:05
von hempelr
Danke, ihr seid einfach Klasse ;-)

Denkanstösse sind jetzt reichlich vorhanden, muss ich erst mal verdauen

Ich arbeite dran, und komme wieder :twisted: