Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 12 odgovora
  • 3.064 pregleda

Najnovija ↓

Delphi, rounded border form i anti-aliasing 24.03.2013. u 23:27 · pre 165 meseci #1
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.
Re: Delphi, rounded border form i anti-aliasing 25.03.2013. u 11:08 · pre 165 meseci
izmenjeno 1 put, poslednji put Lawd 25.03.2013. u 11:21
  1. Lawd25.03.2013. u 11:21zapis iz teksta poruke
#4
Dokumentacija kaze da Win32 podrzava samo aliased prozore / regione.
Re: Delphi, rounded border form i anti-aliasing 25.03.2013. u 14:06 · pre 165 meseci #6
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 :)
Re: Delphi, rounded border form i anti-aliasing 25.03.2013. u 17:06 · pre 165 meseci #9
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.
Re: Delphi, rounded border form i anti-aliasing 26.03.2013. u 08:55 · pre 165 meseci #10
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
Re: Delphi, rounded border form i anti-aliasing 26.03.2013. u 13:03 · pre 165 meseci
izmenjeno 1 put, poslednji put reiser 26.03.2013. u 13:15
  1. reiser26.03.2013. u 13:15zapis iz teksta poruke
#11
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 :)
Re: Delphi, rounded border form i anti-aliasing 28.03.2013. u 13:49 · pre 165 meseci #12
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
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme