Shell Common Dialogs

User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Shell Common Dialogs

Post 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
Image
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Shell Common Dialogs

Post 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
Image
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
cuatecatl82
Posts: 614
Joined: Wed Mar 14, 2007 6:49 pm
Location: San Cristobal de las Casas, Chiapas México
Contact:

Re: Shell Common Dialogs

Post by cuatecatl82 »

Hola Maestro Antonio:

Yo hize lo mismo que la funcion PickIconDlg(), algo parecido, pero muy muy rudimentario.

Image

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..
Soluciones y Diseño de Software
Damos Soluciones...

I.S.C. Victor Daniel Cuatecatl Leon
Director y Diseñador de Proyectos

http://www.soldisoft.unlugar.com
http://www.sisa.unlugar.com
danyleon82@hotmail.com
www.facebook.com/victordaniel.cuatecatlleon
User avatar
cuatecatl82
Posts: 614
Joined: Wed Mar 14, 2007 6:49 pm
Location: San Cristobal de las Casas, Chiapas México
Contact:

Re: Shell Common Dialogs

Post 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.
Soluciones y Diseño de Software
Damos Soluciones...

I.S.C. Victor Daniel Cuatecatl Leon
Director y Diseñador de Proyectos

http://www.soldisoft.unlugar.com
http://www.sisa.unlugar.com
danyleon82@hotmail.com
www.facebook.com/victordaniel.cuatecatlleon
Cgallegoa
Posts: 335
Joined: Sun Oct 16, 2005 3:32 am
Location: Quito - Ecuador
Contact:

Re: Shell Common Dialogs

Post 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
Saludos,

Carlos Gallego

*** FWH-20.07, xHarbour 1.2.3 Build 20190603, Borland C++7.30, PellesC ***
User avatar
cuatecatl82
Posts: 614
Joined: Wed Mar 14, 2007 6:49 pm
Location: San Cristobal de las Casas, Chiapas México
Contact:

Re: Shell Common Dialogs

Post by cuatecatl82 »

Perdón por la Inistencia :oops: :cry: :oops: :oops:

Pero alguien le funciona bien la función WNetBrowseDialog(), si fuera posible me explicaran como poder usarla, o explicar porque me retorna "Nil", usando el ejemplo "SAMPLES\\TestNet.prg "

Gracias de antemano.. :mrgreen: :cry: :lol:
Soluciones y Diseño de Software
Damos Soluciones...

I.S.C. Victor Daniel Cuatecatl Leon
Director y Diseñador de Proyectos

http://www.soldisoft.unlugar.com
http://www.sisa.unlugar.com
danyleon82@hotmail.com
www.facebook.com/victordaniel.cuatecatlleon
xmanuel
Posts: 613
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla
Contact:

Re: Shell Common Dialogs

Post 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")

:D :D :D :D
______________________________________________________________________________
Sevilla - Andalucía
User avatar
cuatecatl82
Posts: 614
Joined: Wed Mar 14, 2007 6:49 pm
Location: San Cristobal de las Casas, Chiapas México
Contact:

Re: Shell Common Dialogs

Post by cuatecatl82 »

Manuel:

Gracias pero ya lo habia probado, y tampoco funciona.. :cry:

Maestro Antonio o Daniel, una ayudita por favor.. :roll: :roll: :cry:

Gracias.. :mrgreen: :mrgreen:
Soluciones y Diseño de Software
Damos Soluciones...

I.S.C. Victor Daniel Cuatecatl Leon
Director y Diseñador de Proyectos

http://www.soldisoft.unlugar.com
http://www.sisa.unlugar.com
danyleon82@hotmail.com
www.facebook.com/victordaniel.cuatecatlleon
User avatar
Daniel Garcia-Gil
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita
Contact:

Re: Shell Common Dialogs

Post by Daniel Garcia-Gil »

Victor

al parecer es una funcion que se usaba en 16bit, no sabria decir la equivalemte a 32bit
our best documentation is the source code
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
User avatar
cuatecatl82
Posts: 614
Joined: Wed Mar 14, 2007 6:49 pm
Location: San Cristobal de las Casas, Chiapas México
Contact:

Re: Shell Common Dialogs

Post 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:

Image

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.. :P :P :wink:
Soluciones y Diseño de Software
Damos Soluciones...

I.S.C. Victor Daniel Cuatecatl Leon
Director y Diseñador de Proyectos

http://www.soldisoft.unlugar.com
http://www.sisa.unlugar.com
danyleon82@hotmail.com
www.facebook.com/victordaniel.cuatecatlleon
User avatar
Daniel Garcia-Gil
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita
Contact:

Re: Shell Common Dialogs

Post 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
 
our best documentation is the source code
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Shell Common Dialogs

Post 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).
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
cuatecatl82
Posts: 614
Joined: Wed Mar 14, 2007 6:49 pm
Location: San Cristobal de las Casas, Chiapas México
Contact:

Re: Shell Common Dialogs

Post by cuatecatl82 »

Daniel:

Gracias por traducir el ejemplo, pero al compilar me da 1 Warning y 1 Error: :oops: :oops:

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. :| :|
Soluciones y Diseño de Software
Damos Soluciones...

I.S.C. Victor Daniel Cuatecatl Leon
Director y Diseñador de Proyectos

http://www.soldisoft.unlugar.com
http://www.sisa.unlugar.com
danyleon82@hotmail.com
www.facebook.com/victordaniel.cuatecatlleon
User avatar
Daniel Garcia-Gil
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita
Contact:

Re: Shell Common Dialogs

Post 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
our best documentation is the source code
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
User avatar
cuatecatl82
Posts: 614
Joined: Wed Mar 14, 2007 6:49 pm
Location: San Cristobal de las Casas, Chiapas México
Contact:

Re: Shell Common Dialogs

Post 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. :P :P
Soluciones y Diseño de Software
Damos Soluciones...

I.S.C. Victor Daniel Cuatecatl Leon
Director y Diseñador de Proyectos

http://www.soldisoft.unlugar.com
http://www.sisa.unlugar.com
danyleon82@hotmail.com
www.facebook.com/victordaniel.cuatecatlleon
Post Reply