Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Pomoc oko transparentnosti formi!

[es] :: Visual Basic 6 :: Pomoc oko transparentnosti formi!

[ Pregleda: 1806 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

notebookFun
System Administrator
Novi Sad

Član broj: 226286
Poruke: 835



+20 Profil

icon Pomoc oko transparentnosti formi!04.04.2010. u 19:37 - pre 170 meseci
Interesuje me da li je moguce napraviti okruglu ili elipsoidnu formu. Ako ima neko neki gotov source ili tutorial bio bih mu zahvalan!
Ukoliko se treseš od ljutnje na svaku nepravdu onda si moj suborac. ~Che Guevara
 
Odgovor na temu

t.marko016

Član broj: 255856
Poruke: 196
109.93.200.*



+10 Profil

icon Re: Pomoc oko transparentnosti formi!04.04.2010. u 20:42 - pre 170 meseci
Sve ovo ide u Form:

Code:

Option Explicit

Private Declare Function CreateRoundRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long, ByVal X3 As Long, ByVal Y3 As Long) As Long
Private Declare Function CombineRgn Lib "gdi32" (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As Long
Private Declare Function SetWindowRgn Lib "user32" (ByVal hwnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long

Private Const RGN_OR = 2
Private Const RGN_DIFF = 4
Dim CreateForm As Long

Private Sub Form_Load()
CreateForm = CreateRoundRectRgn(0, 0, Me.Width / Screen.TwipsPerPixelX, Me.Height / Screen.TwipsPerPixelY, [b]25, 25[/b])
SetWindowRgn Me.hwnd, CreateForm, False
End Sub


Menjaj sdrzaj brojeva koji su Bold i dobices oblik koji ti odgovara.

U naslov si napisao transparentnost forme, to znaci da je forma providna a ne oblika elipse .
 
Odgovor na temu

notebookFun
System Administrator
Novi Sad

Član broj: 226286
Poruke: 835



+20 Profil

icon Re: Pomoc oko transparentnosti formi!04.04.2010. u 21:19 - pre 170 meseci
Znam da je providnost, ali sam mislio da se uz pomoc providnosti i slike u obliku eklipse pravi takva forma!
Ukoliko se treseš od ljutnje na svaku nepravdu onda si moj suborac. ~Che Guevara
 
Odgovor na temu

t.marko016

Član broj: 255856
Poruke: 196
109.93.200.*



+10 Profil

icon Re: Pomoc oko transparentnosti formi!04.04.2010. u 21:27 - pre 170 meseci
Ako sam razumeo ti hoces da napravis nevidljivu formu i da umesto nje bude neka okrugla slika?

Moze da oblikujes formu u obliku neke slike tim kodom a ovo sa slikom i providnosti je science fiction bar za mene.
 
Odgovor na temu

deerbeer
Beograd

Član broj: 174418
Poruke: 1189
*.mbb.telenor.rs.



+395 Profil

icon Re: Pomoc oko transparentnosti formi!04.04.2010. u 21:32 - pre 170 meseci
Tako i treba . slika tj. 32bit bitmapa mora da ima alfa kanal za transparenciju.
Na osnovu tih vrednosti treba da napravis region tj. konturu (Imam rutinu za to ali je kod u C++ pa ne znam koliko ce ti to pomoci u VB)
pomocu kojeg ces da oblikujes prozor sa f-ijom SetWindowRgn .

Prozor mora biti kreiran sa WS_EX_LAYERED stilom koji dozvoljava transparentost
Ako je alfa vrednost u bitmapi nula to je nevidljivi deo prozora ,a ako je razlicit od nule vidljivi deo .
Pogledaj takodje na msdnu f-ije SetLayeredWindow i UpdateLayeredWindow.
Viva lollapalooza
 
Odgovor na temu

Marko_L
Beograd

Član broj: 20532
Poruke: 2885
*.dynamic.sbb.rs.

Jabber: Marko_L@elitesecurity.org


+828 Profil

icon Re: Pomoc oko transparentnosti formi!04.04.2010. u 22:36 - pre 170 meseci
Napravi bitmapu na osnovu koje hoćeš da praviš providnost. Sve što hoćeš da bude providno ofarbaj u crno (RGB 0 0 0) i dodaj sliku kao pozadinu na formi. Onda ubaci ovaj kod
Code:
Option Explicit

Const LWA_COLORKEY = &H1
Const GWL_EXSTYLE = (-20)
Const WS_EX_LAYERED = &H80000

Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function SetLayeredWindowAttributes Lib "user32.dll" (ByVal hwnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long

Private Sub Form_Load()
    Dim ret As Long
    Dim clr As Long
    clr = RGB(0, 0, 0)
    ret = GetWindowLong(Me.hwnd, GWL_EXSTYLE)
    ret = ret Or WS_EX_LAYERED
    SetWindowLong Me.hwnd, GWL_EXSTYLE, ret
    SetLayeredWindowAttributes Me.hwnd, clr, 0, LWA_COLORKEY
End Sub

-Odracuonogakomijedrpiorazmaknicu.
-Ne rxdi mi txstxturx, kxd god hocu dx
ukucxm "x" onx ukucx "x".
-Ko kaaz e da ja neuummem da kuuca
m.
-Piše "Insert disk 3", a jedva sam i ova
dva ugurao u drajv
-Postoje samo dve osobe kojima
verujem, jedna sam ja, a druga nisi ti
 
Odgovor na temu

vuchko.vuchko

Član broj: 217112
Poruke: 301
*.teol.net.



+2 Profil

icon Re: Pomoc oko transparentnosti formi!06.04.2010. u 18:35 - pre 170 meseci
Ili jednostavno postavi da ti podloga forme bude crna i to je to...

Citat:
Code:
Option Explicit

Const LWA_COLORKEY = &H1
Const GWL_EXSTYLE = (-20)
Const WS_EX_LAYERED = &H80000

Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function SetLayeredWindowAttributes Lib "user32.dll" (ByVal hwnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long

Private Sub Form_Load()
    Form1.BackColor = 0
    Dim ret As Long
    Dim clr As Long
    clr = RGB(0, 0, 0)
    ret = GetWindowLong(Me.hwnd, GWL_EXSTYLE)
    ret = ret Or WS_EX_LAYERED
    SetWindowLong Me.hwnd, GWL_EXSTYLE, ret
    SetLayeredWindowAttributes Me.hwnd, clr, 0, LWA_COLORKEY
End Sub
 
Odgovor na temu

Marko_L
Beograd

Član broj: 20532
Poruke: 2885
*.dynamic.sbb.rs.

Jabber: Marko_L@elitesecurity.org


+828 Profil

icon Re: Pomoc oko transparentnosti formi!06.04.2010. u 20:11 - pre 170 meseci
Pa tako će mu cela forma biti transparentna, a koliko sam razumeo on hoće da samo deo forme bude transparentan, tj. da ima nepravilan oblik forme.
-Odracuonogakomijedrpiorazmaknicu.
-Ne rxdi mi txstxturx, kxd god hocu dx
ukucxm "x" onx ukucx "x".
-Ko kaaz e da ja neuummem da kuuca
m.
-Piše "Insert disk 3", a jedva sam i ova
dva ugurao u drajv
-Postoje samo dve osobe kojima
verujem, jedna sam ja, a druga nisi ti
 
Odgovor na temu

deerbeer
Beograd

Član broj: 174418
Poruke: 1189
*.mbb.telenor.rs.



+395 Profil

icon Re: Pomoc oko transparentnosti formi!06.04.2010. u 21:06 - pre 170 meseci
Sta ako prozor treba da bude nepravilnog oblika ?
Treba mu rutina koja iz 32bit bitmape izdvaja region tj. konturu i povrsinu prozora da definise sa SetWindowRgn .
U suprotnom mora unapred znati koju povrsinu (region) zauzima vidljivi deo prozora tj. bitmape .
Kod iscrtavanja bitmape preko prozora treba koristiti Winapi AlphaBlend f-iju .




Viva lollapalooza
 
Odgovor na temu

vuchko.vuchko

Član broj: 217112
Poruke: 301
*.teol.net.



+2 Profil

icon Re: Pomoc oko transparentnosti formi!07.04.2010. u 13:57 - pre 170 meseci
Pa ako treba prozor bas da bude nepravilnog oblika to je objasnijo t.marko016 , a moze ovako kao sto sto je Marko na pisao a ja doradio...

Ovako je isto dobro,jer je sada cijela forma transparentna, npr. mozes postaviti borserstile=0 i na formi napraviti oblik koji je potreban.
 
Odgovor na temu

[es] :: Visual Basic 6 :: Pomoc oko transparentnosti formi!

[ Pregleda: 1806 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.