Fragezeichen im Systemmenü

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
Fusselohr
Beiträge: 236
Registriert: 02.04.2007 10:43
Kontaktdaten:

Fragezeichen im Systemmenü

Beitrag 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
Zuletzt geändert von Fusselohr am 28.02.2008 15:42, insgesamt 1-mal geändert.
Mein Projekt besteht immernoch und wächst stündlich.

Du willst die Entwicklung mitverfolgen ?
Dann besuche jetzt den Entwicklungsblog unter
http://rpg-fire-games.blogspot.com/
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Beitrag 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
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Fusselohr
Beiträge: 236
Registriert: 02.04.2007 10:43
Kontaktdaten:

Beitrag 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
Mein Projekt besteht immernoch und wächst stündlich.

Du willst die Entwicklung mitverfolgen ?
Dann besuche jetzt den Entwicklungsblog unter
http://rpg-fire-games.blogspot.com/
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Beitrag 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 
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Fusselohr
Beiträge: 236
Registriert: 02.04.2007 10:43
Kontaktdaten:

Beitrag von Fusselohr »

VIELEN DANK
Mein Projekt besteht immernoch und wächst stündlich.

Du willst die Entwicklung mitverfolgen ?
Dann besuche jetzt den Entwicklungsblog unter
http://rpg-fire-games.blogspot.com/
Benutzeravatar
hjbremer
Beiträge: 822
Registriert: 27.02.2006 22:30
Computerausstattung: von gestern
Wohnort: Neumünster

Beitrag 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
Purebasic 5.70 x86 5.72 X 64 - Windows 10

Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Benutzeravatar
hardfalcon
Beiträge: 3447
Registriert: 29.08.2004 20:46

Beitrag 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)?
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag 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.
Windows 10 Pro, 64-Bit / Outtakes | Derek
Antworten