PDA

View Full Version : سوال در مورد listview و treeview



سید حمید حق پرست
یک شنبه 11 تیر 1391, 18:21 عصر
سلام علیکم
دوستان بنده دو تا سوال داشتم اگر جواب بدهید ممنونم میشوم :

1- دوستان فرض کنید ما دو تا treeview و یک listview روی فرم قرار میدهیم . در treeview چند nodes و زیر مجموعه هنگام اجرا میسازیم . حالا بنده میخوام به listview با توجه به treeview چیزهای اضافه کنم . مثل انستالرها . مثلا میخوام هرچیزی به listview اضافه شد زیر مجموعه nodes سلکت شده در treeview شود . اگر installsheild را دیده باشید متوجه میشوید که چی میگم (این کارو برای

2- فرض کنید دوتا listview رو فرم قرار داده ایم . حالا میخوایم هر شی به انتخاب خودمان که در listview اولی وجود دارد را به listview دومی درگ کنیم و در listview دومی شی درگ شده ست شود (این کاررو برای دوتا treeview بلدم اما listview:گیج:)
و اینکه چطوری با CommonDialog یک فایل را در listview اضافه کنم . طوری که در listview مسیر فایل مورد نظر همراه با نام فایل و پسوندش ست بشه

دوستان من این کار رو برای انستالر میخوام انجام بدم . ممنون میشم راهنماییم کنید چون خیلی احتیاج دارم:قلب:

یا علی (ع)

بهروز عباسی
سه شنبه 13 تیر 1391, 22:51 عصر
درود
دوست عزیز من Vb روی سیستم ندارم و بصورت تئوری میتونم نظر بدم

- دوستان فرض کنید ما دو تا treeview و یک listview روی فرم قرار میدهیم . در treeview چند nodes و زیر مجموعه هنگام اجرا میسازیم . حالا بنده میخوام به listview با توجه به treeview چیزهای اضافه کنم . مثل انستالرها . مثلا میخوام هرچیزی به listview اضافه شد زیر مجموعه nodes سلکت شده در treeview شود . اگر installsheild را دیده باشید متوجه میشوید که چی میگم (این کارو برای
برای این کار باید مرتب آیتم های Listview رو چک کنی و با ایتم های نود مورد نظر مطابقت بدی اگه یکی بود که هیچی اما در غیر این صورت اون ایتم(ها) که در نود موجود نیست رو به نود اضافه کن(در جای عرض کردم که با Tree Viewکار نکردم اگه نظرم عملی نیست شرمنده )

بهروز عباسی
سه شنبه 13 تیر 1391, 23:02 عصر
2- فرض کنید دوتا listview رو فرم قرار داده ایم . حالا میخوایم هر شی به انتخاب خودمان که در listview اولی وجود دارد را به listview دومی درگ کنیم و در listview دومی شی درگ شده ست شود (این کاررو برای دوتا treeview بلدم اما listview:گیج:)]

اینو توی وب پیدا کردم امید وارم کمکت کنه
http://forums.codeguru.com/showthread.php?234263-Dragging-List-View-Item

http://forums.codeguru.com/showthread.php?6441-Drag-and-Drop-in-ListView

بهروز عباسی
سه شنبه 13 تیر 1391, 23:22 عصر
و اینکه چطوری با CommonDialog یک فایل را در listview اضافه کنم . طوری که در listview مسیر فایل مورد نظر همراه با نام فایل و پسوندش ست بشه
این برای نام فایل
Public Function GetFileName(ByVal FileSpec As String) As String
Dim sRevName As String
If Len(FileSpec) Then
sRevName = StrReverse(FileSpec)
GetFileName = StrReverse(Left$( _
sRevName, InStr(1, sRevName, "\") - 1))
End If
End Function

اینم برای مسیر
Public Function GetPath(ByVal FileSpec As String) As String
Dim sRevName As String
Dim sPathName As String
If Len(FileSpec) Then
sRevName = StrReverse(FileSpec)
sPathName = StrReverse(Right$(sRevName, _
Len(sRevName) - InStr(sRevName, "\")))
If Right$(sPathName, 1) = ":" Then
' Root directory, add backslash
sPathName = sPathName & "\"
End If
GetPath = sPathName
End If
End Function

هردوشون توی اون برنامه که برای ساخت ستاپ ساز توی یکی از پست ها قرار دادم هست
و برای پسوند هم بهتره از API استفاده کنی
اما یک راه ساده وقتی نام فایل رو بدست آوردی از آخر تاجایی که به نقطه (.) برسی معمولاً میشه پسوند فایل
و قرار دادنشون توی List View هم که دیگه کاری نداره.

همگی موفق باشید

سید حمید حق پرست
چهارشنبه 14 تیر 1391, 17:37 عصر
سلام علیکم
ممنون از اقای عباسی که برای تاپیک وقت گذاشتن:قلب: . هر تاپیکی میزنم یا بی جواب میمونه یا اقای عباسی زحمت میکشن
دوستان من چه بدی کردم که حاضر نیستید جواب بدید؟؟؟؟؟؟؟؟؟؟؟

و اینکه چطوری با CommonDialog یک فایل را در listview اضافه کنم . طوری که در listview مسیر فایل مورد نظر همراه با نام فایل و پسوندش ست بشه راحترین راه که پیدا کردم : (اما ایکون فایلهاش مونده که انشالله یا دوستان کدی میزارن یا خودم پیدا میکنم:گیج:)

Private Sub Form_Load()
Lv.ColumnHeaders.Add , "#name#", "FileName", 8500
End Sub

Private Sub addfile_Click()
On Error Resume Next
CD.ShowOpen
FilePach = CD.FileName
MainFrm.Lv.ListItems.Add , , FilePach
End Sub

ولی اون دو تای دیگه توش موندم .

برای این کار باید مرتب آیتم های Listview رو چک کنی و با ایتم های نود مورد نظر مطابقط بدی اگه یکی بود که هیچی اما در غیر این صورت اون ایتم(ها) که در نود موجود نیست رو به نود اضافه کن(در جای عرض کردم که با Tree Viewکار نکردم اگه نظرم عملی نیست شرمنده ) بازم تشکر اقای عباسی . اما من نمیدونم چطور اینکارو انجام بدهم چون در این حد با لیست ویو و تری ویو کار نکردم


اینو توی وب پیدا کردم امید وارم کمکت کنه
http://forums.codeguru.com/showthrea...List-View-Item (http://forums.codeguru.com/showthread.php?234263-Dragging-List-View-Item)

http://forums.codeguru.com/showthrea...op-in-ListView (http://forums.codeguru.com/showthread.php?6441-Drag-and-Drop-in-ListView):قلب: . والا اونی که میخوام نبود . عنی کدهاش جوری بود متوجه نشدم :لبخند:

دوستان انجمن لطف کنید یه جواب بدید ممنون میشم:قلب:


یا علی (ع)

بهروز عباسی
چهارشنبه 14 تیر 1391, 18:54 عصر
راحترین راه که پیدا کردم : (اما ایکون فایلهاش مونده که انشالله یا دوستان کدی میزارن یا خودم پیدا میکنم:گیج:)

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

Option Explicit

'Modified API Declaration
Private Declare Function SHGetFileInfo Lib "shell32.dll" Alias "SHGetFileInfoA" (ByVal pszPath As String, ByVal dwFileAttributes As Long, ByRef psfi As SHFILEINFO, ByVal cbFileInfo As Long, ByVal uFlags As ESHGetFileInfoFlagConstants) As Long
Private Declare Sub OleCreatePictureIndirect Lib "oleaut32.dll" (ByRef lpPictDesc As PictDesc, ByRef riid As Guid, ByVal fOwn As Long, ByRef lplpvObj As IPictureDisp)

'API Constants
Private Const ERRORAPI As Long = 0
Private Const MAX_PATH As Long = 260

'API Types
Private Type Guid
Data1 As Long
Data2 As Integer
Data3 As Integer
Data4(0 To 7) As Byte
End Type

Private Type PictDesc
cbSizeofStruct As Long
picType As Long
hImage As Long
xExt As Long
yExt As Long
End Type

Private Type SHFILEINFO
hIcon As Long ' : icon
iIcon As Long ' : icondex
dwAttributes As Long ' : SFGAO_ flags
szDisplayName As String * MAX_PATH ' : display name (or path)
szTypeName As String * 80 ' : type name
End Type

'User-Defined API Enum
Private Enum ESHGetFileInfoFlagConstants
SHGFI_ATTRIBUTES = &H800 'get file attributes
SHGFI_DISPLAYNAME = &H200 'get display name
SHGFI_EXETYPE = &H2000 'get exe type
SHGFI_ICON = &H100 'get icon handle and index
SHGFI_LARGEICON = &H0 'get file's large icon
SHGFI_LINKOVERLAY = &H8000 'add link overlay on the icon
SHGFI_OPENICON = &H2 'get file's open icon
SHGFI_SELECTED = &H10000 'blend icon with the system highlight color
SHGFI_SHELLICONSIZE = &H4 'get shell-sized icon
SHGFI_SMALLICON = &H1 'get file's small icon
SHGFI_SYSICONINDEX = &H4000 'get icon index from system image list
SHGFI_TYPENAME = &H400 'get file type description
SHGFI_USEFILEATTRIBUTES = &H10 'use dwFileAttributes parameter
End Enum

Enum EFileIconTypeConstants
LargeIcon = 0
SmallIcon = 1
End Enum

Enum EFileExeTypeConstants
MSDosApp = 2 'MS-DOS .EXE, .COM or .BAT file
NonExecutable = 0 'Nonexecutable file or an error condition
Win32Console = 3 'Win32 console application
WindowsApp = 1 'Windows application
End Enum

'Variable Declarations
Private m_File As String
Private m_Handle As Long
Private m_IconType As EFileIconTypeConstants
Private m_OpenState As Boolean
Private m_Overlay As Boolean
Private m_Selected As Boolean

Property Get DisplayName(Optional File) As String
'Returns the display name of the specified file.
Dim p_Null As Long
Dim p_Ret As Long
Dim p_SHFI As SHFILEINFO

If IsMissing(File) Then
File = m_File
End If

p_Ret = SHGetFileInfo(CStr(File), 0&, p_SHFI, Len(p_SHFI), SHGFI_DISPLAYNAME)

If Not p_Ret = ERRORAPI Then
DisplayName = p_SHFI.szDisplayName

p_Null = InStr(1, DisplayName, vbNullChar)

If p_Null > 0& Then
DisplayName = Left$(DisplayName, p_Null - 1)
End If
End If
End Property

Property Get ExeType(Optional File) As EFileExeTypeConstants
'Returns the display name of the specified file.
Dim p_Ret As Long
Dim p_SHFI As SHFILEINFO

If IsMissing(File) Then
File = m_File
End If

p_Ret = SHGetFileInfo(CStr(File), 0&, p_SHFI, Len(p_SHFI), SHGFI_EXETYPE)

If p_Ret = 0 Then
ExeType = NonExecutable
Else
If HiWord(p_Ret) > 0 Then 'NE 0x00004E45 or PE 0x00005045
ExeType = WindowsApp
Else
Select Case LoWord(p_Ret)
Case 23117 'MZ 0x00004D5A
ExeType = MSDosApp
Case 17744 'PE 0x00005045
ExeType = Win32Console
End Select
End If
End If
End Property

Property Get File() As String
'Returns/sets the complete file path to be used.
File = m_File
End Property

Property Let File(Value As String)
m_File = Value
End Property

Property Get Handle() As Long
'Returns/sets the icon handle to be used by the IconEx property.
Handle = m_Handle
End Property

Property Let Handle(Value As Long)
m_Handle = Value
End Property

Property Get IconType() As EFileIconTypeConstants
'Returns/sets the type of icon to retrieve.
IconType = m_IconType
End Property

Property Let IconType(Value As EFileIconTypeConstants)
m_IconType = Value
End Property

Property Get Icon(Optional File, Optional IconType) As IPictureDisp
'Returns the icon of the specified file.
If IsMissing(File) Then
File = m_File
End If

If IsMissing(IconType) Then
IconType = m_IconType
End If

Dim p_Flags As ESHGetFileInfoFlagConstants
Dim p_hIcon As Long
Dim p_Ret As Long
Dim p_SHFI As SHFILEINFO

If m_IconType = LargeIcon Then
p_Flags = SHGFI_ICON Or SHGFI_LARGEICON
Else
p_Flags = SHGFI_ICON Or SHGFI_SMALLICON
End If

If m_Overlay Then
p_Flags = p_Flags Or SHGFI_LINKOVERLAY
End If

If m_Selected Then
p_Flags = p_Flags Or SHGFI_SELECTED
Else
p_Flags = p_Flags And Not SHGFI_SELECTED
End If

If m_OpenState Then
p_Flags = p_Flags Or SHGFI_OPENICON
Else
p_Flags = p_Flags And Not SHGFI_OPENICON
End If

p_Ret = SHGetFileInfo(CStr(File), 0&, p_SHFI, Len(p_SHFI), p_Flags)

If Not p_Ret = ERRORAPI Then
p_hIcon = p_SHFI.hIcon

If Not p_hIcon = 0& Then
Set Icon = IconEx(p_hIcon)
End If
End If
End Property

Property Get IconEx(Optional hIcon As Long) As IPictureDisp
'Returns the file's icon using the specified icon handle.
If hIcon = 0& Then
hIcon = m_Handle

If hIcon = 0& Then
Exit Property
End If
End If

Dim p_Picture As IPictureDisp
Dim p_PicDesc As PictDesc
Dim p_Guid As Guid

p_PicDesc.cbSizeofStruct = Len(p_PicDesc)
p_PicDesc.picType = vbPicTypeIcon
p_PicDesc.hImage = hIcon

'IPicture GUID {7BF80980-BF32-101A-8BBB-00AA00300CAB}
With p_Guid
.Data1 = &H7BF80980
.Data2 = &HBF32
.Data3 = &H101A
.Data4(0) = &H8B
.Data4(1) = &HBB
.Data4(2) = &H0
.Data4(3) = &HAA
.Data4(4) = &H0
.Data4(5) = &H30
.Data4(6) = &HC
.Data4(7) = &HAB
End With
'From vbAccelerator... (http://www.vbaccelerator.com)

OleCreatePictureIndirect p_PicDesc, p_Guid, True, p_Picture

Set IconEx = p_Picture
End Property

Property Get LinkOverlay() As Boolean
'Returns/sets a value to determine if a linkoverlay icon is displayed on the icon.
LinkOverlay = m_Overlay
End Property

Property Let LinkOverlay(Value As Boolean)
m_Overlay = Value
End Property

Property Get OpenState() As Boolean
'Returns/sets a value to determine if the icon will be in open state. (Ex. Folders)
OpenState = m_OpenState
End Property

Property Let OpenState(Value As Boolean)
m_OpenState = Value
End Property

Property Get Selected() As Boolean
'Returns/sets a value to determine if the icon is in selected state.
Selected = m_Selected
End Property

Property Let Selected(Value As Boolean)
m_Selected = Value
End Property

Property Get TypeName(Optional File) As String
'Returns the type name of the specified file.
Dim p_Null As Long
Dim p_Ret As Long
Dim p_SHFI As SHFILEINFO

If IsMissing(File) Then
File = m_File
End If

p_Ret = SHGetFileInfo(CStr(File), 0&, p_SHFI, Len(p_SHFI), SHGFI_TYPENAME)

If Not p_Ret = ERRORAPI Then
TypeName = p_SHFI.szTypeName

p_Null = InStr(1, TypeName, vbNullChar)

If p_Null > 0& Then
TypeName = Left$(TypeName, p_Null - 1)
End If
End If
End Property

'Private properties
Private Property Get HiWord(DWord As Long) As Long
HiWord = (DWord And &HFFFF0000) \ &H10000
End Property

Private Property Get LoWord(DWord As Long) As Long
If DWord And &H8000& Then
LoWord = DWord Or &HFFFF0000
Else
LoWord = DWord And &HFFFF&
End If
End Property



نام کلاس هم هستش:

cls_GetFileIcon

سید حمید حق پرست
سه شنبه 20 تیر 1391, 21:24 عصر
دوستان کسی هست بنده رو راهنمایی کنه


1- دوستان فرض کنید ما دو تا treeview و یک listview روی فرم قرار میدهیم . در treeview چند nodes و زیر مجموعه هنگام اجرا میسازیم . حالا بنده میخوام به listview با توجه به treeview چیزهای اضافه کنم . مثل انستالرها . مثلا میخوام هرچیزی به listview اضافه شد زیر مجموعه nodes سلکت شده در treeview شود . اگر installsheild را دیده باشید متوجه میشوید که چی میگم (این کارو برای ستاپ ساز میخوام)

یا علی (ع)

محسن واژدی
سه شنبه 20 تیر 1391, 22:35 عصر
دوستان من چه بدی کردم که حاضر نیستید جواب بدید؟؟؟؟؟؟؟؟؟؟؟

سلام علیکم
اگر ایده هایی که به نظرتان میرسد را پیاده سازی کنید (یعنی نوشتن این قسمت را شروع کنید) و جای جایی که به مشکل برخورد کردید را در اینجا مطرح کنید سریعتر به نتیجه میرسیم چرا که از هر زاویه که به موضوع توجه کنیم نیازمند برنامه نویسی بیشتری هست و بالطبع صرف وقت بیشتر، که متاسفانه در مورد قسمت دوم یعنی زمان ... :ناراحت: