Hoffe mir kann jemand bei dem nachfolgenden Problem helfen.
Beim folgenden Testcode nicht über die Konstanten usw. wundern, ich habe einfach entsprechenden Code aus dem CAV-Source kopiert und einzeln lauffähig gemacht.
Der Code demonstriert eine kleine Auswahlbox, die nach dem Anklicken des Buttons "..." erscheint. Die Einträge in dieser Auswahlbox können sowohl mit der Maus angeklickt werden als auch mit den Cursortasten und anschließendem Return. Soweit funktioniert alles wunderbar.
Was ich gerne vermeiden will, ist folgendes: wenn mit der Maus über einen Eintrag gefahren wird, ist dieser erstmal markiert. Wenn nun auf den Scrollbalken geklickt wird, wird die Auswahl mit dem zuletzt markierten Eintrag als Ergebnis abgeschlossen.
Genau dies möchte ich aber vermeiden. Beim Anklicken des Scrollbalkens soll gar nichts weiter passieren, außer dass gescrollt wird.
Leider habe ich es nicht geschafft, das Anklicken des Scrollbalkens auszufiltern, weil dieser Vorgang kein anderes Ereignis (Event) als das direkte Anklicken eines Eintrags liefert...
Hoffe, jemand bringt mir die Erleuchtung...
Und nun nach der langen Vorrede der Code:
Code: Alles auswählen
Enumeration
#MainWindow
#AuthorWin
#AuthorWinFrame
#AuthorWinText
#AuthorWinCombo
#AuthorWinQuit
#AuthorWinExit
#SearchAuthorSelect
EndEnumeration
;- Authors-Window
Procedure OpenAuthors()
; Opens a new window for choosing authors
; nearby the mouse cursor
If OpenWindow(#AuthorWin,0,0,190,104,#PB_Window_BorderLess|#PB_Window_Invisible,"",WindowID(#MainWindow))
If CreateGadgetList(WindowID())
x = 8 : y = 28 : w = 174
Frame3DGadget (#AuthorWinFrame, 3,3,184,98,"Choose author") ; Title: Choose author to search:
TextGadget (#AuthorWinText, x,y,w,20,"Authors",#PB_Text_Center) : y + 16 ; Authors
ComboBoxGadget(#AuthorWinCombo,x,y,w,400) : y + 26
For a=1 To 100
AddGadgetItem(#AuthorWinCombo,-1,"Test "+Str(a))
Next
ButtonGadget (#AuthorWinQuit, x,y,w,24,"Cancel") ; Cancel (after choosing a keyword the window will be automatically closed)
EndIf
AddKeyboardShortcut(#AuthorWin,#PB_Shortcut_Escape,#AuthorWinExit)
EndIf
EndProcedure
Procedure ShowAuthors()
SetGadgetState(#AuthorWinCombo,-1)
UseWindow(#AuthorWin)
MoveWindow(DesktopMouseX(),DesktopMouseY())
HideWindow(#AuthorWin,0)
SetWindowPos_(WindowID(#AuthorWin),#HWND_TOPMOST,0,0,0,0,#SWP_NOMOVE|#SWP_NOSIZE)
EnableWindow_(WindowID(#MainWindow), #False)
EndProcedure
Procedure HideAuthors()
EnableWindow_(WindowID(#MainWindow), #True)
HideWindow(#AuthorWin,1)
EndProcedure
Flags.l = #PB_Window_SystemMenu|#PB_Window_TitleBar
MainWin = OpenWindow(#MainWindow, 100, 100, 200, 100, Flags, "Test")
If MainWin
If CreateGadgetList(WindowID())
ButtonGadget(#SearchAuthorSelect, 50, 50, 20, 20, "...")
EndIf
EndIf
OpenAuthors()
run = #True
Repeat
Event = WaitWindowEvent()
WindowID = EventWindowID()
GadgetID = EventGadgetID()
MenuID = EventMenuID()
EvTypeID = EventType()
event2.l=EventwParam() ; this we need for checking keycode + mouseclick (Return=13, LeftMB=1)
;- Events MainWin
If WindowID = #MainWindow
;- MainWin ExitEvent
If Event = #PB_EventCloseWindow
run = #False
ElseIf Event = #PB_EventGadget
If GadgetID = #SearchAuthorSelect
ShowAuthors()
EndIf
EndIf
;- Events Authors
ElseIf WindowID = #AuthorWin
If GadgetID = #AuthorWinQuit
HideAuthors()
ElseIf GadgetID = #AuthorWinCombo ; Author choosen
;Debug "GadgetID = " + Str(GadgetID)
;Debug "event2 = " + Str(event2)
;Debug "evType = " + Str(EvTypeID)
; ********** Abfrage der Auswahlliste **********
If event2 = 1 Or event2 = 13 ; LeftMouseButton or RETURN pressed
a = GetGadgetState(#AuthorWinCombo)
If a > 0
Debug "Selected item: " + GetGadgetText(#AuthorWinCombo)
HideAuthors()
EndIf
EndIf
; **********************************************
EndIf
If MenuID = #AuthorWinExit
HideAuthors()
EndIf
EndIf
Until run = #False
