Events und Gadgets (2)

Anfängerfragen zum Programmieren mit PureBasic.
Tanaghra
Beiträge: 28
Registriert: 13.05.2017 01:44

Events und Gadgets (2)

Beitrag von Tanaghra »

Hallo,

weiß jemand eine Möglichkeit, wie man in PureBasic zu einem TextGadget ein Pop-up-Menü programmiert? Ich meine, wenn der Mauszeiger sich auf dem TextGadget befindet und man dann mit der rechten Maustaste klickt, daß dann ein Kontextmenü dazu erscheint. Ich habe so etwas in anderen Programmen gesehen, wo ein TextGadget mit vertieftem Rand (in PureBasic mit dem Flag #PB_Text_Border) z.B. für Dateipfade zu sehen war, das man dann rechts anklicken und den Dateipfad in die Zwischenablage kopieren konnte.

Um mir selbst ein erstes Bild zu verschaffen in bezug auf TextGadgets und Events, die man hierfür nutzen könnte, habe ich ein kleines Programm geschrieben:

Code: Alles auswählen

LoadFont(1,"MS Sans Serif", 10)
SetGadgetFont(#PB_Default, FontID(1))

OpenWindow(1, 0, 0, 295, 90, "Event-Test", #PB_Window_SystemMenu|
  #PB_Window_ScreenCentered)
TextGadget(2, 15, 15, 122, 23, "D:\Programmierung", #PB_Text_Border)
StringGadget(3, 155, 15, 123, 23, "D:\Programmierung")
TextGadget(4, 158, 54, 123, 20, "D:\Programmierung")
ButtonGadget(5, 15, 50, 122, 25, "Ereignisse")

Define Z, Ek, Et, GNr
Repeat
  Ek=WaitWindowEvent()
  Et=EventType()
  GNr=EventGadget()
  Z+1
  Debug Str(Z)+": "+"Event = "+Str(Ek)+", "+
    "EventType = "+Str(Et)+", "+
    "Gadget# = "+Str(GNr)
Until Ek=#PB_Event_CloseWindow
Die führenden Nummern erleichtern die Zuordnung der Ereignisse zu einer bestimmten Aktion (etwa dem Anklicken eines Gadgets). Das Öffnen des Fensters löst bei mir exakt 24 Ereignisse aus, die aber von wenig Interesse sind. Anders ist es, wenn man auf eines der vier Gadgets klickt; genau das will man ja wissen, was da an Ereignissen eintrudelt. WaitWindowEvent() registriert beim Anklicken der vier Gadgets folgende Events:

Das Anklicken des Buttons "Ereignisse" löst exakt 7 Events aus:
Event = 513, EventType = -1, Gadget# = 0 linke Maustaste gedrückt
Event = 15, EventType = -1, Gadget# = 0 Fensterabschnitt zeichnen
Event = 514, EventType = -1, Gadget# = 0 linke Maustaste losgelassen
Event = 13100, EventType = 0, Gadget# = 5 ein Fensterelement wurde angeklickt
Event = 512, EventType = -1, Gadget# = 5 Maus wurde bewegt
Event = 15, EventType = -1, Gadget# = 5 Fensterabschnitt zeichnen
Event = 275, EventType = -1, Gadget# = 5 #WM_TIMER
Das Anklicken des StringGadgets löst 7 Events aus:
Event = 513, EventType = -1, Gadget# = 0 linke Maustaste gedrückt
Event = 13100, EventType = 14000, Gadget# = 3 ein Fensterelement wurde angeklickt, EventType: Fokus erhalten
Event = 13100, EventType = 256, Gadget# = 3 ein Fensterelement wurde angeklickt, EventType: unbekannt
Event = 15, EventType = -1, Gadget# = 3 Fensterabschnitt zeichnen
Event = 514, EventType = -1, Gadget# = 3 linke Maustaste losgelassen
Event = 512, EventType = -1, Gadget# = 3 Maus wurde bewegt
Event = 275, EventType = -1, Gadget# = 3 #WM_TIMER
Das Anklicken der beiden TextGadgets (das mit vertieftem Rand und das ohne) löst 3 Events aus:
Event = 513, EventType = -1, Gadget# = 0 linke Maustaste gedrückt
Event = 514, EventType = -1, Gadget# = 0 linke Maustaste losgelassen
Event = 13112, EventType = 0, Gadget# = 0 linker Mausklick
Während man also mit Button- und StringGadgets (ereignisschleifenmäßig) noch ein bißchen was machen kann, passiert bei TextGadgets so gut wie nichts. Zumindest liefert PureBasics WaitWindowEvent-Befehl hier nichts Ergiebiges.

Vielen Dank
Windows 7 x64; geposteter Kode bezieht sich (sofern nicht anders angegeben) immer auf das aktuellste PureBasic 64-Bit

Erst wenn man es seiner Schwiegermutter erklären kann, hat man es verstanden.
As gsündeste is oiwei guad essn und dringa und ned grang wern.
Andesdaf
Moderator
Beiträge: 2658
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Re: Events und Gadgets (2)

Beitrag von Andesdaf »

Unter Windows kannst du mit SS_NOTIFY zumindest Linksklicks erfassen:

Code: Alles auswählen

TextGadget(2, 15, 15, 122, 23, "D:\Programmierung", #PB_Text_Border | #SS_NOTIFY)
Win11 x64 | PB 6.00 (x64)
Antworten