Seite 1 von 1

Events ...

Verfasst: 22.08.2005 01:54
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.

Verfasst: 22.08.2005 02:21
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!

Verfasst: 22.08.2005 02:50
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.

Verfasst: 22.08.2005 03:15
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.

Re: Events ...

Verfasst: 22.08.2005 03:15
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

Verfasst: 22.08.2005 21:32
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...

Re: Events ...

Verfasst: 22.08.2005 23:03
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.

Verfasst: 23.08.2005 13:40
von Laurin
Sag' ich doch :wink: <) :lol:

Verfasst: 14.09.2005 10:03
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?