Popups-Menüs: Nur bei rechter Maustaste!

Übersicht BlitzBasic BlitzPlus

Neue Antwort erstellen

BtbN

Betreff: Popups-Menüs: Nur bei rechter Maustaste!

BeitragSo, Sep 18, 2005 11:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Ich habe ein kleines GUI-Prog gemacht, das Popup-Menüs verwendet, wenn man auf einen eintrag in ner ListBox klickt.
Die Popup-Menüs funktionieren auch super, nur, sie kommen bei JEDEM klick auf ein ListBox-Elemnt. Aber es soll nur bei einem Rechtsklick aufpoppen.
Und GetMouse(), MouseHit(2),... liefern nichts zurück.
Habt ihr ne Idee, wie ichs anstellen kann, dass der das nur bei nem Rechtsklick öffnet?
  • Zuletzt bearbeitet von BtbN am Di, Sep 20, 2005 16:36, insgesamt einmal bearbeitet

BlitzChecker

BeitragMo, Sep 19, 2005 19:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Hmm... So ein ähnliches Problem hatt ich auch mal. Habs bis heute aber noch nicht hingekrigt. Würd mich auch interessieren.
www.xairro.com

BtbN

BeitragDi, Sep 20, 2005 13:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Hat denn wirklich NIEMAND eine Idee?
Ich bin sicher, das es irgendwie geht!
Womöglich üba die WinAPI...
  • Zuletzt bearbeitet von BtbN am Di, Sep 20, 2005 16:36, insgesamt einmal bearbeitet

Artemis

BeitragDi, Sep 20, 2005 15:57
Antworten mit Zitat
Benutzer-Profile anzeigen
tu mal code, da kann man mehr mit anfangen

BtbN

BeitragDi, Sep 20, 2005 16:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
Usermenu = CreatePopupMenu()
AddPopupMenuItem(Usermenu,"PM Senden",2)
AddPopupMenuItem(Usermenu,"",50)
AddPopupMenuItem(Usermenu,"PMs Ignorieren",19)
AddPopupMenuItem(Usermenu,"User Ignorieren",20)
AddPopupMenuItem(Usermenu,"",50)
AddPopupMenuItem(Usermenu,"Kick",10)
AddPopupMenuItem(Usermenu,"Maulkorb",11)
AddPopupMenuItem(Usermenu,"Bann",12)
AddPopupMenuItem(Usermenu,"OP Vergeben",13)

Chatmenu = CreatePopupMenu()
AddPopupMenuItem(Chatmenu,"Wichtig",14)
AddPopupMenuItem(Chatmenu,"Löschen",15)
AddPopupMenuItem(Chatmenu,"Pinnen",16)
AddPopupMenuItem(Chatmenu,"Verlauf leeren",17)
AddPopupMenuItem(Chatmenu,"Best of...",18)
AddPopupMenuItem(Chatmenu,"",50)
AddPopupMenuItem(Chatmenu,"Analyte Msg...",5)


Code: [AUSKLAPPEN]
ev = WaitEvent(10)
Select ActiveWindow()

 Case Win

  Select ev
   Case $201
    Print "hit"
   Case $401
    Select EventSource()
     Case Tex
      If EventData() = 13 And TextFieldText(Tex) <> "" Then
       i$ = UrlEncode(TextFieldText(Tex))
       SetGadgetText(Tex,"")
       temp = CallURL("http://c.chat-blitz.de/blitzchat/chat.php?user="+username$+"&userpass="+password$+"&version=171&beitrag="+i$)
       Goto aktuall
      EndIf
     Case LBox
      ShowPopupMenu(Usermenu,MouseX(),MouseY(),Win)
     Case LBox2
      ShowPopupMenu(Chatmenu,MouseX(),MouseY(),Win)
      If SelectedGadgetItem(LBox2) <> -1 Then
       SetStatusText(Win,GadgetItemText(LBox2,SelectedGadgetItem(LBox2)))
       SelectGadgetItem(LBox3,SelectedGadgetItem(LBox2))
      EndIf
     Case LBox3
      If SelectedGadgetItem(LBox3) <> -1 Then
       SetStatusText(Win,GadgetItemText(LBox2,SelectedGadgetItem(LBox3)))
       SelectGadgetItem(LBox2,SelectedGadgetItem(LBox3))
      EndIf
    End Select
 End Select
End Select


Code: [AUSKLAPPEN]
Function EnablePopupMenuItem(h,i,z)
        EnableMenuItem(h,i,$400+z)
End Function
;(De)markiert ein MenuItem
;h = Handle des PopupMenus
;i = Index der Item (ab Null) (Striche zählen als Item!)
;z = Neuer Zustand: 0 = normal (anwählbar)
;                                        1 = Grau (nicht anwählbar)
;                                        2 = schwarz, aber nicht anwählbar



Function CheckPopupMenuItem(h,i,z)
        CheckMenuItem(h,i,$400+(z*$8))
End Function
;(Ent)häckelt ein MenuItem
;h = Handle des PopupMenus
;i = Index der Item (ab Null) (Striche zählen als Item!)
;z = Neuer Zustand: 1 = Häckchen;0 = nichts



Function ShowPopupMenu(h,x,y,w)
        TrackPopupMenuEx(h,0,x,y,QueryObject(w,1),0)
