Ver Mensaje Individual
  #1  
Antiguo 12-10-2014
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Reputación: 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 08:01:29. Razón: agrego un comentario al codigo
Responder Con Cita