Seite 1 von 3

Fenster Gestalten

Verfasst: 16.04.2008 10:55
von The_Dark_Zim-.-
Wui

Hab ne kleine Frage ^^
Wie erstellt man Fenster die z.B. rund sind und nich so einen standart Rand wie die normalen Fenster haben????

bzw. gibt es ein Tool für soetwas???

Gruß ZIM

Verfasst: 16.04.2008 12:04
von c4s

Code: Alles auswählen

OpenWindow(1, 0, 0, 100, 100, "abgerundetes Fenster")
SetWindowRgn_(WindowID(1), CreateRoundRectRgn_(0, 0, 100, 100, 30, 30), 0)

Repeat: Until WindowEvent() = #PB_Event_CloseWindow
->Rundet den das Fenster ab!
Musst halt aufpassen, dass Schließbutton noch sichtbar ist, daher ist es mit
TitleBar eher schlecht als recht..

Re: Fenster Gestalten

Verfasst: 16.04.2008 12:40
von scholly
The_Dark_Zim-.- hat geschrieben:Wui
Wuff !
Wie erstellt man Fenster die z.B. rund sind und nich so einen standart Rand wie die normalen Fenster haben?
Sowas läuft wohl unter Skinning.

Im Codearchiv gibts unter Windows(Fenster) die Rubrik FX. Vielleicht ist da was dabei.

Oder http://www.purebasic.fr/english/viewtopic.php?t=17502.

Ohne es selber testen zu wollen: es scheint mir so zu sein, daß man ein randloses und transparentes Fenster braucht, in das man dann alle üblichen Fenster-Elemente (Close, Minimize, Maximize, oä) selber zeichnen und abarbeiten muß.

ps: mehrfach-Fragezeichen wirken auf manche Meschen demotivierend :wink:

Verfasst: 16.04.2008 12:41
von The_Dark_Zim-.-
@c4s
hm
ganz nett, aber er erstellt erst ein Eckiges
welches erst rund wird wenn man das verschiebt,
bzw. der andere Rand bleibt stehen :|

Edit: Besser ??
Das kam weil ich das von scholly noch garnicht gesehen hatte!

Verfasst: 16.04.2008 13:03
von Kiffi
<OT>
The_Dark_Zim-.- hat geschrieben:hm
ganz nett
bitte gewöhne Dir an, entweder das Posting, auf das Du antwortest, in Teilen
zu zitieren oder aber den Antwortgeber direkt anzusprechen.

Denn wen meinst Du nun mit 'ganz nett'? c4s oder scholly?

</OT>

Verfasst: 16.04.2008 16:07
von scholly

Code: Alles auswählen

; auf die schnelle per SkinWin aus der PBOSL gelöst

hWnd = OpenWindow(0, 100, 200, 300, 300, "rundes Fenster",#PB_Window_BorderLess|#PB_Window_ScreenCentered)
HideWindow(0, 1) 

hBitmap = CreateImage(1,300,300)

StartDrawing(ImageOutput(1))
  Circle(150, 150, 140, #Red)
  Circle(150, 150, 138, RGB(244,244,244))
StopDrawing()

SkinWin( hWnd, hBitmap,0,0 )

CreateGadgetList(WindowID(0))
ButtonGadget(1,140,140,20,20,"X")
HideWindow(0, 0) 
Repeat

  Select WaitWindowEvent()
    Case #PB_Event_Gadget
      Select EventGadget()
        Case 1
          quit = #True
      EndSelect   
  EndSelect
 
Until Quit = #True

CloseWindow(0)
End

Verfasst: 16.04.2008 18:07
von c4s
The_Dark_Zim-.- hat geschrieben:hm
ganz nett, aber er erstellt erst ein Eckiges
welches erst rund wird wenn man das verschiebt,
bzw. der andere Rand bleibt stehen :|
liegt daran, dass ich vergessen hatte es zuerst zu "verstecken".

Hier der richtige funktionsfähige Code:

Code: Alles auswählen

OpenWindow(1, 0, 0, 100, 100, "abgerundetes Fenster", #PB_Window_Invisible)
SetWindowRgn_(WindowID(1), CreateRoundRectRgn_(0, 0, 100, 100, 30, 30), 0)
HideWindow(1, #False)

Repeat: Until WindowEvent() = #PB_Event_CloseWindow

Re: Fenster Gestalten

Verfasst: 16.04.2008 18:31
von scholly
The_Dark_Zim-.- hat geschrieben:Wie erstellt man Fenster die z.B. rund sind und nich so einen standart Rand wie die normalen Fenster haben?
Also zwischen rund und abgerundet, wie c4s anbietet, ist schon ein Unterschied.
Da mußt Du Dich schon entscheiden.
Hab ich in meiner Sammlung aber auch was für:

Code: Alles auswählen

;basiert auf hjbremer
;http://www.purebasic.fr/german/viewtopic.php?p=191981

hwnd = OpenWindow(0, 100, 200, 300, 300, "rundes Fenster",#PB_Window_BorderLess|#PB_Window_ScreenCentered)
HideWindow(0, 1)

hbitmap = CreateImage(1,300,300)

  dc1 = StartDrawing(ImageOutput(1))
           
    SelectObject_(dc1, GetStockObject_(#BLACK_PEN))
    SelectObject_(dc1, GetStockObject_(#LTGRAY_BRUSH))
    RoundRect_(dc1,10,10,280,280,25,25)
    
  StopDrawing()

SkinWin( hWnd, hBitmap,0,0 )

CreateGadgetList(WindowID(0))
ButtonGadget(1,140,140,20,20,"X")

HideWindow(0, 0)
Repeat

  Select WaitWindowEvent()
    Case #PB_Event_Gadget
      Select EventGadget()
        Case 1
          quit = #True
      EndSelect   
  EndSelect
 
Until Quit = #True

CloseWindow(0)
End
oder

Code: Alles auswählen

;basiert auf marco2006
;http://www.purebasic.fr/german/viewtopic.php?p=191981

hwnd = OpenWindow(0, 100, 200, 300, 300, "rundes Fenster",#PB_Window_BorderLess|#PB_Window_ScreenCentered)
HideWindow(0, 1)

hbitmap = CreateImage(1,300,300)

x = 10
y = 10
l =280
b =280
r = 10

If StartDrawing(ImageOutput(1))
  Line(x+r, y, l-2*r, 0, RGB(5,5,5))
  Line(x+r, y+b, l-2*r, 0, RGB(5,5,5))
  Line(x, y+r, 0, b-2*r, RGB(5,5,5))
  Line(x+l, y+r, 0, b-2*r, RGB(5,5,5))

  For i=0 To 90
    Plot((x+r)-r*Cos(i/180*#PI), (y+r)-r*Sin(i/180*#PI), RGB(5,5,5))
    Plot((x+l-r)+r*Cos(i/180*#PI), (y+r)-r*Sin(i/180*#PI), RGB(5,5,5))
    Plot((x+r)-r*Cos(i/180*#PI), (y+b-r)+r*Sin(i/180*#PI), RGB(5,5,5))
    Plot((x+l-r)+r*Cos(i/180*#PI), (y+b-r)+r*Sin(i/180*#PI), RGB(5,5,5))
  Next
  
  FillArea(150, 150, RGB(5,5,5), RGB(155,155,155))
  StopDrawing()
EndIf

SkinWin( hWnd, hBitmap,0,0 )

CreateGadgetList(WindowID(0))
ButtonGadget(1,140,140,20,20,"X")
HideWindow(0, 0)
Repeat

  Select WaitWindowEvent()
    Case #PB_Event_Gadget
      Select EventGadget()
        Case 1
          quit = #True
      EndSelect   
  EndSelect
 
Until Quit = #True

CloseWindow(0)
End

Verfasst: 17.04.2008 15:03
von The_Dark_Zim-.-
@ c4s
Das sieht doch gleich viel besser aus ^^
thx

@ scholly
Mein PB kann mit

Code: Alles auswählen

SkinWin( hWnd, hBitmap,0,0 )
nix anfangen
Muss ich da noch was installieren????
Das mit dem Runden war nur ein Beispiel ^^ Wäre natürlich cool wenn man auch andere formen machen kann :wink:

Verfasst: 17.04.2008 15:11
von scholly
The_Dark_Zim-.- hat geschrieben: Mein PB kann mit

Code: Alles auswählen

SkinWin( hWnd, hBitmap,0,0 )
nix anfangen
Muss ich da noch was installieren????
PBOSL
Das mit dem Runden war nur ein Beispiel ^^ Wäre natürlich cool wenn man auch andere formen machen kann :wink:
Wenn ich nachher zuhause bin, bastel ich Dir mal eben ein sternförmiges Fenster, aber das dauert noch was...
Oder möchtest Du ein Ei (Ellipse) oder was anderes?