Von AutoIt auf Purebasic umsteigen

Anfängerfragen zum Programmieren mit PureBasic.
Andy76
Beiträge: 11
Registriert: 07.02.2007 15:26

Von AutoIt auf Purebasic umsteigen

Beitrag von Andy76 »

Hi

Ich würde gerne von AutoIt auf Purebasic umsteigen.
AutoIt verwendet eine Basic artige Programmiersprache.

Ich würde gerne mit Purebasic im On Event Modus programmieren.
Ich stehe aber so ziemlich auf dem Schlauch und komme nicht weiter.

Ein kleines Beispiel:
Ein Fenster mit einem Button wird erstellt.
Beim Drücken des Buttons erscheint eine Messagebox (MessageRequester in Purebasic)
und das Programm wird beendet.

So sieht das in AutoIt aus:

Code: Alles auswählen

#include <GUIConstants.au3>

Opt("GUIOnEventMode", 1) ;On Event Modus wird aktiviert

GUICreate("TEST Fenster", 180, 95 ) ;Fenster erstellen
$beenden = GUICtrlCreateButton ("Beenden", 50, 60, 80, 25) ;Button Beenden erstellen
GUISetState() ;Fenster wird sichtbar gemacht
GUICtrlSetOnEvent($beenden, "beenden") ;Zuordnung des Buttons beenden

;Hauptschleife
While 1
Sleep (20)
WEnd

;Function Beenden die aufgerufen wird wenn der Button gedrückt wird
Func beenden()
	 MsgBox(32,"Test", "Programm wird beendet") ;Messagebox wird angezeigt
	 Exit ;Programm wird beendet
EndFunc
Und in Purebasic, soweit ich gekommen bin:

Code: Alles auswählen

If OpenWindow(0, 100, 100, 180, 95, "Test Fenster")
     If CreateGadgetList(WindowID(0))
        ButtonGadget (0, 50, 60, 80 , 25, "Beenden")
     EndIf
EndIf

While 1
  Delay(20)
Wend
Gruß Andy
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Von AutoIt auf Purebasic umsteigen

Beitrag von Kiffi »

> Und in Purebasic, soweit ich gekommen bin:

sieht doch schon mal gar nicht so schlecht aus.
Du musst jetzt nur noch die Event-Schleife überarbeiten:

Code: Alles auswählen

Repeat
  WWE = WaitWindowEvent() ; Ereignisse abfragen
  Select WWE ; Welches Ereignis ist aufgetreten?
    Case #PB_Event_Gadget ; Ein Gadget-Event ist aufgetreten
      Select EventGadget() ; Welches Gadget hat das Ereignis ausgelöst?
        Case 0 ; Dein Button wurde gedrückt
          MessageRequester("Hurra", "Knopp gedrückt!")
          Quit = #True
      EndSelect
    Case #PB_Event_CloseWindow ; Fenster wurde geschlossen
      Quit = #True
  EndSelect
Until Quit = #True
Grüße ... Kiffi
a²+b²=mc²
mknjc
Beiträge: 217
Registriert: 09.09.2006 12:59

Beitrag von mknjc »

Das geht nicht so einfach da PureBasic dafür keine CallBacks erstellen kann. Aber trotdem gibt es eine andere einfache Möglichkeit:

Code: Alles auswählen

Procedure Beenden()                                   ; In PureBasic heißt es Procedure und nicht Func
    MessageRequester("Test", "Programm wird beendet") ; Wie du gesagt hast eine Nachrichtenbox anzeigen.
    End                                               ; Und das Programm Beenden
EndProcedure

If OpenWindow(0, 100, 100, 180, 95, "Test Fenster")   ; Das Fenster öffnen
    If CreateGadgetList(WindowID(0))                  ; Die Liste der Gadgets erstellen
        ButtonGadget (0, 50, 60, 80 , 25, "Beenden")  ; Den Knopf erstellen mit der Nummer 0
    EndIf 
EndIf 

Repeat                                                ; Repeat ist schöner da man ForEver verwenden kann
    Event = WaitWindowEvent()                         ; Hält das Programm solange an bis irgentwas passiert und schreibt was passiert in Event
    
    If Event = #PB_Event_Gadget And EventGadget() = 0 ; Wenn das Event ein GadgetEvent ist und das Gadget die Nummer 0 hat:
        Beenden()                                     ; Die Procedure bzw. Funktion Beenden() aufrufen
    EndIf
ForEver                                               ; Dann muss der Code nicht immer gucken ob 1=1 ist^^
Mfg mknjc

[Edit]Da war der Kiffi schneller das kommt davon wenn man das Antworten Fenster öffnet obwohl man nichtmal den Code geschrieben hat.[/Edit]
Ich nutze PureBasic 4.02 unter Linux und Windows.

Momentane Projekte:
Das geheimste aller geheimen Projekte... FPBC
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

Beitrag von ts-soft »

AutoIt ist eine Scriptsprache. Der OnEvent Modus ist dort eine Notlösung.
Diese Art der Eventbearbeitung belastet das System, in dem ja noch mehr
Programme ihren Dienst tun, unnötig.

Am besten Du vergißt alles, was Du in AutoIt gelernt hast und lernst
PureBasic ohne vergleiche zu stellen. Tutorials zur Eventbearbeitung gibts auf
www.purearea.net. Suchen hier im Forum sollte auch helfen :wink:

sleep und delay in eventschleifen sind böhse meist :wink:
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
Antworten