Program açılışı için asimetrik form ?

Başlatan EMG81, 09 Ocak 2011, 23:25:42

RcALTIN

Sanırım anti-alias ile ilgili sorunlar ortaya çıkıyor, ben denemeden mantıken söylemiştim şimdi denedim ve dediğiniz gibi sorun var... Yapacağınız şekilleri v.s antialias olmadan(hard/sharp) yaparsanız tam olarak düzgün görünüyorlar ancak transparan antialias olunca o kısımlar beyazlaşarak görünüyor, siz en iyisi @ByteMaster'in verdiği örneğin Vb.net ile yapımını araştırın...
KİMSEYİ ENGELLEDİĞİM YOK, ÖZEL İLETİ DEVRE DIŞI !

EMG81

#16
Bu resim denediklerimin en iyisi fakat halen var. Ya benim sistemimde bir sorun var, yada yanlış bir yoldayız diye düşünmeye başladım... Google dan png uzantılı bikaç resim daha indirip denedim sonuç yine aynı.


şu print olayınada deyinmek istiyorum... Formun tam görüntüsünü yazdırma hakkında bilgisi olan yokmu ?

Burak B

#17
Bakınız üstünde durarak iki mevzuda hatırlatma yapıyorum bu hususta.


1- Bu görüntüdeki türde bir pencere için UpdateLayeredWindow ve SetLayeredWindow API' lerine hakim olmanız gerekir. Yüksek seviye diller elinizi sürmeden buna imkan sağlıyor olabilirler. Ancak temelde bu yatar. Burdaki en önemli nokta bakınız yukarıdaki splash veya photoshop görenleriniz için onun splashindeki  transparanlık felan bu api ile elde edilir. Pencere oluşturulurken pencere stili değeri WS_EX_LAYERED sabitini içeriyor olmalıdır. Bir pencerenin bu değerini GetWindowLong ve SetwindowLong apileriyle kontrol ve modifiye edebilirsiniz.

2- Bu "Layered Windows" mevzusu "Custom Shaped Windows" ile karıştırılmasın ki bu mevzu Regional Pencerelerle alakalıdır. Bknz; "Window Regions". Onda da yukarıdaki gibi pencereler elde edebilirsiniz. Ancak tek bir farkla hani o gölgeler ve yarı geçirgen etkiler yokmu onları elde edemezsiniz. En basit şekilde hani siz sürekli eliptik bir pencere oluşturuyorsunuz diyelim. Onu öyle değilde tanımlanmış bir regiona elimizdeki bitmapin özel olarak transparandır diye belirtilmiş bir renk değeri hariç (Mesela Çingene pembesi) her renk değeri için 1x1 boyutlarında yani bir pixellik bir rectangular region eklersek ne olur :) Elimizdeki bitmapin şeklinde bir penceremiz. bunuda penceremize SetWindowRgn API' si ile ilişkilendirdiğimizde. Penceremizin şekli oluşmuş olur geriye yüzeyini region için kullandığımız bitmap ile kaplamak kalır ki bunuda o bitmapi bir brush olarak tanımlayarak pencere oluşturma aşamasında yapabilirsiniz. Ama söylediğim gibi bu yöntemde o gölgeler ve yumuşak geçişler yoktur. Ayrıca sadece regional windows kullandığınızda kenarlarda antialias etki elde edemezsiniz kenarlar hep pütürlü kalır. Yani bitmapin kenarlarına kesinlikle antialias vermemeniz gerekir. Ancak aynı Yönteme Bitmapi yüzeye uygulama aşamasında 1 nci maddede bahsettiğim API' yi eklerseniz ve bunu sürekli update ederseniz o zaman o domates, photoshop veya visual studio splashi etkisini alırsınız.

Not: Layered Pencerelerin bir dezavantajı vardır. Böyle bir pencere üzerine child pencereler koyamazsınız. Buton, edit v.b. gibi. Bu durum win7' de değiştiyse bilemiyorum tabi.

Fazla teknik anlatmış olabilirim. Buyrun birkaç link daha;

Delphi için;
http://ibrahimcoban.com/index.php/layeredwindow/

VB 6.0;
http://www.andreavb.com/tip050008.html

http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=55313&lngWId=1

VB.NET;
http://allapi.mentalis.org/apilist/SetLayeredWindowAttributes.shtml

http://www.codeproject.com/KB/vb/xDock.aspx

http://www.xtremevbtalk.com/showthread.php?t=299784

C# için; Bunda tam aradığın şey var
http://blogs.msdn.com/b/mswanson/archive/2005/07/07/436618.aspx

C++ için;
http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/21b5b069-4d5a-4e13-a74c-db8ef5d31a31/

"... a healthy dose of paranoia leads to better systems." Jack Ganssle

EMG81

#18
Teşekkürler

kayaaydin

Evet bence de Paint yerine Fireworks, Photoshop gibi grafik editörleri kullansanız iyi olur.