PDA

View Full Version : transparent کردن قسمتی از فرم



specialim
چهارشنبه 05 دی 1386, 13:34 عصر
با عرض سلام خدمت دوستان واساتید بزرگوار
من یک فرم دارم که یک عکس در Background این فرم قرار دارد
تعدادی اشیاء در این فرم نیز قرار دارد . از قبیل ( textbox - treeview - label - picturebox )
حال میخواهم این اشیاء تا حدودی عکس background را نشان دهند . مثلا textbox در همان جائی که قرار دارد عکس خود فرم را کمی کمرنگ تر داشته باشد به صورتی که نوشته های آن هم قابل خواندن باشد .
با تشکر

ir_programmer
چهارشنبه 05 دی 1386, 16:12 عصر
اگر عکس رو تو Background فرم انتخاب کنی.
بعد یه دکمه بزاری روی فرم و خاصیت BackColor رو به Transparent تغییر بدی، تصویر زمینه توی دکمه نشون داده میشه.

specialim
چهارشنبه 05 دی 1386, 16:55 عصر
بله حرف شما کاملا درسته و برای دکمه ها میشه این کارو کرد ولی برای textbox ها ویا treeview در backcolor خاصیت tranceparent را نمی گیرند و error میدهد

sinpin
چهارشنبه 05 دی 1386, 18:00 عصر
با عرض سلام خدمت دوستان واساتید بزرگوار
من یک فرم دارم که یک عکس در Background این فرم قرار دارد
تعدادی اشیاء در این فرم نیز قرار دارد . از قبیل ( textbox - treeview - label - picturebox )
حال میخواهم این اشیاء تا حدودی عکس background را نشان دهند . مثلا textbox در همان جائی که قرار دارد عکس خود فرم را کمی کمرنگ تر داشته باشد به صورتی که نوشته های آن هم قابل خواندن باشد .
با تشکر

برای textBox روش مستقیم و سرراستی ندیدم این رو ببینید :
http://www.codeproject.com/KB/edit/alphablendtextbox.aspx

اما برای لیبل و پیکچرباکس و... میتونید اینکار رو انجام بدید :

label1.BackColor = Color.FromArgb(<0 ~ 255>, textBox1.BackColor);

specialim
پنج شنبه 06 دی 1386, 12:37 عصر
با تشکر از پاسخ شما ولی مشکل من را حل نکرد . شاید من نتوانستم منظورم را درست بیان کنم .
یک مثال میزنم : مسنجر MSN VISTA رو 100% دیدید . تمامی اشیاء حالت شیشه ای دارند .
در ضمن خاصیت trancparent برای خیلی از اشیاء مثل TEXTBOX تعریف نشده است

khepelesibilo
یک شنبه 09 دی 1386, 23:39 عصر
این کد برنامه ای که می خواین توو vb 6 هستش، خط به خط به vb.net تبدیلش کنین :


Const WINDING = 2
Private Type POINTAPI
X As Long
Y As Long
End Type
Private Declare Function CreatePolygonRgn Lib "gdi32" (lpPoint As POINTAPI, ByVal nCount As Long, ByVal nPolyFillMode As Long) As Long
Private Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long
Sub ShapeForm()
Const NUM_PTS = 6
Dim status As Long
Dim pts(1 To NUM_PTS) As POINTAPI
Dim rgn As Long
Dim old_rgn As Long
Dim pen As Long
Dim old_pen As Long
pts(1).X = 16
pts(1).Y = 221
pts(2).X = 133
pts(2).Y = 42
pts(3).X = 344
pts(3).Y = 43
pts(4).X = 452
pts(4).Y = 221
pts(5).X = 349
pts(5).Y = 411
pts(6).X = 122
pts(6).Y = 412
rgn = CreatePolygonRgn(pts(1), NUM_PTS, WINDING)
old_rgn = SetWindowRgn(hWnd, rgn, True)

End Sub
Private Sub Form_Load()
ShapeForm
End Sub

shahrdar
دوشنبه 10 دی 1386, 01:13 صبح
Private Declare Function CreatePolygonRgn Lib "gdi32" (ByRef lpPoint As POINTAPI, ByVal nCount As Integer, ByVal nPolyFillMode As Integer) As Integer
Private Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Integer, ByVal hRgn As Integer, ByVal bRedraw As Boolean) As Integer
Const WINDING As Short = 2
Private Structure POINTAPI
Dim X As Integer
Dim Y As Integer
End Structure
Sub ShapeForm()
Dim hWnd As Object
Const NUM_PTS As Short = 6
Dim pts(NUM_PTS) As POINTAPI
Dim rgn As Integer
Dim old_rgn As Integer
pts(1).X = 16
pts(1).Y = 221
pts(2).X = 133
pts(2).Y = 42
pts(3).X = 344
pts(3).Y = 43
pts(4).X = 452
pts(4).Y = 221
pts(5).X = 349
pts(5).Y = 411
pts(6).X = 122
pts(6).Y = 412
rgn = CreatePolygonRgn(pts(1), NUM_PTS, WINDING)
old_rgn = SetWindowRgn(hWnd, rgn, True)

End Sub

khepelesibilo
دوشنبه 10 دی 1386, 11:26 صبح
روال کاریه من توو فروم های برقی و کامپیوتری اینه که به کسی که سوال رو پرسیده فرستی بدیم برای این که روو قسمت کوچکی از پروژه ،خودش هم کار کنه!‌ نوشتن جواب آخر هم شخص رو تنبل می کنه هم عادت می ده جای گشتن و کمی تحقیق، فقط به پرسیدن عادت کنه!

خط آخر رو به :
old_rgn = SetWindowRgn(Me.Handle, rgn, True)
تغییر بدین و روتین ShapeForm رو توو form load صدا کنین ...