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

Anfängerfragen zum Programmieren mit PureBasic.
hempelr
Beiträge: 11
Registriert: 26.10.2009 15:31

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

Beitrag 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 ;-)
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: Bitte um "Initial"-Zündung, komme einfach nicht klar...

Beitrag 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
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

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

Beitrag 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...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
hempelr
Beiträge: 11
Registriert: 26.10.2009 15:31

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

Beitrag 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...
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: Bitte um "Initial"-Zündung, komme einfach nicht klar...

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

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

Beitrag 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
a²+b²=mc²
hempelr
Beiträge: 11
Registriert: 26.10.2009 15:31

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

Beitrag 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:
Antworten