Seite 1 von 1

popupmenu im eigenbau

Verfasst: 23.05.2011 12:40
von delikanli_19_82
hallo leute,

es geht hier um eine konzeptionelle frage, wenn man jetzt ein eigenes control basteln möchte, zum beispiel ein eigenes popup-menu.

ich habe mir hierzu überlegt, das man ja ein borderless-window dafür prima einsetzen kann.

allerdings, bei echten popup-menüs, wie man es üblicherweise kennt, bleibt der fokus beim auslösenden fenster, auch wenn der popup aufgeklappt wird. ich meine, das fenster auf dem man den "Rechtsklick" zum aufklappen des menüs gemacht hat, verliert den fokus nicht. sie bleibt dennoch aktiv, während der popup-menü aufgeklappt wird und man nicht nur per mousemove bzw. over auf dem menü einen eintrag markieren kann, sondern man kann auch auf ein solchen eintrag einen mouse-down und mouse-up event anwenden. dabei bleibt der fokus immer noch ersichtlich beim mutterfenster. nachdem mouse-up verschwindet das menü.

ich habe zu diesem zweck verschiedenes probiert. beispielsweise den parentid für den popup-menü-fenster auf den auflösenden fenster gesetzt. unter mac funktioniert das gar nicht. unter linux habe ich dies noch nicht probiert. unter windows geht es zwar, wäre ja fast perfekt, wenn da nur nicht unter 7, dieses flackern wäre. man merkt wie das fenster den fokus zu nächst verliert und dann wieder zurück erhält. und zwar an dem schatten des fensters merkt man es.

stickywindow führt bei allen betriebssystemen dazu, das der fokus bei einem mouse-down vom mutterfenster auf den menü-fenster übertragen wird, auch wenn das mutterfenster-aktiv ist.

meine frage nun wäre, wie kann man das bei den einzelnen betriebsystemen lösen? das es einen weg gibt, das ist definitiv
der fall, da ja unter jedem betriebssystem verschiedene popup-menü modelle im einsatz sind, und eben die lösung demonstrieren.

ich überlege derzeit, mittels screenshots zu arbeiten, so das vom mutterfenster (und dessen schatten) zunächt ein screenshot erstellt, dann ein borderless-window mit der darstellung über ihn geöffnet wird. und dann die popup-menü
aufgeklappt wird, so das der fokus scheinbar noch beim mutterfenster liegt. ich glaube aber, das dieses vorgehen
nicht die beste lösung sein kann und höhstens dann in betracht gezogen werden kann, wenn sich wirklich, aber wirklich
keine andere lösung finden lässt. aber ich denke, es muss es einfach geben.

bin offen für vorschläge

mfg

kurt

Re: popupmenu im eigenbau

Verfasst: 23.05.2011 14:40
von RSBasic

Code: Alles auswählen

EnableExplicit

Define EventID
Define oldStyle

If OpenWindow(0,0,0,500,400,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
 
  If OpenWindow(1001,100,100,300,200,"Window",#PB_Window_BorderLess|#PB_Window_Invisible)
    SetWindowColor(1001,RGB(100,100,100))
    SetParent_(WindowID(1001),WindowID(0))
    HideWindow(1001,0)
    
    oldStyle=GetWindowLongPtr_(WindowID(1001),#GWL_STYLE)
    SetWindowLongPtr_(WindowID(1001),#GWL_STYLE,oldStyle|#WS_CHILD &(~#WS_POPUP))
    SetWindowPos_(WindowID(1001), 0,0,0,0,0,#SWP_NOMOVE|#SWP_NOSIZE|#SWP_NOZORDER|#SWP_FRAMECHANGED)
    SetActiveWindow(0)
   
  EndIf
 
  Repeat
    EventID=WaitWindowEvent()
    If EventID = #PB_Event_CloseWindow
      End
    EndIf
  ForEver
EndIf

Re: popupmenu im eigenbau

Verfasst: 23.05.2011 16:34
von delikanli_19_82
vielen dank an RSBasic.

nun fehlen noch lösungswege für linux und mac.

mfg

:-)

kurt