PDA

View Full Version : تغییر رنگ TreeView



m.4.r.m
شنبه 05 مرداد 1392, 17:56 عصر
دوستان من با این کد می تونم رنگ داخل TreeView رو عوض کنم به هر رنگی که دوست دارم اما می خوام حالت Transparent ( تو خالی ) داشته باشه

Option Explicit

Private Declare Function SendMessage Lib "User32" _
Alias "SendMessageA" _
(ByVal hWnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
lParam As Long) As Long

Private Declare Function GetWindowLong Lib "User32" _
Alias "GetWindowLongA" _
(ByVal hWnd As Long, _
ByVal nIndex As Long) As Long

Private Declare Function SetWindowLong Lib "User32" _
Alias "SetWindowLongA" _
(ByVal hWnd As Long, _
ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long

Private Const GWL_STYLE = -16&
Private Const TVM_SETBKCOLOR = 4381&
Private Const TVM_GETBKCOLOR = 4383&
Private Const TVS_HASLINES = 2&

Dim frmlastForm As Form

Private Sub Form_Load()
Dim nodX As Node
Set nodX = TreeView1.Nodes.Add(, , "R", "Root")
Set nodX = TreeView1.Nodes.Add("R", tvwChild, "C1", "Child 1")
Set nodX = TreeView1.Nodes.Add("R", tvwChild, "C2", "Child 2")
Set nodX = TreeView1.Nodes.Add("R", tvwChild, "C3", "Child 3")
Set nodX = TreeView1.Nodes.Add("R", tvwChild, "C4", "Child 4")
nodX.EnsureVisible
TreeView1.Style = tvwTreelinesText ' Style 4.
TreeView1.BorderStyle = vbFixedSingle
End Sub

Private Sub Command1_Click()
Dim lngStyle As Long

Call SendMessage(TreeView1.hWnd, _
TVM_SETBKCOLOR, _
0, _
ByVal RGB(255, 255, 250)) 'Change the background
'color to red.

' Now reset the style so that the tree lines appear properly
lngStyle = GetWindowLong(TreeView1.hWnd, GWL_STYLE)
Call SetWindowLong(TreeView1.hWnd, _
GWL_STYLE, _
lngStyle - TVS_HASLINES)
Call SetWindowLong(TreeView1.hWnd, GWL_STYLE, lngStyle)
End Sub



کسی نظری نداره ؟

mehran901
شنبه 05 مرداد 1392, 18:37 عصر
با استفاده از کد زیر میتونین رنگ خاصی رو از فرم حذف کنین ، رنگ مشخصی رو به بک گراند بدین و معادل RGB رو در کد زیر جایگزین کنین


Private Declare Function GetWindowLong Lib "User32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "User32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function SetLayeredWindowAttributes Lib "user32.dll" (ByVal hWnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long


Const LWA_COLORKEY = &H1
Const GWL_EXSTYLE = (-20)
Const WS_EX_LAYERED = &H80000
Const BM_SETSTATE = &HF3


Private Sub Form_Load()
Dim Ret As Long
Dim CLR As Long
Me.BackColor = RGB(1, 1, 1) ' E???? ??? ?? ????? ???
CLR = Me.BackColor
Ret = GetWindowLong(Me.hWnd, GWL_EXSTYLE)
Ret = Ret Or WS_EX_LAYERED
SetWindowLong Me.hWnd, GWL_EXSTYLE, Ret
SetLayeredWindowAttributes Me.hWnd, CLR, 0, LWA_COLORKEY
End Sub




واسه ترانسپرنت هم میتونین از این نمونه استفاده کنین و هندل اون بخش رو بهش بدین


Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long

Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Private Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hWnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long



Private Sub Command1_Click()

Dim Retval As Long

Text1.Text = 100
Retval = GetWindowLong(hWnd, -20)

Retval = Retval Or 524288

SetWindowLong hWnd, -20, Retval

SetLayeredWindowAttributes hWnd, 0, Val(Text1.Text), 2

End Sub

m.4.r.m
شنبه 05 مرداد 1392, 19:09 عصر
این شفافیت رو کم می کنه و نوشته رنگشون کم رنگ دیده میشه این فکر نکنم به درد بخوره

mehran901
شنبه 05 مرداد 1392, 19:51 عصر
خب دوست عزیز از کد اولی نمیشه استفاده کنی و کلا بک گراند رو حذف کنی ؟ ( حتما باید ترانسپرنت باشه ؟ ) درغیر این صورت من راه حلی به ذهنم نمیرسه رسید حتما بهت اطلاع میدم

m.4.r.m
شنبه 05 مرداد 1392, 23:18 عصر
مهران جان با کد اولی فکر کنم مشکل حل بشه میشه یه هندل روش انجام بدی ببینی درست کار می کنه یا نه . ممنون میشم من تست کردم یه جا به مشکل بر خوردم مرسی

vbhamed
یک شنبه 06 مرداد 1392, 13:02 عصر
سلام
مي‌خواي حالت شفاف Treeview روي فرم خودت باشه يا روي كل ويندوز ؟
اگر روي فرم خودت مي‌خواي روشهات رو تست كن ولي اگر پيدا نكردي به نظر من بهتره از اون قسمت فرمت عكس بگيري و روي گذاشتن عكس در زمينهTreeview كار كني

m.4.r.m
یک شنبه 06 مرداد 1392, 16:17 عصر
گذاشتن عکس روی Treeview کدش رو دارم من منظورم اینه که بشه TreeView رو مثل Label1 از خاصیت Transparent بودن استفاده کرد .

vbhamed
دوشنبه 07 مرداد 1392, 08:44 صبح
سلام
اينو كه تست نكردم ولي گفتم اگر نشد، Tree رو مخفي كنيد و از زيرش عكس بگيريد و اون عكس رو بزاريد پس زمينه Tree، اينطوري به نظر مياد شفاف شده
البته فكر مي‌كنم كامپوننتهاي Treeview ديگه اي هم باشن كه اين حالت رو پشتيباني كنند

m.4.r.m
دوشنبه 07 مرداد 1392, 14:53 عصر
البته فكر مي‌كنم كامپوننتهاي Treeview ديگه اي هم باشن كه اين حالت رو پشتيباني كنند
من پیدا نکردم اگه دارید لطف کنید بی نصیب نزارید . ممنون