Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-10-2014
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
OpenDialog - Seleccionar filtro luego de llamar a Execute()

Que tal compañeros del club, resulta que tengo un OpenDialog el cual me gustaria que, al entrar a determinadas carpetas, a traves del evento OnFolderChange, cambiar el filtro seleccionado, seria como accerder a la propiedad ItemIndex del ComboBox del OpenDialog, ¿me explico?

Supongamos que entro a la carpeta ...\Facturas, entonces me interesa que automaticamente el filtro seleccionado sea el *.fc, si entro a ...\NotasDebito, sea *.nd y asi

Modificar la propiedad FilterIndex del OpenDialog no parece fucionar

Lo que yo he hecho y funciona, pero es una chanchada es algo como esto:

Código Delphi [-]
type
    FILTERS_INDEX = (fiXLS, fiFC, fiRM, fiNC, fiND);

procedure TFFacturaVenta.LoadFolderChange(Sender: TObject);
var FilterComboBoxHandle: HWND; i, NewIndex: integer;
begin
    // Load es un TOpenDialog
    with Load do
    begin
        if (FileName + PathDelim = Path_a_\Facturas) then
            NewIndex:= Integer(fiFC);
        // obtengo el Handle del ComboBox
        FilterComboBoxHandle:= FindWindowEx(FindWindow(NIL, PWChar(Load.Title)), 0, 'ComboBox', NIL);
        // subo hasta el primer filtro... si no le mando primero "abajo" no funciona
        SendMessage(FilterComboBoxHandle, WM_KEYDOWN, VK_DOWN, SizeOf(VK_DOWN));
        SendMessage(FilterComboBoxHandle, WM_KEYUP, VK_DOWN, SizeOf(VK_DOWN));
        for i:= 0 to CantidadFiltros do
        begin
            SendMessage(FilterComboBoxHandle, WM_KEYDOWN, VK_UP, SizeOf(VK_UP));
            SendMessage(FilterComboBoxHandle, WM_KEYUP, VK_UP, SizeOf(VK_UP));
        end;
        SendMessage(FilterComboBoxHandle, WM_KEYDOWN, VK_RETURN, SizeOf(VK_RETURN));
        SendMessage(FilterComboBoxHandle, WM_KEYUP, VK_RETURN, SizeOf(VK_RETURN));

        // y ahora bajo hasta el deseado
        for i:= 0 to NewIndex do
        begin
            SendMessage(FilterComboBoxHandle, WM_KEYDOWN, VK_DOWN, 1);
            SendMessage(FilterComboBoxHandle, WM_KEYUP, VK_DOWN, 1);
        end;
        SendMessage(FilterComboBoxHandle, WM_KEYDOWN, VK_RETURN, 1);
        SendMessage(FilterComboBoxHandle, WM_KEYUP, VK_RETURN, 1);
    end;
end;

Basicamente lo que hago es simular que pulso la teclas ARRIBA/ABAJO para moverme al filtro que necesito, la verdad no se me ocurre mas que podria hacer

Un saludo y gracias

Última edición por AgustinOrtu fecha: 12-10-2014 a las 09:01:29. Razón: agrego un comentario al codigo
Responder Con Cita
  #2  
Antiguo 12-10-2014
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Detalles no menores que olvide aclarar, uso Delphi 2010 y Win 7. Sería deseable que la solución funcione en Windows anteriores a 7, como XP (él código que propuse arriba no funciona en XP, seguro relacionado al tema de que los Dialog en NT funcionan distinto)

Saludos
Responder Con Cita
  #3  
Antiguo 13-10-2014
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Encontré esto en uno de mis favoritos buscando otra cosa (así es la vida). File Open/Save Common Dialog Control IDs

A ver si se le ocurre algo a alguien, que yo con la API tengo poco y nada de experiencia y todo lo que sean Handles y Messages me dan escalofríos

Última edición por ecfisa fecha: 13-10-2014 a las 01:11:31. Razón: Agregar enlace
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Como seleccionar campos de una tabla sin saber cuantos van a seleccionar david duarte SQL 7 05-04-2010 22:15:43
Execute statement Ana Tudela Firebird e Interbase 7 12-12-2006 13:27:13
Execute Immediate jjarias Firebird e Interbase 3 27-04-2006 16:14:07
for execute statement conquer Firebird e Interbase 0 16-02-2005 23:23:49
Execute procedure VRO Firebird e Interbase 4 26-01-2005 18:55:57


La franja horaria es GMT +2. Ahora son las 21:05:09.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi