Delphi - Objeto TOpenDialog

 
Vista:

Objeto TOpenDialog

Publicado por JUAN RODRIGUEZ SANCHEZ (47 intervenciones) el 07/09/2007 21:57:58
Hola a todos los forer@s:
Tengo un objeto TOpenDialog, de estos que combinados con un boton te abren una ventana de estas tipicas de Windows para examinar y buscar archivos. MI pregunta es (siempre y cuando se pueda) hacer que al examinar se pueda aceptar una ventana de un directorio sin tener que elegir un objeto obligatoriamente.Pretendo guardar una base de datos, en una carpeta que no contiene ningun objeto) y no me deja aceptar la ruta a no ser que escoja un archivo o elemento. No se si se puede hacer, aunque estoy casi seguro de que se puede. Por favor, echadme un cable. Se que lo sabeis. Mil gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Objeto TOpenDialog

Publicado por M@rceloL (42 intervenciones) el 07/09/2007 23:37:58
Hmm... No sé si se podrá hacer con un TOpenDialog común y corriente.

Igualmente lo mejor es usar el diálogo correspondiente para seleccionar una carpeta.

Yo siempre uso el que viene con la JVCL, pero si no querés instalarla, he aquí un código que quizás te sirva.

http://www.scalabium.com/faq/dct0157.htm

Saludetes.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Objeto TOpenDialog

Publicado por Diego Romero (25 intervenciones) el 08/09/2007 04:23:15
Hace tiempo que encontré un pack de componentes gratuitos que entre ellos tenía el wrapper para abrir el cuadro de diálogos para seleccionar directorios (en realidad cualquier objeto que no fuera un archivo, como carpetas, computadoras en la red, impresoras, etc...) pero lamentablemente la página "oficial" del pack ha desaparecido, el pack se llama DFS (por Delphi Free Stuff), quizá lo encuentres en Torry.net aún, el componente en cuestión es el TdfsBrowseDirectoryDlg.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Objeto TOpenDialog

Publicado por BigLuis (713 intervenciones) el 08/09/2007 11:53:56
Ahi van unos ejemplos de eleccion de ficheros, carpetas etc. estudialos y mira a ver si te sirve alguno
Tienes que declarar este tipo

type
TServerBrowseDialogA0 = function(hwnd: HWND; pchBuffer: Pointer; cchBufSize:

DWORD): bool;
stdcall;

implementation
.........

//Y con esta funcion aparecen los equipos en red

function ShowServerDialog(AHandle: THandle): string;
var
ServerBrowseDialogA0: TServerBrowseDialogA0;
LANMAN_DLL: DWORD;
buffer: array[0..1024] of char;
bLoadLib: Boolean;
begin
LANMAN_DLL := GetModuleHandle('NTLANMAN.DLL');
if LANMAN_DLL = 0 then
begin
LANMAN_DLL := LoadLibrary('NTLANMAN.DLL');
bLoadLib := True;
end;
if LANMAN_DLL <> 0 then
begin @ServerBrowseDialogA0 := GetProcAddress(LANMAN_DLL,

'ServerBrowseDialogA0');
DialogBox(HInstance, MAKEINTRESOURCE(101), AHandle, nil);
ServerBrowseDialogA0(AHandle, @buffer, 1024);
if buffer[0] = '\' then
begin
Result := buffer;
end;
if bLoadLib then
FreeLibrary(LANMAN_DLL);
end;
end;

//*****************************************************************************
//Para carpetas, ficheros etc.

function BrowseDialog(const Title: string; const Flag: integer): string;
var
lpItemID : PItemIDList;
BrowseInfo : TBrowseInfo;
DisplayName : array[0..MAX_PATH] of char;
TempPath : array[0..MAX_PATH] of char;
begin
Result:='';
FillChar(BrowseInfo, sizeof(TBrowseInfo), #0);
with BrowseInfo do begin
hwndOwner := Application.Handle;
pszDisplayName := @DisplayName;
lpszTitle := PChar(Title);
ulFlags := Flag;
end;
lpItemID := SHBrowseForFolder(BrowseInfo);
if lpItemId <> nil then begin
SHGetPathFromIDList(lpItemID, TempPath);
Result := TempPath;
GlobalFreePtr(lpItemID);
end;
end;

procedure TForm1.SpeedButton33Click(Sender: TObject);
var sTitle, sFolder: string;
iFlag : integer;
begin
sTitle:='Seleccionar un ' +
RadioGroup1.Items[RadioGroup1.ItemIndex];
case RadioGroup1.ItemIndex of
0: iFlag := BIF_RETURNONLYFSDIRS;
1: iFlag := BIF_BROWSEINCLUDEFILES;
2: iFlag := BIF_BROWSEFORCOMPUTER;
3: iFlag := BIF_BROWSEFORPRINTER;
end;
sFolder := BrowseDialog(sTitle, iFlag);
if sFolder <> '' then
edit49.text := sFolder
else
edit49.text := 'No seleccionao nada';

end;

Suerte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar