PDA

View Full Version : Transparent با استفاده از API های GDI



Delphi Coder
سه شنبه 01 بهمن 1392, 17:08 عصر
سلام.
دوستان من اومدم یک Bitmap رو گذاشتم توی Resource برنامه بعد میام اونو دستی با استفاده از API میخوام به حالت transparent بزارمش روی یه Button. اما هر چی تلاش کردم نتونستم این کار رو انجام بدم.


WinHandle := CreateWindowEx(0, 'Button',nil, WS_CHILD or WS_VISIBLE or BS_BITMAP,1,1,35,35,Handle,0,hInstance,nil);
IconHandle := LoadImage(HInstance,PAnsiChar(9004),IMAGE_BITMAP,0 ,0,LR_LOADTRANSPARENT);
SendMessage(WinHandle,BM_SETIMAGE,IMAGE_BITMAP,Ico nHandle);

طبق اون چیزی که MSDN اینجـــــــــــــــــــــ ــــــــا (http://msdn.microsoft.com/en-us/library/windows/desktop/ms648045%28v=vs.85%29.aspx) گفته LR_LOADTRANSPARENT باید جواب بده ولی نمیدونم چرا کار نمیکنه و ظاهرا هم مشکل توی Load کردن Image هست چون من برای تست روی یک Image هم assign کردم دیدم اونجا هم transparent نیست.
سورس برنامه رو attach کردم.

توضیح اینکه من این مشکل رو خیلی راحت با استفاده از Icon میتونم حل کنم اما میخوام بدونم چرا Bitmap جواب نمیده.

Delphi Coder
سه شنبه 01 بهمن 1392, 18:14 عصر
پیدا کردم مشکل از کجا بوده. اون API فقط قادر به transparent کردن bitmap های 8 بیتی هست. جالب اینکه توی فایلهای SDK Help قدیمی که با دلفی 7 بود به این مساله اشاره نشده اما الان توی وبسایت خود MSDN نوشته.