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

Delphi, rounded border form i anti-aliasing

[es] :: Pascal / Delphi / Kylix :: Delphi, rounded border form i anti-aliasing

[ Pregleda: 2159 | Odgovora: 12 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

reiser

Član broj: 7895
Poruke: 2314



+102 Profil

icon Delphi, rounded border form i anti-aliasing24.03.2013. u 22:27 - pre 134 meseci
Imam formu koja je borderless (bsNone), i dajem joj zakrivljeni border pomocu SetWindowRgn() i CreateRoundRectRgn(). Ovo sve lepo radi, ali mi zakrivljeni uglovi forme imaju vrlo ostar oblik, tj nisu obli :)



Kako da odradim antialiasing ovde i dam im malo blurovaniji izgled? Probao sam preko layered windowa i alpha bitmapa, i to radi super, ali je mana sto to overriduje WM_PAINT i sve sto se stavi na formu je nevidljivo :)



Nisam se snasao sa GDI+ i D2D, tako da je bilo kakav hint ili primer dobrodosao.
 
Odgovor na temu

Lawd

Član broj: 312064
Poruke: 20
*.dynamic.isp.telekom.rs.



+1 Profil

icon Re: Delphi, rounded border form i anti-aliasing25.03.2013. u 06:17 - pre 134 meseci
Ja mogu da ti pomognem ako zelis da ti forma u te svrhe koristi transparentnu png sliku.
Primeri:
http://www.del123.com/DelphiSplashScreen.zip
http://www.del123.com/PNGFormDelphi.zip
Mana je sto koristi UpdateLayeredwindow.
Ovaj primer radi sa bitmapama:
http://melander.dk/articles/alphasplash2/1/
 
Odgovor na temu

reiser

Član broj: 7895
Poruke: 2314



+102 Profil

icon Re: Delphi, rounded border form i anti-aliasing25.03.2013. u 09:37 - pre 134 meseci
Pa kao sto rekoh u drugom delu posta, to sam vec probao :) Treba mi nesto sto ce omoguciti da se kontrole postavljaju na formu.
 
Odgovor na temu

Lawd

Član broj: 312064
Poruke: 20
*.dynamic.isp.telekom.rs.



+1 Profil

icon Re: Delphi, rounded border form i anti-aliasing25.03.2013. u 10:08 - pre 134 meseci
Dokumentacija kaze da Win32 podrzava samo aliased prozore / regione.

[Ovu poruku je menjao Lawd dana 25.03.2013. u 11:21 GMT+1]
 
Odgovor na temu

reiser

Član broj: 7895
Poruke: 2314



+102 Profil

icon Re: Delphi, rounded border form i anti-aliasing25.03.2013. u 12:58 - pre 134 meseci
Znam sta dokumentacija kaze, ali sam prilicno siguran da je moguce da se ovo odradi preko D2D ili cak GDI+. Primer:

 
Odgovor na temu

reiser

Član broj: 7895
Poruke: 2314



+102 Profil

icon Re: Delphi, rounded border form i anti-aliasing25.03.2013. u 13:06 - pre 134 meseci
Elem, resio sam tako sto sam kreirao novu formu preko layered forme, overridovao WM_MOVE i jos par poruka kako bi to sve izgledalo kao jedna forma, i dobio zadovoljavajuc rezultat:



i kada se stavi da je pozadina forme crna:



Resenje pomocu stapa i kanapa, ali trenutno ne znam za bolje :)
 
Odgovor na temu

reiser

Član broj: 7895
Poruke: 2314



+102 Profil

icon Re: Delphi, rounded border form i anti-aliasing25.03.2013. u 13:52 - pre 134 meseci
A ovo?



Ne bih bas rekao da iscrtavaju sve ove kontrole :) Jedino ako rade na isti nacin kao i ja, sa layered prozorom ispod.
 
Odgovor na temu

Lawd

Član broj: 312064
Poruke: 20
*.dynamic.isp.telekom.rs.



+1 Profil

icon Re: Delphi, rounded border form i anti-aliasing25.03.2013. u 15:55 - pre 134 meseci
Iskreno, sumnjam da rade na isti način kao i ti.
 
Odgovor na temu

reiser

Član broj: 7895
Poruke: 2314



+102 Profil

icon Re: Delphi, rounded border form i anti-aliasing25.03.2013. u 16:06 - pre 134 meseci
Ne znam sto si obrisao prethodnu poruku izmedju moje dve, poremetio si koncept threada, ispada da odgovaram sam sebi :) Ne iscrtavaju kao ja, zato i pitam kako da iscrtam preko D2D.
 
Odgovor na temu

Rapaic Rajko
Bgd

Član broj: 4105
Poruke: 810
188.246.89.*



+62 Profil

icon Re: Delphi, rounded border form i anti-aliasing26.03.2013. u 07:55 - pre 134 meseci
Pojasni malo ovo, sta tacno zelis:

Citat:
Kako da odradim antialiasing ovde i dam im malo blurovaniji izgled?


Kako si uopste postigao da ti se ne vide umetnute kontrole, trebalo bi da se vide..? :)

Pozz
 
Odgovor na temu

reiser

Član broj: 7895
Poruke: 2314



+102 Profil

icon Re: Delphi, rounded border form i anti-aliasing26.03.2013. u 12:03 - pre 134 meseci
Ne vidi se nista na formi jer je window layered, sto mora da bude ako hocu da ima oblik alpha bitmapa ili pnga koji napravim u Photoshopu. To se postize tako sto se setuje WS_EX_LAYERED style, sto overriduje default WM_PAINT iscrtavanje forme i samim tim ne vidis nista na formi. Stavi ovu liniju u OnCreate() forme i testiraj da li se vidi ista na formi. Nece cak ni forma da ti se vidi dok ne nalepis layer, tj bitmap/png :)

Code:
SetWindowLong(Self.Handle, GWL_EXSTYLE, GetWindowLongA(Self.Handle, GWL_EXSTYLE) or WS_EX_LAYERED);


Kada pomocu SetWindowRgn() i CreateRoundRectRgn() setujem da prozor ima zakrivljeni border, aliased je i vidi se pikselizacija. Tako da sam ovo trenutno resio tako sto sam kreirao normalnu formu i layered formu ispod nje, koja je za par piksela veca od normalne forme sa svake strane:



Ovde mozes da vidis da su ivice sive forme pikselizovane, dok pozadinska crna forma ima smooth ivice :)

[Ovu poruku je menjao reiser dana 26.03.2013. u 13:15 GMT+1]
 
Odgovor na temu

Rapaic Rajko
Bgd

Član broj: 4105
Poruke: 810
188.246.89.*



+62 Profil

icon Re: Delphi, rounded border form i anti-aliasing28.03.2013. u 12:49 - pre 134 meseci
Uh, WS_EX_LAYERED..?

Iskreno, kad sam ja petljao sa regionima, bila je aktuelna Delphi 3-jka :) . Ali pogledao sam moj stari komponent, evo ti ideja, pa mozda nesto uradis:

1) Obradjujes sliku u Photoshop-u, jel tako. Mozes li nekim grafickim alatom da izvuces polyline (sa konacnim brojem tacaka, naravno) koji opisuje relativno dobar path oko konture koja te zanima. Ako DA, na konju si :).
2) Sad prelazimo na region. Pogledaj funkcije BeginPath i EndPath; u opisu istih ces naci koje sve graficke operacije se snimaju (recording) prilikom kreiranja path-a; da ne poverujes, ima i TextOut :) . Upises poligon iz stavke 1) (napunis array, pa pozoves funkciju; ako nisam vec sve pomesao; ima dobar primer u helpu D7-ice). Kad definises region path-om, dodelis ga formi.
3) Crtanje. U Paint metodi (ili na WM_Paint) radis crtanje zeljene slike na Canvas forme. Region ce savrseno raditi odsecanje/clipping slike/forme prema tvojoj konturi/path-u, i to bi bilo to.
4) Ukoliko zelis da ti radi stretch, onda moras i WM_RESIZE; preracunavas nanovo path prema originalnom polyline-u, pa ponovo definises region, koji opet dodelis formi.

Ovo radi savrseno. Komp koji pominjem ima i editor u designtime-u za path, pa sam cak ugradio i Bezier-ove krive u konturu itd.itd. Skrecem sa teme ;) . Uglavnom, izgleda teze nego sto stvarno jeste.
Nadam se da sam od neke pomoci.

Pozz
 
Odgovor na temu

reiser

Član broj: 7895
Poruke: 2314



+102 Profil

icon Re: Delphi, rounded border form i anti-aliasing28.03.2013. u 15:20 - pre 134 meseci
Da, ali tu se opet vracam na isti problem - ivice moraju biti striktno linijske i nece biti antialiased :)
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Delphi, rounded border form i anti-aliasing

[ Pregleda: 2159 | Odgovora: 12 ] > FB > Twit

Postavi temu Odgovori

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