Events ...

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
PureLust
Beiträge: 1145
Registriert: 21.07.2005 00:02
Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
Wohnort: am schönen Niederrhein

Events ...

Beitrag von PureLust »

Hallo Zusammen, ...

ich bin ja noch relativ neu in Pure und taste mich momentan so durch das Event-Handling, was doch ein wenig anders ist als ich es bisher von anderen (z.B. OO-)Sprachen her kenne.

Laut Online-Hilfe gibt es ja 7 verschiedene (bekannte bzw. dokumentierte) Events.

Da ich dabei so einige vermisse (wie z.B. KB_Pressed, KB_Released, Mouse_Move,...) habe ich mich mal an ein kleines Prog gesetzt, welches mir die empfangenen Events ausgibt.

Hierbei kann man ja nun leicht sehen dass noch weitere als die 7 beschriebenen Events übermittelt werden.

Nun hätte ich dazu ein paar Fragen:
(Um bei einer möglichen Beantwortung leichter darauf eingehen zu können, hab ich sie mal durchnummeriert.) ;)

1. Hat es evtl. einen besonderen Grund warum diese Events nicht in der OH aufgelistet sind?
2. Sind diese weiteren Events irgendwo dokumentiert? Bzw. ist die Liste in der OnlineHilfe nicht vollständig?
3. Gibt es hierfür auch #PB_Event_Konstanten?
4. Gibt es diese (undokumentierten) Events mit der gleichen EventID auch unter Linux und MacOS?
5. Kann man evtl. auch irgendwie per Event abfangen, ob das Fenster minimiert bzw. maximiert wurde?

Anbei mal das kleine Prog mit dem ich mir die Events anzeigen lasse:

Code: Alles auswählen

