Seite 1 von 1
Fragezeichen im Systemmenü
Verfasst: 28.02.2008 15:29
von Fusselohr
Hallo an alle,
ich wollte mal fragen wie ich das "?" neben dem Schließen, Maximieren und Minimieren in das Systemmenü eines Fensters bekomme. Hab schon gesucht, aber mir fehlt irgendwie die richtige Bezeichnung

.
Gruß Fusselohr
Verfasst: 28.02.2008 15:30
von RSBasic
Code: Alles auswählen
Procedure.l WindowCallback(Windowid, Message, wParam, lParam)
Result = #PB_ProcessPureBasicEvents
Select Message
Case #WM_HELP
*Helpinfo.HELPINFO = lParam
Select *Helpinfo\iCtrlId
Case 0
Debug "Button 0 gedrückt!"
Case 1
Debug "Button 1 gedrückt!"
EndSelect
EndSelect
ProcedureReturn Result
EndProcedure
OpenWindow(0,0,0,100,100,"No Name",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
If CreateGadgetList(WindowID(0))
ButtonGadget(0,10,10,100,20,"Button 0",0)
ButtonGadget(1,10,40,100,20,"Button 1",0)
EndIf
SetWindowLong_(WindowID(0), #GWL_EXSTYLE, #WS_EX_CONTEXTHELP)
SendMessage_(WindowID(0), #WM_NCPAINT, 1, 0)
SetWindowCallback(@WindowCallback())
Repeat
EventID = WaitWindowEvent()
Select EventID
Case #PB_Event_Menu
Select EventMenu()
Case 1
EndSelect
Case #PB_Event_Gadget
Select EventGadget()
Case 1
EndSelect
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
Verfasst: 28.02.2008 15:42
von Fusselohr
COOL, danke (das ging aber schnell)...
Ich hätt da aber noch ne Frage nur ne kleine, da ich nicht grad nochmal ein neues Thema aufmachen möchte...
Ich wollt ein Rahmenloses Fenster verschieben, hab auch im Forum rumgesucht und Sachen wie zum Beispiel das mit DisableGadget gefunden doch das Fenster will sich immernoch nicht verschieben:
Code: Alles auswählen
If OpenWindow(#Window_0, 412, 202, 310, 320, "New window ( 0 )",#PB_Window_BorderLess)
If CreateGadgetList(WindowID(#Window_0))
ImageGadget(33,0,0,310,320,Img)
ListIconGadget(#ListIcon_0, 10, 35, 290, 270, "Column0", 92, #PB_ListIcon_GridLines)
AddGadgetColumn(#ListIcon_0,1,"Syntax",175)
SetGadgetFont(#Text_0, FontID2)
ButtonImageGadget(#ButtonImage_0, 289, 5, 16, 16, Image0)
EndIf
EndIf
DisableGadget(33,1)
StickyWindow(#Window_0,1)
Repeat
WaitWindowEvent()
ForEver
Vielen Dank im Voraus
Fusselohr
Verfasst: 28.02.2008 15:52
von RSBasic
Code: Alles auswählen
If OpenWindow(0,0,0,500,500,"No Name",#PB_Window_BorderLess|#PB_Window_ScreenCentered)
If CreateGadgetList(WindowID(0))
EndIf
Repeat
SendMessage_(WindowID(0),#WM_NCLBUTTONDOWN, #HTCAPTION,0)
Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Verfasst: 28.02.2008 16:00
von Fusselohr
VIELEN DANK
Verfasst: 28.02.2008 17:12
von hjbremer
#PB_Window_Invisible muß sein, sonst erscheint das Fragezeichen erst wenn man mit der Maus darüberfährt
Code: Alles auswählen
windowstyles = #PB_Window_SystemMenu|1|#PB_Window_Invisible ;die 1 = zentriert
hwnd=OpenWindow(0,0,0,100,100,"",windowstyles)
;Fragezeichen zum Hauptfenster
SetWindowLong_(hWnd, #GWL_EXSTYLE,GetWindowLong_(hWnd, #GWL_EXSTYLE)|#WS_EX_CONTEXTHELP)
SetWindowState(0, #PB_Window_Normal)
im Callback habe ich
Code: Alles auswählen
Case #WM_HELP
*Help.HELPINFO
*Help = lParam
ProgrammHilfe(*Help)
Result = #True ;sonst gibt es ev.2-3 messages
und die Prozedur Programmhilfe sieht bei mir so aus. Soll nur als Anregung dienen.
Code: Alles auswählen
Procedure ProgrammHilfe(*Help.HELPINFO) ;09.01.08
pbnr = *Help\iCtrlId
IDnr = *Help\hItemHandle
sp = *Help\mousepos\x
ze = *Help\mousepos\y
;Text aus Datei lesen
test=OpenPreferences("ebaylist4.txt")
If test=0: CreatePreferences("ebaylist4.txt"): EndIf
nr$ = Str(pbnr)
vg$ = Str(pbnr)
txt$ = ReadPreferenceString (nr$, vg$)
If txt$=vg$
If IsGadget(pbnr)
txt$=nr$+" "+GetGadgetText(pbnr)
WritePreferenceString (nr$, txt$)
EndIf
EndIf
ClosePreferences()
;Maße
br = 220
hh = 50 ;Startwert, siehe While/Wend
wbr = DesktopWidth(0)-20
whh = DesktopHeight(0)-50
;der Versuch die Höhe einigermaßen genau zu ermitteln
;mit Hilfe des angeklickten Buttons.
;der Font sollte dem Textgadget weiter unten zugewiesen werden.
FontID = GetGadgetFont(pbnr)
DC = GetDC_(IDnr)
TextSize.Size
GetTextExtentPoint32_(DC,txt$,Len(txt$),@TextSize)
lg = textsize\cx
hoehe = textsize\cy+2
anzze1 = 1+lg/br
While anzze2 < anzze1
anzze2= hh/hoehe
hh+hoehe
Wend
;damit die Info im Window bleibt
If sp > wbr-br: sp-br:EndIf
If ze > whh-hh: ze-hh:EndIf
;Hauptfenster aus
DisableWindow(0, 1)
;Info anzeigen
hdw=OpenWindow(#PB_Any, sp, ze, br, hh,"", #WS_POPUPWINDOW, WindowID(0))
CreateGadgetList(WindowID(hdw))
txtnr=TextGadget(#PB_Any,5,5,br-10,hh-10,"")
SetGadgetFont(txtnr, FontID)
SetGadgetText(txtnr,txt$)
Repeat
EventID = WaitWindowEvent()
If eventid = #WM_LBUTTONDOWN
EventID = #PB_Event_CloseWindow
EndIf
Until EventID = #PB_Event_CloseWindow
CloseWindow(hdw)
DisableWindow(0, 0)
EndProcedure
Verfasst: 28.02.2008 19:59
von hardfalcon
RSBasic: Sry, bin grad unter Linux unterwegs, deshalb kann ich das selber nich ausprobieren, aber kann das #WM_HELP Event nicht auch ohne Callback verarbeitet werden, über den "herkömmlichen" PB-Weg (also genauso wie z.B. #PB_Event_CloseWindow oder #PB_Event_Repaint)?
Verfasst: 28.02.2008 20:15
von Fluid Byte
hardfalcon hat geschrieben:... aber kann das #WM_HELP Event nicht auch ohne Callback verarbeitet werden, über den "herkömmlichen" PB-Weg ...
Selbst wenn es ginge ist ein Callback immer vorzuziehen. Erstens verarbeitet PB nicht alle Events (oder nur teilweise) und zweitens ist übersichtlicher den API Kram von der normalen Eventberabeitung zu trennen.