Asunto: Autocompletado con Delphi de las carpetas del equipo
Estoy realizando una aplicación Delphi, en una de las ventanas pido al usuario que escriba la ruta donde se encuentra un determinado fichero, tiene la opción de pulsar un botón para que aparezca el diálogo de seleción de fichero TOpenDialog, pero quiero que si el usuario escribe la ruta vayan apareciendo en un desplegable las posibles carpetas de la ruta que esté escribiendo, igual que ocurre en Windows XP, si escribimos una ruta en "Inicio" - "Ejecutar", al escribir "C:\" en el desplegable va mostrando todas las carpetas que haya en la unidad.
¿Esto es posible en Delphi sin mucho código? ¿Hay alguna forma de utiliza el mismo método que utiliza Windows?
Publicado:
Sab Ene 09, 2010 11:14 am
alonsojpd Administrador/Moderador
Registrado: Sep 16, 2003 Mensajes: 2687
Asunto: Re: Autocompletado con Delphi de las carpetas del equipo
Anuncios
varios escribió:
Estoy realizando una aplicación Delphi, en una de las ventanas pido al usuario que escriba la ruta donde se encuentra un determinado fichero, tiene la opción de pulsar un botón para que aparezca el diálogo de seleción de fichero TOpenDialog, pero quiero que si el usuario escribe la ruta vayan apareciendo en un desplegable las posibles carpetas de la ruta que esté escribiendo, igual que ocurre en Windows XP, si escribimos una ruta en "Inicio" - "Ejecutar", al escribir "C:\" en el desplegable va mostrando todas las carpetas que haya en la unidad.
¿Esto es posible en Delphi sin mucho código? ¿Hay alguna forma de utiliza el mismo método que utiliza Windows?
Sí es posible y casi sin código puesto que se puede utilizar la función SHAutoComplete del API de Windows (probada en Windows XP y Windows 7).
Te mostramos a continuación un ejemplo de uso de dicha función que te permitirá añadir la opción de autocompletado en un TEdit para:
1. Carpetas y ficheros del equipo.
2. URLs (direcciones web del navegador) recientemente usadas.
3. Direcciones recientes (lo que se introducie en "Inicio" - "Ejecutar").
Con esta función podrás decidir cuál de los anteriores utilizar o utilizar todos a la vez o algunos de ellos.
type
TShAutoCompleteFunc = function(hwndEdit: HWND;
dwFlags: dWord): LongInt; stdcall;
var
SHAutoComplete : TShAutoCompleteFunc;
theDLL : THandle;
function opcionesAutocompletar (desactivar, ficheros, carpetas,
url, recientes, activarAutosuggest : boolean) : DWORD;
begin
Result := SHACF_NOAUTOCOMPLETE;
if desactivar then
Result := SHACF_NOAUTOCOMPLETE
else
begin
if ficheros then
Result := Result or SHACF_FILESYSTEM;
if carpetas then
Result := Result or SHACF_FILESYS_DIRS;
if url then
Result := Result or SHACF_URLHISTORY;
if recientes then
Result := Result or SHACF_URLMRU;
if activarAutosuggest then
Result := Result or SHACF_AUTOSUGGEST_FORCE_ON
else
Result := Result or SHACF_AUTOSUGGEST_FORCE_OFF;
end;
end;
function autoCompletar (componenteEdit : TEdit;
dwFlags: DWORD) : Boolean;
begin
if @ShAutoComplete <> nil then
Result := (SHAutoComplete(componenteEdit.Handle, dwFlags) = 0)
else
Result := false;
end;
procedure TformAutoCompletar.FormCreate(Sender: TObject);
begin
autoCompletar (txtTexto, SHACF_DEFAULT);
end;
procedure TformAutoCompletar.btSalirClick(Sender: TObject);
begin
close;
end;
//para que si no existe la librería
//shlwapi.dll la aplicación no dé error
initialization
theDLL := LoadLibrary('shlwapi.dll');
if theDLL <> 0 then
@ShAutoComplete := GetProcAddress(theDLL, 'SHAutoComplete');
finalization
if theDLL <> 0 then
FreeLibrary(theDLL);
end.
Publicado:
Mie Ene 20, 2010 6:22 pm
alonsojpd Administrador/Moderador
Registrado: Sep 16, 2003 Mensajes: 2687
Asunto: Re: Autocompletado con Delphi de las carpetas del equipo
Anuncios
El código anterior con la función SHAutoComplete de la librería shlwapi.dll:
Cómo es es exactamente igual que el autocompletado que utiliza Windows:
Puede publicar nuevos temas en este foro No puede responder a temas en este foro No puede editar sus mensajes en este foro No puede borrar sus mensajes en este foro No puede votar en encuestas en este foro
Visita nuestro nuevo sitio web con programas y contenidos actualizados: Proyecto A