Dobrý den, ve své aplikaci chci využít PickIconDlg pro výběr ikon a narazil jsem na následující problém. Pokud je cesta k souboru, s ikonou, delší jak 48 znaků, dialog cestu ořízne, takže je to prakticky nepoužitelné. zde je můj kód:
Public Class DialogPickIcon
Declare Unicode Function PickIconDlg Lib "Shell32" Alias "PickIconDlg" (ByVal hwndOwner As IntPtr, ByVal lpstrFile As String, ByVal nMaxFile As Integer, ByRef lpdwIconIndex As Integer) As Integer
Private iconFile_ As String
Private iconIndex_ As Integer
Public Property IconFile() As String
Get
Return iconFile_
End Get
Set(ByVal value As String)
iconFile_ = value
End Set
End Property
Public Property IconIndex() As Integer
Get
Return iconIndex_
End Get
Set(ByVal value As Integer)
iconIndex_ = value
End Set
End Property
Public Sub New(ByVal path As String, ByVal index As Integer)
iconFile_ = path
iconIndex_ = index
End Sub
Public Function Show(ByVal owner As IntPtr) As System.Windows.Forms.DialogResult
Dim retval As Integer = PickIconDlg(owner, iconFile_, iconFile_.Length * 2, iconIndex_)
Select Case retval
Case 0
retval = System.Windows.Forms.DialogResult.Cancel
Case 1
retval = System.Windows.Forms.DialogResult.OK
End Select
Return retval
End Function
End Class
Našel jsem ukázku použití v c++, kde je vidět změna kódování textu, před a po vyvolání dialogu. Bohužel nevím, jak toto převést do VB. http://www.codeproject.com/KB/dialog/Pic...
char mStr[MAX_PATH] = {0};
WCHAR wstrFile[MAX_PATH];
MultiByteToWideChar(CP_ACP,0,mStr,MAX_PATH,wstrFile,MAX_PATH);
int re = PickIconDlg(this->m_hWnd,wstrFile,MAX_PATH,&mIndex);
WideCharToMultiByte(CP_ACP,0,wstrFile,MAX_PATH,mStr,MAX_PATH,0,0);
Bude někdo schopen mi poradit? Předem díky za všechny odpovědi. HD
|