Page 1 of 2
Shell Common Dialogs
Posted: Mon Jul 11, 2011 8:21 am
by Antonio Linares
http://koti.mbnet.fi/vaultec/files/misc ... ommon.html
comdlg32.prg
Code: Select all
#include "FiveWin.ch"
function Main()
MsgInfo( PickIconDlg() )
return nil
#pragma BEGINDUMP
#include <windows.h>
#include <hbapi.h>
BOOL WINAPI PickIconDlg(
HWND hwndOwner,
LPSTR lpstrFile,
DWORD nMaxFile,
LPDWORD lpdwIconIndex );
HB_FUNC( PICKICONDLG )
{
DWORD dwIconIndex = 0;
char buffer[ 256 ];
memset( buffer, 0, 256 );
if( PickIconDlg( ( HWND ) hb_parnl( 1 ), buffer, 256, &dwIconIndex ) )
hb_retnl( dwIconIndex );
}
#pragma ENDDUMP
Re: Shell Common Dialogs
Posted: Mon Jul 11, 2011 8:32 am
by Antonio Linares
http://www.codeproject.com/KB/shell/runfiledlg.aspx
Code: Select all
#include "FiveWin.ch"
function Main()
// MsgInfo( PickIconDlg() )
RunFileDlg()
return nil
#pragma BEGINDUMP
#include <windows.h>
#include <hbapi.h>
BOOL WINAPI PickIconDlg(
HWND hwndOwner,
LPSTR lpstrFile,
DWORD nMaxFile,
LPDWORD lpdwIconIndex );
typedef void WINAPI ( * PRUNFILEDLG ) (
HWND hwndOwner,
HICON hIcon,
LPCSTR lpstrDirectory,
LPCSTR lpstrTitle,
LPCSTR lpstrDescription,
UINT uFlags );
HB_FUNC( PICKICONDLG )
{
DWORD dwIconIndex = 0;
char buffer[ 256 ];
memset( buffer, 0, 256 );
if( PickIconDlg( ( HWND ) hb_parnl( 1 ), buffer, 256, &dwIconIndex ) )
hb_retnl( dwIconIndex );
}
HB_FUNC( RUNFILEDLG )
{
FARPROC pRunFileDlg = GetProcAddress( GetModuleHandle( "shell32.dll" ), ( LPCSTR ) 61 );
PRUNFILEDLG p = ( PRUNFILEDLG ) pRunFileDlg;
p( ( HWND ) hb_parnl( 1 ), ( HICON ) hb_parnl( 2 ), hb_parc( 3 ), hb_parc( 4 ), hb_parc( 5 ), hb_parnl( 6 ) );
}
#pragma ENDDUMP
Re: Shell Common Dialogs
Posted: Mon Jul 11, 2011 7:12 pm
by cuatecatl82
Hola Maestro Antonio:
Yo hize lo mismo que la funcion PickIconDlg(), algo parecido, pero muy muy rudimentario.
http://forums.fivetechsupport.com/viewt ... 98#p106798
Woow. me hubiera esperado unos meses más jejeje, que se necesita para implementarlo..?
Como siempre: Elegante función..
Re: Shell Common Dialogs
Posted: Mon Jul 11, 2011 8:12 pm
by cuatecatl82
Contnuando y molestando con los dialogos de Windows:
Hay alguna corrección o modo de poder hacer trabajar la función WNetBrowseDialog()
tengo lo siguiente:
Code: Select all
#Include "FIVEWIN.CH"
STATIC oWnd
#Define TYPE_DRIVE 1
#Define TYPE_FILE 2
#Define TYPE_PRINTER 3
#Define TYPE_COMM 4
//--------------------------------------------------------------------//
FUNCTION Main()
DEFINE Window oWnd TITLE "Probando la Red Local"
ACTIVATE Window oWnd MAXIMIZED ON INIT MSGInfo(WNetBrowseDialog(oWnd,TYPE_FILE, "Z:\"),"Demo")
Return nil
Siempre retorna "Nil", ya agregue el archivo "netapi32.Prg", y tampoco funciona...
Gracias.
Re: Shell Common Dialogs
Posted: Tue Jul 12, 2011 4:16 am
by Cgallegoa
Maestro Antonio,
No compila con xHarbour: "Error: Unresolved external 'PickIconDlg' referenced from C:\TRANSI68\PRUEBA1.OBJ
"
Qué cambio debe hacerse para xHarbour ?
Observo desde hace semanas que tus ejemplos están hechos sólo para Harbour, por lo que los que usamos sólo xHarbour quedamos out. Hay alguna razón ?
Saludos y gracias,
Carlos Gallego
Re: Shell Common Dialogs
Posted: Thu Jul 14, 2011 12:40 am
by cuatecatl82
Re: Shell Common Dialogs
Posted: Thu Jul 14, 2011 6:03 am
by xmanuel
Tal vez la linea:
ACTIVATE Window oWnd MAXIMIZED ON INIT MSGInfo(WNetBrowseDialog(oWnd,TYPE_FILE, "Z:\"),"Demo")
Deberás cambiarla a:
ACTIVATE Window oWnd MAXIMIZED ON INIT MSGInfo(WNetBrowseDialog(oWnd:hWnd,TYPE_FILE, "Z:\"),"Demo")
Re: Shell Common Dialogs
Posted: Thu Jul 14, 2011 3:56 pm
by cuatecatl82
Manuel:
Gracias pero ya lo habia probado, y tampoco funciona..
Maestro Antonio o Daniel, una ayudita por favor..
Gracias..
Re: Shell Common Dialogs
Posted: Thu Jul 14, 2011 5:07 pm
by Daniel Garcia-Gil
Victor
al parecer es una funcion que se usaba en 16bit, no sabria decir la equivalemte a 32bit
Re: Shell Common Dialogs
Posted: Fri Jul 15, 2011 12:21 am
by cuatecatl82
Gracias Daniel por la Info, no tengo a la mano Fivewin para Clipper para comprobarlo y asegurarlo, buscando en la red encontre un codigo en VB6 que hace lo mismo, pero no entiendo y no lo puedo traducirlo a FW, Alguien puede darme una mano:
Code: Select all
Option Explicit
'Constantes
Private Const ERROR_SUCCESS As Long = 0
Private Const MAX_PATH As Long = 260
Private Const CSIDL_NETWORK As Long = &H12
Private Const BIF_RETURNONLYFSDIRS As Long = &H1
Private Const BIF_BROWSEFORCOMPUTER As Long = &H1000
'Estructura BROWSEINFO necesaria para el Api SHBrowseForFolder
Private Type BROWSEINFO 'BI
hOwner As Long
pidlRoot As Long
pszDisplayName As String
lpszTitle As String
ulFlags As Long
lpfn As Long
lParam As Long
iImage As Long
End Type
'Declaramos la función Api SHBrowseForForlder
Private Declare Function SHBrowseForFolder _
Lib "shell32.dll" _
Alias "SHBrowseForFolderA" ( _
lpBrowseInfo As BROWSEINFO) As Long
'Declaramos la función Api SHGetSpecialFolderLocation
Private Declare Function SHGetSpecialFolderLocation Lib "shell32.dll" ( _
ByVal hwndOwner As Long, _
ByVal nFolder As Long, _
pidl As Long) As Long
'Función que devuelve el nombre de la máquina
Private Function Buscar_Equipo_De_Red() As String
Dim BI As BROWSEINFO
Dim pidl As Long
Dim sPath As String
Dim pos As Integer
' Obtener el pidl de la carpeta Entorno de red
If SHGetSpecialFolderLocation(Me.hWnd, CSIDL_NETWORK, pidl) = ERROR_SUCCESS Then
With BI
.hOwner = Me.hWnd
.pidlRoot = pidl
.pszDisplayName = Space$(MAX_PATH)
.lpszTitle = " Seleccionar el ordenador de la red de la lista :"
.ulFlags = BIF_BROWSEFORCOMPUTER
End With
' Esto abre el diálogo para buscar el equipo de red
If SHBrowseForFolder(BI) <> 0 Then
'retorna el valor a la función, es decir el nombre del equipo
Buscar_Equipo_De_Red = "\\" & Replace(BI.pszDisplayName, Chr(0), vbNullString)
End If
End If
End Function
Private Sub Command1_Click()
' Llama a la función que abre el cuadro de diálogo
Call Buscar_Equipo_De_Red
End Sub
Private Sub Form_Load()
Command1.Caption = " Buscar equipo de Red "
End Sub
Fuente:
http://www.recursosvisualbasic.com.ar/h ... asic/3.htm
Gracias..
Re: Shell Common Dialogs
Posted: Fri Jul 15, 2011 1:12 am
by Daniel Garcia-Gil
Hola
asi es mas facil....
te dejo el codigo
Code: Select all
#include "fivewin.ch"
#define BIF_RETURNONLYFSDIRS 0x0001 // For finding a folder to start document searching
#define BIF_DONTGOBELOWDOMAIN 0x0002 // For starting the Find Computer
#define BIF_STATUSTEXT 0x0004 // Top of the dialog has 2 lines of text for BROWSEINFO.lpszTitle and one line if
// this flag is set. Passing the message BFFM_SETSTATUSTEXTA to the hwnd can set the
// rest of the text. This is not used with BIF_USENEWUI and BROWSEINFO.lpszTitle gets
// all three lines of text.
#define BIF_RETURNFSANCESTORS 0x0008
#define BIF_EDITBOX 0x0010 // Add an editbox to the dialog
#define BIF_VALIDATE 0x0020 // insist on valid result (or CANCEL)
#define BIF_NEWDIALOGSTYLE 0x0040 // Use the new dialog layout with the ability to resize
// Caller needs to call OleInitialize() before using this API
#define BIF_USENEWUI (BIF_NEWDIALOGSTYLE | BIF_EDITBOX)
#define BIF_BROWSEINCLUDEURLS 0x0080 // Allow URLs to be displayed or entered. (Requires BIF_USENEWUI)
#define BIF_UAHINT 0x0100 // Add a UA hint to the dialog, in place of the edit box. May not be combined with BIF_EDITBOX
#define BIF_NONEWFOLDERBUTTON 0x0200 // Do not add the "New Folder" button to the dialog. Only applicable with BIF_NEWDIALOGSTYLE.
#define BIF_NOTRANSLATETARGETS 0x0400 // don't traverse target as shortcut
#define BIF_BROWSEFORCOMPUTER 0x1000 // Browsing for Computers.
#define BIF_BROWSEFORPRINTER 0x2000 // Browsing for Printers
#define BIF_BROWSEINCLUDEFILES 0x4000 // Browsing for Everything
#define BIF_SHAREABLE 0x8000 // sharable resources displayed (remote shares, requires BIF_USENEWUI)
function main()
? BrowseFolder( 0, "Probando", BIF_BROWSEFORCOMPUTER )
return nil
#pragma BEGINDUMP
#include <hbapi.h>
#include <windows.h>
#include <shlobj.h>
#include <shtypes.h>
HB_FUNC( BROWSEFOLDER )
{
HWND hWnd = ( HWND ) hb_parnl( 1 );
ITEMIDLIST * ppidl;
BROWSEINFO lpbi;
char pszDisplayName[MAX_PATH];
char pszReturn[MAX_PATH];
memset( &lpbi, 0x00, sizeof( BROWSEINFO ) );
if( SHGetSpecialFolderLocation( hWnd, CSIDL_NETWORK, &ppidl ) == S_OK )
{
lpbi.hwndOwner = hWnd;
lpbi.pidlRoot = ppidl;
lpbi.pszDisplayName = pszDisplayName;
lpbi.lpszTitle = hb_parc( 2 );
lpbi.ulFlags = hb_parnl( 3 ) ;
if( SHBrowseForFolder(&lpbi) != 0 )
strcpy( pszReturn, lpbi.pszDisplayName );
else
strcpy( pszReturn, "\0" );
}
hb_retc( pszReturn );
}
#pragma ENDDUMP
Re: Shell Common Dialogs
Posted: Fri Jul 15, 2011 1:19 pm
by Antonio Linares
Cgallegoa wrote:Maestro Antonio,
No compila con xHarbour: "Error: Unresolved external 'PickIconDlg' referenced from C:\TRANSI68\PRUEBA1.OBJ
"
Qué cambio debe hacerse para xHarbour ?
Observo desde hace semanas que tus ejemplos están hechos sólo para Harbour, por lo que los que usamos sólo xHarbour quedamos out. Hay alguna razón ?
Saludos y gracias,
Carlos Gallego
Carlos,
Vamos a revisarlo. La razón de usar Harbour preferentemente es que está mucho más maduro y desarrollado que xHarbour, además de funcionar perfectamente en multiples versiones y sistemas operativos (32, 64 bits) (Windows, OSX, Linux, Android, iPhone) algo que xHarbour no soporta y que por lo que se ve no hay intención de implementar.
Nuestro mejor consejo es que los usuarios migren a Harbour y estarán muy contentos con el cambio. Según se ha comentado en varios grupos de desarrollo, parece que xHarbour pueda dejar de desarrollarse. Esto es algo que el propio Patrick Mast me comentó por email (no pretendo con esto desvelar conversaciones privadas pero creo que es justo que los usuarios de xHarbour lo sepan).
Re: Shell Common Dialogs
Posted: Fri Jul 15, 2011 3:41 pm
by cuatecatl82
Daniel:
Gracias por traducir el ejemplo, pero al compilar me da 1 Warning y 1 Error:
Code: Select all
Z:\PRUEBAS\OBJ\ntbrwdlg.hrb:
Warning W8065 Z:\\PRUEBAS\\ntbrwdlg.prg 55: CALL TO FUNCTION 'IF' WITH no prototype in FUNCTION HB_FUN_BROWSEFOLDER
Error E2379 Z:\\PRUEBAS\\Variable\\ntbrwdlg.prg 56: Statement missing ; in FUNCTION HB_FUN_BROWSEFOLDER
*** 1 errors in Compile ***
Maestro Antonio:
Gracias por la Información que pena si en un futuro ya no se siga trabajando y desarrollando este compilador, esperemos que esto no pase por lo menos muy pronto.
Re: Shell Common Dialogs
Posted: Fri Jul 15, 2011 3:54 pm
by Daniel Garcia-Gil
Hola
acabo de copiar y pegar y funciona bien
verifica que estes copiando bien el codigo...
te dejo el link de descarga
http://www.sitasoft.net/fivewin/samples/net.zip
Re: Shell Common Dialogs
Posted: Fri Jul 15, 2011 4:15 pm
by cuatecatl82
Rapida Respuesta Daniel:
Cierto, Funciona, que Flags debo poner para compilar, lo tengo asi para xHarbour: /n /m /es2 /gc1, para BCC32: /c /O2 y para ilink32 /Gn /Tpe, creo que por aqui esta el detalle.
Garcias de nuevo.