End Function
;Zeigt das Popup-Menu an.
;h = Handle des PopupMenus
;x,y = Position des Menus zur linken, oberen Bildschirmecke
;w = Handle des Fensters, das PArent für das Menu ist



Function AddPopupMenuItem(h,t$,Id,s=$0,subM=0,r=0)
        b2 = CreateBank(Len(t)+1)
                For x = 1 To Len(t)
                        PokeByte b2,x-1,Asc(Mid(t,x,1))
                Next
                PokeByte b2,x-1,0

               
        b1 = CreateBank(44)
                PokeInt b1,0,44
                PokeInt b1,4,$3B+((subM>0)*$4)
                PokeInt b1,8,$800*(t="")+(r*$200)
                PokeInt b1,12,s
                PokeInt b1,16,ID
       
                PokeInt b1,20,subM
                PokeInt b1,24,0
                PokeInt b1,28,0
       
                PokeInt b1,32,0
                PokeInt b1,36,ptr_helper__(b2,1,1)
                PokeInt b1,40,Len(t)
               
        InsertMenuItem(h,0,0,b1)
       
        FreeBank b1
        FreeBank b2
End Function
;Fügt ein Eintrag am Ende eines Popupfensters hinzu.
;h  = Handle des PopupMenus
;t  = Text der angezeigt werden soll oder "" für eine Trennlinie  (& vor Buchstaben für Shortcut)
;ID = Kennnummer, die beim Event $1001 in EventData ist
;s=Styles:        $8                Häckchen
;                        $1000        Fett
;                        $3                Ausgeschaltet (grau)
;                        $80                Highlight (ausgewählt, blauer Hintergrund)
;                        Flags können kombinert werden (durch Adition)
;subM = Handle des SubMenus, dass erscheinen soll, wenn man auf diesen Item kommt
;r = Punkte statt Häckchen verwenden (für nur eine Auswahl)


So, das is das wesentliche. Da is natürlich noch mehr, aber das möchte ich nicht veröffentlichen.

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragDi, Sep 20, 2005 16:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Problem liegt daran das der Event $401 Vorrang hat und den $201 dann nicht ausgibt!
$201 wird nur augegeben wenn kein $401 kommt!

Also nur wenn du neben einem Button klickst oder einer Listbox kommt der Mausevent!
Im Canvasfenster würde das gehen!

Einzige Möglichkeit die ich sehe, ist über Wimapi bzw *.dll
aber das übersteigt meine derzeitigen Fähigkeiten!

evt. gibt es da etwas im englischen Forum!
[BB2D | BB3D | BB+]

Hip Teen

BeitragDi, Sep 20, 2005 18:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Das einzige was mir einfallen würde ist dieser mit abfragen, ob die rechte Maustaste gedrückt wurde und dann abzufragen, ob sich die Maus über der Listbox befindet. Etwas anderes wüsste ich jetzt auch nicht.
Spruch der Woche: "Ahh, ein neues Gesicht?!" - "Nein, das hab ich schon länger"

BtbN

BeitragDi, Sep 20, 2005 18:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Sorry, aber damit kann man nur die Tastatur abfragen!

Hip Teen

BeitragDi, Sep 20, 2005 18:26
Antworten mit Zitat
Benutzer-Profile anzeigen
sorry, aber du kannst nich lesen. Kleines Zitat aus dem Code:
Zitat:
; -------------------------------------------------------------------------------------------------------------------------------------
; To use these functions, place the following lines in user32.decls in your userlib directory:
;
; .lib "user32.dll"
; GetAsyncKeyState%(vKey%)
; GetActiveWindow%()
;
; More info:
; http://msdn.microsoft.com/libr...yCodes.asp
; http://msdn.microsoft.com/libr...ystate.asp
; -------------------------------------------------------------------------------------------------------------------------------------

; Common keys:
Const VK_LEFTMOUSE = $01 ; Left physical mouse button
Const VK_RIGHTMOUSE = $02 ; Right physical mouse button


So, und jetzt sag mir für was "VK_LEFTMOUSE" und "VK_RIGHTMOUSE" steht. Ich finde die Tasten jedenfalls nur auf meiner Maus...
Spruch der Woche: "Ahh, ein neues Gesicht?!" - "Nein, das hab ich schon länger"

BtbN

BeitragDi, Sep 20, 2005 18:27
Antworten mit Zitat
Benutzer-Profile anzeigen
*kopfvorwanddötsch*
Sorry, das mein ommentar dazu Laughing

BtbN

BeitragDi, Sep 20, 2005 18:50
Antworten mit Zitat
Benutzer-Profile anzeigen
So, hab hinbekommen!
Meine Lösung:

Code: [AUSKLAPPEN]
If VKeyDown($02) Then
 thishit = thishit + 1
EndIf

In der Hauptschleife, und dann, bei Event $401:
Code: [AUSKLAPPEN]
   Case $401
    If thishit > 0 Then
     dahit = 1
     thishit = 0
    Else
     dahit = 0
    EndIf

Wenn dahit = 1 ist, wurde die Taste gedrückt!

Neue Antwort erstellen


Übersicht BlitzBasic BlitzPlus

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group