popupmenu im eigenbau

Anfängerfragen zum Programmieren mit PureBasic.
delikanli_19_82
Beiträge: 173
Registriert: 30.11.2010 02:34

popupmenu im eigenbau

Beitrag 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
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: popupmenu im eigenbau

Beitrag 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
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
delikanli_19_82
Beiträge: 173
Registriert: 30.11.2010 02:34

Re: popupmenu im eigenbau

Beitrag von delikanli_19_82 »

vielen dank an RSBasic.

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

mfg

:-)

kurt
Antworten