#KbEv_ESC=2027
If OpenWindow(0,10,10,200,50,#PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_SizeGadget,"Beenden mit <ESC>")
  If CreateGadgetList(WindowID(0))
     ButtonGadget(0,15,10,100,20,"Button1")
  EndIf
  If CreateMenu(0,WindowID(0))
      MenuTitle("Menü1")
        MenuItem(101,"Eintrag 1-01")
        MenuItem(102,"Eintrag 1-02")
      MenuTitle("Menü2")
        MenuItem(201,"Eintrag 2-01")
        MenuItem(202,"Eintrag 2-02")
        MenuItem(203,"Eintrag 2-03")
        MenuItem(204,"Eintrag 2-04")
  EndIf
  AddKeyboardShortcut(0,#PB_Shortcut_Escape,#KbEv_ESC)
  Debug("Liste der bekannten Events (laut PB-OnlineHilfe):")
  Debug("---------------------------------------------------------------------------------")    
  Debug("#PB_Event_Menu="+Str(#PB_Event_Menu))
  Debug("#PB_Event_Gadget="+Str(#PB_Event_Gadget))
  Debug("#PB_Event_CloseWindow="+Str(#PB_Event_CloseWindow))
  Debug("#PB_Event_Repaint="+Str(#PB_Event_Repaint))
  Debug("#PB_Event_SizeWindow="+Str(#PB_Event_SizeWindow))
  Debug("#PB_Event_MoveWindow="+Str(#PB_Event_MoveWindow))
  Debug("#PB_Event_ActivateWindow="+Str(#PB_Event_ActivateWindow))
  Debug("---------------------------------------------------------------------------------")    
  Repeat
    AktEvent=WaitWindowEvent()
    If AktEvent=#PB_Event_Menu    
       AktMenuEvent = EventMenuID()
        Debug("=> Menü-Event ("+Str(AktEvent)+") - Menü-Eintrag: "+Str(AktMenuEvent))
       If AktMenuEvent=#KbEv_ESC: quit=1:EndIf
    ElseIf AktEvent=#PB_Event_Gadget    
        Debug("=> Gadget-Event ("+Str(AktEvent)+")")
    ElseIf AktEvent=#PB_Event_CloseWindow    
        Debug("=> CloseWindow-Event ("+Str(AktEvent)+")")
    ElseIf AktEvent=#PB_Event_Repaint    
        Debug("=> Repaint-Event ("+Str(AktEvent)+")")
    ElseIf AktEvent=#PB_Event_SizeWindow    
        Debug("=> SizeWindow-Event ("+Str(AktEvent)+")")
    ElseIf AktEvent=#PB_Event_MoveWindow    
        Debug("=> MoveWindow-Event ("+Str(AktEvent)+")")
    ElseIf AktEvent=#PB_Event_ActivateWindow   
        Debug("=> ActivateWindow-Event ("+Str(AktEvent)+")")
    Else
        Debug("Unbekannter Event: "+Str(AktEvent))
    EndIf
  Until Quit=1
EndIf
Für Anregungen und/oder Kritik zu o.g. Prog bin ich natürlich ebenfalls dankbar! ;)

ThanXXX und Gruß, PL.
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
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 »

PureLust hat geschrieben: 1. Sind diese weiteren Events irgendwo dokumentiert? Bzw. ist die Liste in der OnlineHilfe nicht vollständig?
Alle weiteren Events sind Plattformabhängig und deren Dokumentation ist dem jeweiligen SDK der Plattform zu entnehmen
PureLust hat geschrieben: 2. Gibt es hierfür auch #PB_Event_Konstanten?
Die API-Konstanten der zugrundeliegenden Plattform stehen vordefiniert zur Verfügung
PureLust hat geschrieben: 3. Hat es evtl. einen besonderen Grund warum diese Events nicht in der OH aufgelistet sind?
Ja, die kleinste mir bekannte API-Dokumentation für Windows z. B. (Win32.hlp) hat ca. 24 MB
PureLust hat geschrieben: 4. Gibt es diese (undokumentierten) Events mit der gleichen EventID auch unter Linux und MacOS?
Nein, nur die mit #PB_ beginenden sind Plattformunabhängig
PureLust hat geschrieben: 5. Kann man evtl. auch irgendwie per Event abfangen, ob das Fenster minimiert bzw. maximiert wurde?

Code: Alles auswählen

If OpenWindow(0, 100, 200, 195, 260, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget, "PureBasic Window")
  Repeat
    Select  WaitWindowEvent()
      Case #PB_Event_CloseWindow
        Break
      Case #PB_Event_MoveWindow
          If IsIconic_(WindowID(0))
            Debug "minimiert"
          EndIf
      Case #PB_Event_SizeWindow
          If IsZoomed_(WindowID(0))
            Debug "maximiert"
          EndIf
    EndSelect
  ForEver
EndIf
End
Dieser Code ist aber nur für Windows geeignet!
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
PureLust
Beiträge: 1145
Registriert: 21.07.2005 00:02
Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
Wohnort: am schönen Niederrhein

Beitrag von PureLust »

Hi Thomas, ...

erst mal vielen Dank für die schnelle Antwort.
:D

Das mit der Plattformabhängigkeit hatte ich schon befürchtet. :(

Aber dazu noch ein paar Fragen:
Alle weiteren Events sind Plattformabhängig und deren Dokumentation ist dem jeweiligen SDK der Plattform zu entnehmen
Hättest Du in Punkto guter SDK-Doku evtl. 'nen Tip für mich?
Oder meinst Du damit die PB-Doku der jeweiligen Plattform?
Die API-Konstanten der zugrundeliegenden Plattform stehen vordefiniert zur Verfügung
Hmmm... wie könnten diese denn z.B. für meinen Fall lauten und wo würde ich ggfl. eine Liste der Konstanten finden?
(Hinweis: Ich bin erst heute von jaPBE auf die orig. PB-IDE umgestiegen. Dort habe ich den Structure-Viewer gefunden. Könnte ich die Konstanten evtl. darin finden?)
Ja, die kleinste mir bekannte API-Dokumentation für Windows z. B. (Win32.hlp) hat ca. 24 MB
Ich habe gerade mal mein System nach der Win32.hlp durchsucht: Negativ !!!
Hättest Du evtl. eine Quelle für diese oder eine andere (gute?) API-Doku?

Zu 5: Danke, genau das hatte ich gesucht.
Aber dazu noch kurz 'ne Frage:
In der PB-Hilfe stehen die API's ja nicht drin.
Um nun bei sowas nicht jedes mal hier im Forum fragen zu müssen - wo hätte ich jetzt solche Info's selber herbekommen können (evtl. dann auch für andere Plattformen)?
Und da es ja wohl einen unendlichen Wust an API's gibt - kannst Du da evtl. eine besondere Vorgehensweise empfehlen, wie man am besten die für seinen Anwendungsfall richtigen/wichtigen API-Befehle am schnellsten findet?

Nochmals big ThanXXX und Gruß, PL.
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
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 »

Arbeite erstmal den Inhalt dieses Thread durch: http://forums.purebasic.com/german/viewtopic.php?t=16 :mrgreen: , ansonsten kannste Dir die API-Konstanten und Strukturen in der neuen Ide anzeigen lassen.

Ansonste CodeArchiv, viel Lesen und Lernen wo Du es wiederfindest, wenn Du es brauchst.
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
Laurin
Beiträge: 1639
Registriert: 23.09.2004 18:04
Wohnort: /dev/eth0

Re: Events ...

Beitrag von Laurin »

PureLust hat geschrieben:Laut Online-Hilfe gibt es ja 7 verschiedene (bekannte bzw. dokumentierte) Events.
Es gibt noch mehr, die sind aber für Otto-Normal-Programmierer eher unwichtig. Man kommt nur selten mit ihnen in Kontakt.
Da ich dabei so einige vermisse (wie z.B. KB_Pressed, KB_Released, Mouse_Move,...) habe ich mich mal an ein kleines Prog gesetzt, welches mir die empfangenen Events ausgibt.
Tastatureingaben werden mittels ExamineEyboard() + dazugehörige Befehle, Input()/Inkey() oder durch die WinAPI (getasynckeystate_() wenn ich mich richtig erinnere) ermittelt. Maus-Eingaben werden mittels ExamineMouse() + dazugehörige Befehle oder durch die WinAPI ermittelt.
Ich habe gerade mal mein System nach der Win32.hlp durchsucht: Negativ !!!
Hättest Du evtl. eine Quelle für diese oder eine andere (gute?) API-Doku?
Google, dein Herr und Meister! http://www.codingcrew.de/programmierung/win32hlp.php ;)
Um nun bei sowas nicht jedes mal hier im Forum fragen zu müssen - wo hätte ich jetzt solche Info's selber herbekommen können (evtl. dann auch für andere Plattformen)?
Und da es ja wohl einen unendlichen Wust an API's gibt - kannst Du da evtl. eine besondere Vorgehensweise empfehlen, wie man am besten die für seinen Anwendungsfall richtigen/wichtigen API-Befehle am schnellsten findet?
Für die WinAPI gibt es die MSDN (Microsoft Developer Network): http://msdn.microsoft.com
Ist aber leider alles englisch. Immerhin findet sich dort quasi alles. Bei Linux und anderen Plattformen kenne ich keine solchen Links.

Ansonsten: Google ;)

Greetz Laurin
Now these points of data make a beautiful line.
And we're out of beta. We're releasing on time.
Benutzeravatar
PAMKKKKK
Beiträge: 321
Registriert: 21.04.2005 22:08
Wohnort: Braunschweig
Kontaktdaten:

Beitrag von PAMKKKKK »

Ich habe im Englischen Forum eine enorme Auflistung an Event Konstanten gefunden.

http://forums.purebasic.com/english/vie ... ght=wmuser

schau doch mal rein...
Wir Schreiben ein PureBasic Buch.
Auch du kannst mitmachen!
http://www.purearea.net/pb/english/pure ... :Main_Page
Benutzeravatar
freedimension
Admin
Beiträge: 1987
Registriert: 08.09.2004 13:19
Wohnort: Ludwigsburg
Kontaktdaten:

Re: Events ...

Beitrag von freedimension »

Laurin hat geschrieben:Tastatureingaben werden mittels ExamineEyboard() + dazugehörige Befehle, Input()/Inkey() <snip> ermittelt. Maus-Eingaben werden mittels ExamineMouse() + dazugehörige Befehle <snip> ermittelt.
Wobei das dann, zumindest unter Windows, in die Zuständigkeit von DirectX fällt, was für Anwendungsprogrammierung ein wenig ungewöhnlich ist. Du kannst aber auch über AddKeyboardShortcut() bestimmte Tasten(-kombinationen) einer EventID zuordnen. Für alles andere hilft aber (unter Windows) tatsächlich GetAsyncKeystate, das hilft teilweise sogar bei der Abfrage der Mausbuttons.
Beginne jeden Tag als ob es Absicht wäre!
Bild
BILDblog
Benutzeravatar
Laurin
Beiträge: 1639
Registriert: 23.09.2004 18:04
Wohnort: /dev/eth0

Beitrag von Laurin »

Sag' ich doch :wink: <) :lol:
Now these points of data make a beautiful line.
And we're out of beta. We're releasing on time.
JoRo
Beiträge: 61
Registriert: 25.09.2004 17:45

Beitrag von JoRo »

bei #PB_Event_SizeWindow wird ein maximiieren nicht erkannt, habe ich gerade festgestellt.
Ist das ein Bug in der neuen Version 3.94?
Antworten