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.