Firefox MenueErsatz

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Firefox MenueErsatz

Beitrag von Bisonte »

Hallo...

Ich hab da mal zwei Fragen....


1. Wie nennt man dieses "Firefox Pulldown System Menu" ?
Bild

dann kann ich auch den Topic anpassen ;)

und

2. Wie kann man das in PB realisieren (am besten ohne dass man das komplette Fenster und seine Controls selbst zeichnet mit z.B. Canvas) ?
Zuletzt geändert von Bisonte am 15.05.2013 20:41, insgesamt 1-mal geändert.
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Firefox MenueErsatz

Beitrag von RSBasic »

Das ist einfach auf die TitleBar draufgezeichnet. Da gibt es afaik kein Control für sowas.
Sowas z.B.: http://www.purebasic.fr/english/viewtopic.php?t=22476 (Nur dass du das nicht ganz rechts machst, sondern ganz links.)
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Re: Firefox MenueErsatz

Beitrag von Bisonte »

Danke für den Link, allerdings scheint das Beispiel dort nicht zu funktionieren , oder nicht mehr...
(egal welches Icon ich nehme...)

Ist ja von 2006 ;)

Das Beispiel aus deiner WinAPI Library funktioniert zwar, aber da bin ich ja auf ein Fragezeichen
beschränkt... und meine bisherigen versuche etwas auf die Titelleiste eines Fensters zu malen, sind
gescheitert, weil man die Koordinaten nicht kriegt ... (Alles kleiner als 0,0 ist nicht mehr sichtbar weil ausserhalb....)
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Firefox MenueErsatz

Beitrag von RSBasic »

Bitte einfach die Board-Suche nutzen.
Beispielsweise ein Beispielcode aus dem Jahre 2010: http://www.purebasic.fr/english/viewtop ... 93#p338593
Code ein wenig geändert:

Code: Alles auswählen

Global x,y,buttonW,buttonH,borderW


Procedure WndProc(hwnd, uMsg, wParam, lParam)

      GetWindowRect_(WindowID(1),r.RECT)
      ;x = r\right - (buttonW*5) - borderW   ;5 = for Max & Restore & Min and 2 more buttons
      x = r\left
      y = r\top
      If OSVersion() <= #PB_OS_Windows_XP
        y = y + 5
      Else
        ;x = x + 10
        ;x = x - 400
      EndIf
      result = #PB_ProcessPureBasicEvents

 Select uMsg
   
        Case #WM_NOTIFY     
       
        Case #WM_GETMINMAXINFO     
            *pMinMax.MINMAXINFO = lParam
            *pMinMax\ptMinTrackSize\x=buttonW*5
       
     
        Case #WM_SIZE,#WM_MOVE,#WM_PAINT
           If GetWindowState(1) = #PB_Window_Maximize
              ResizeWindow(2,x,y+4,buttonW*2,buttonH)   
           Else
               ResizeWindow(2,x,y,buttonW*2,buttonH)
           EndIf
             
   EndSelect
   
  ProcedureReturn result
EndProcedure

UsePNGImageDecoder()

LoadImage(0, "C:\abc\state1.png")              ;24 x 24 pixel    Button state 1
LoadImage(1, "C:\abc\state2.png")              ;24 x 24 pixel    Button state 2

buttonW = GetSystemMetrics_(#SM_CXSIZE)
buttonH = GetSystemMetrics_(#SM_CYSIZE)
borderW = GetSystemMetrics_(#SM_CXBORDER)

OpenWindow(1,0,0,600,400,"Add Button to Title Bar", #PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_SizeGadget|#PB_Window_ScreenCentered)
OpenWindow(2,0,0,buttonW*2,buttonH,"",#WS_POPUP,WindowID(1))
SetWindowColor(2,#Red)
SetWindowLong_(WindowID(2),#GWL_EXSTYLE,GetWindowLong_(WindowID(2),#GWL_EXSTYLE)|#WS_EX_LAYERED)
SetLayeredWindowAttributes_(WindowID(2),#Red,0,#LWA_COLORKEY)
ImageGadget(10,2,0,30,20,ImageID(0))
ImageGadget(11,28,0,30,20,ImageID(0))

SetWindowCallback(@WndProc())
SetActiveWindow(1)

Repeat
  Select WaitWindowEvent()
     
      Case #PB_Event_CloseWindow
           Q = 1
     
      Case #PB_Event_Gadget
          Select EventGadget()
            Case 10
              Debug "Button 10 Pressed"

            Case 11
              Debug "Button 11 Pressed"

           EndSelect
           SetActiveWindow(1)
           
      Case #WM_MOUSEMOVE
         GetCursorPos_(@p.POINT)
         If p\x >= x+5 And p\x <= x+30 And p\y >= y+4 And p\y <=y+25
           SetGadgetState(10,ImageID(1))
         Else
           SetGadgetState(10,ImageID(0))
         EndIf
         If p\x >= x+35 And p\x <= x+55 And p\y >= y+4 And p\y <=y+25
           SetGadgetState(11,ImageID(1))
         Else
           SetGadgetState(11,ImageID(0))
         EndIf
           
  EndSelect
Until Q =1
End
PS: Pfad zur Grafiken vorher anpassen.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Re: Firefox MenueErsatz

Beitrag von Bisonte »

RSBasic hat geschrieben:Bitte einfach die Board-Suche nutzen.
Wenn man weiss welchen Suchbegriff man nehmen soll...
Hab da so einiges probiert, aber leider nix.

Nichtsdestotrotz funktioniert das ganze... sieht zwar seltsam aus
(beim Min und Max des windows sind die Icons schon vor dem Window an ort und stelle ;)
aber daran kann man ja was drehen. )

Gratiam habere
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Firefox MenueErsatz

Beitrag von RSBasic »

Ìch hab da einfach "titlebar button" eingegeben. ( http://www.google.de/#hl=de&sclient=psy ... rebasic.fr ) :D
Bzw.: http://www.purebasic.fr/english/search. ... &sr=topics (8. Eintrag)
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Antworten