Seite 1 von 2

Window-Skins

Verfasst: 19.04.2007 17:26
von Eclipse
Hi Leute,

Ich programmiere derzeit eine kleine Applikation für ein Spiel, und nun möchte ich das Design etwas anpassen. Anfangs wollte ich das ganze mit einfachen ImageGadgets erledigen, aber so habe ich folgendes Problem:
Ich möchte einen Button an den unteren Rand des Fensters so platzieren, dass er zur Hälfte darüber hinausragt. Dies ist so aber nicht möglich.

Hat jemand einen Vorschlag was ich machen könnte?

edit:
ups, verklickt, sollte eigentlich in den Anfänger-Bereich^^
Egal, arbeite trotzdem mit PB4.

Verfasst: 19.04.2007 17:31
von Thalius
Such mal nach SkinWin.

Hier hats dazu auch ein paar Beispiele:
http://www.purearea.net/pb/CodeArchiv/German.html

Thalius

Verfasst: 19.04.2007 18:33
von Eclipse
Nun gut, damit kann man wirklich jede Menge nettes Zeugs machen. Trotzdem zeigt mir dieses Beispiel nicht wirklich wie ich das "Hinausragen" hinkriegen könnte. Kann man den Fensterhindergrund irgendwie tranzparent stellen?

Verfasst: 19.04.2007 18:48
von Thalius
Jup.. Im prinzip erstellst du ein unsichtbares Fenster. Und plazierst da drauf deine Elemente. Klar können die nicht über das Fenster hinausgehen. Aber schliesslich kannst du ja auch nur gadgets auf Fenstern erstellen oder ? =P

Du passt einfach deinen Hintergrund so an dass du noch genug Raum hast deinen Button da heraus ragen zu lassen ( Transparente fenster kannst du übrigens auf transparenter Fläche auch nicht selektieren ).

ps. das ist die gebräuchliche Methode ( nicht nur in PB ... )

Thalius

Verfasst: 19.04.2007 18:50
von Fluid Byte
1.) Falsches Forum!
2.) Du brauchst SkinWin nicht. Das lässt sich leicht mit dem Kombinieren Regions bewerkstelligen:

Code: Alles auswählen

#BTNWIDTH = 100 : #BTNHEIGHT = 50

OpenWindow(0,0,0,320,240,"void",#WS_POPUP| #WS_SYSMENU | #WS_BORDER | 1)
CreateGadgetList(WindowID(0))
ButtonGadget(0,0,0,0,0,"Ich wurde halbiert!")

SetWindowColor(0,RGB(120,150,20))

GetWindowRect_(WindowID(0),wrc.RECT)

WW = wrc\right-wrc\Left
WH = wrc\bottom-wrc\top
BX = WW/2 - #BTNWIDTH/2

hRgnResult = CreateRectRgn_(0,0,0,0)
hRgnRect1 = CreateRectRgn_(0,0,WW,WH - #BTNHEIGHT/2)
hRgnRect2 = CreateRectRgn_(BX,WH - #BTNHEIGHT/2,BX + #BTNWIDTH,WH)

CombineRgn_(hRgnResult,hRgnRect1,hRgnRect2,#RGN_OR)

SetWindowRgn_(WindowID(0),hRgnResult,1)

; 2 x minus 1 Pixel wegen #WS_BORDER
ResizeGadget(0,BX-1,(WH-#BTNHEIGHT/2)-1,#BTNWIDTH,#BTNHEIGHT)

While WaitWindowEvent() ! 16 : Wend

Verfasst: 19.04.2007 18:51
von Thalius
@Fluid_Byte
APIhacker ! :mrgreen: hehe

je nachdem wasser machen will ists einfacher. :)

Apropos gugg mal das gameSkin Beispiel von Danilo im CodeArchiv an.

Verfasst: 19.04.2007 18:53
von Eclipse
Fluid Byte hat geschrieben:1.) Falsches Forum!
edit:
ups, verklickt, sollte eigentlich in den Anfänger-Bereich^^
Egal, arbeite trotzdem mit PB4.
;-)
zip zap zup - erledigt - Kaeru fecit

Vielen Dank euch beiden, hätte nicht gedacht, dass dies so einfach gehen würde.

Verfasst: 20.04.2007 20:34
von Eclipse
Noch eine kleine Frage^^:
Ich hab in meinem Fenster nun mit

Code: Alles auswählen

SetWindowLong_(WindowID(0),#GWL_EXSTYLE,GetWindowLong_(WindowID(0),#GWL_EXSTYLE)|524288)
SetLayeredWindowAttributes_(WindowID(0),RGB(255,255,255),0,1)
alle weißen Stellen transparent gestellt.

Nun möchte ich aber das selbe auch mit einem Gadget (WebGadget) machen.
Wenn ich jetzt aber einfach die IDs austausche klappt das natürlich nicht ...

Verfasst: 20.04.2007 22:29
von roherter

Code: Alles auswählen

getdc_(gadgetid)
vielleicht? :roll:

Verfasst: 20.04.2007 23:09
von Eclipse
Tut mir Leid, aber das hilft mir jetzt nicht unbedingt weiter. Kann mir das bitte jemand etwas genauer erklären? Hab nicht wirklich Ahnung von der WinApi.