Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Ordenar OpenDialog (https://www.clubdelphi.com/foros/showthread.php?t=64994)

movorack 13-11-2009 16:59:27

Ordenar OpenDialog
 
Hola club...

Estuve buscando en google y aqui en el club y no encuentro una forma de ordenar el listado de un TOpenDialog...

En mi programa tengo un cuadro dialogo donde selecciono de una carpeta una imagen para subir desde el equipo a la base de datos y generar carnets... el problema es que esta carpeta se llena todo el tiempo y quisiera ordenar (por fecha de creación DESC) el listado que aparece en el cuadro de dialogo.

Lo que quisiera en si es que las primeras fotos del listado sean las ultimas que he tomado.

Cualquier ayuda prestada de verdad que seria muy bien recibida.

Neftali [Germán.Estévez] 13-11-2009 18:53:43

Yo lo más que he conseguido es abrirlo cambiando el sestilo a modi report, para luego sólo tener que pulsar sobre la columna (tenía el mismo problema que tú). Lo conseguí con este procedimiento, pero sigue faltándome lo de ordenar.

Código Delphi [-]
{: Modificar el sistema de apertura de los diálogos.}
procedure OpenDialogStyle(ASender:TCommonDialog; AStyle:TViewStyle=vsReport);
var
  Dlg: HWND;
begin
  // Ventana
  Dlg := GetParent((ASender as TCommonDialog).Handle);
  // Enviar un mensaje a la ventana principal
  PostMessage(Application.MainForm.Handle, WM_DIALOG_STYLE, Dlg, Ord(AStyle));
end;

Utilizando los eventos del diálogo, al abrirlo lo llamo así:

Código Delphi [-]
procedure TFormBrBase.SaveDialogShow(Sender: TObject);
begin
  // Abrir la vista de detalles.
  OpenDialogStyle(Sender as TCommonDialog);
end;

roman 13-11-2009 20:20:05

Germán, ¿dónde está declarada la constante WM_DIALOG_STYLE? No la encuentro en ninguna parte. ¡Ni en Google! :eek:

// Saludos

movorack 13-11-2009 21:11:52

:( La vista de reporte no me srive de mucho pq en algunos casos se toman varias fotos, en este caso me ha servido mucho la vista de miniaturas... aqui mismo en el club encontré un codigo que me ayudo a desplegar la vista de miniaturas :

Código Delphi [-]
procedure TFrmPhotoCapture.OpenDialogFolderChange(Sender: TObject);
const
  FCIDM_SHVIEW_LARGEICON = $7029;
  FCIDM_SHVIEW_SMALLICON = $702A;
  FCIDM_SHVIEW_LIST = $702B;
  FCIDM_SHVIEW_REPORT = $702C;
  FCIDM_SHVIEW_THUMBNAIL = $702D;
  FCIDM_SHVIEW_TILE = $702E;
var
  newStyle: dWord;
begin
  newStyle := FCIDM_SHVIEW_THUMBNAIL;
  SendMessage(FindWindowEx(GetParent(OpenDialog.Handle), 0, 'SHELLDLL_DefView', nil), WM_COMMAND, newStyle, 0);
end;

Pero me aparecen en orden de creación ASC y yo lo quiero al contrario...

Neftali [Germán.Estévez] 16-11-2009 13:14:09

Cita:

Empezado por roman (Mensaje 346572)
Germán, ¿dónde está declarada la constante WM_DIALOG_STYLE? No la encuentro en ninguna parte. ¡Ni en Google!

¡Perdón! Se me olvidó colocarla. :o

Código Delphi [-]
  // Mensaje para ventanas de dialogo
  WM_DIALOG_STYLE = WM_USER + 510;

roman 16-11-2009 23:52:49

Hola Germán,

No sé si estoy lento de entendimiento o es que falta algo. Al principio pensé que WM_DIALOG_STYLE era una constante predefinida pero ahora veo que tú mismo la defines, por lo que supongo que tienes un manejador para ese mensaje y que es ahí donde cambias el estilo, pero lo más que he podido hacer de esa manera es encontrar el ListView contenido dentro del diálogo y cambiarle el estilo a LVS_REPORT. Pero así sólo "desaparecen" los ítems.

¿Podrías poner cómo lo haces?

// Saludos

Neftali [Germán.Estévez] 17-11-2009 10:23:48

1 Archivos Adjunto(s)
Efectívamente con las prisas me descuidé la "mitad" de las cosas por el camino...:o
No eres tú el que está lento de entendimiento, Román, soy yo...

Efectívamente falta el "manejador" que capture ese mensaje y que haga lo que tiene que hacer. En mi caso está en el form principal para "centralizar" ese comportamiento.

Os pongo el ejemplo completo donde está todo lo necesario. Lo "sencillo" es que a partir de ahora cualquier diálogo al que se llame basta con programarle en el OnShow la llamada a:

Código Delphi [-]
  // Abrir la vista de detalles.
  OpenDialogStyle(Sender as TCommonDialog, aStyle);

Siendo sStyle, uno de los estilos definidos por:

Código Delphi [-]
  // Definido en ComCtrls
  TViewStyle = (vsIcon, vsSmallIcon, vsList, vsReport);

Un saludo y perdonad por el despiste.

roman 17-11-2009 17:00:31

Gracias por la respuesta Germán, pruebo al rato. Por lo que veo, mi error estaba en que intentaba lidiar, no con la ventana SHELLDLL_DefView, si no con la hija SysListView32.

// Saludos

xio 26-11-2009 11:48:30

Ummmm! Necesito abrir un cuadro de dialogo y que me lo muestre con la vista de windows en miniaturas, pero no tengo forma de hacerlo. He estado viendo este post y he visto que hay forma de hacerlo pero no lo consigo.

Podriais echarme una mano??

Código Delphi [-]
  if OpenDialog.Execute then begin
    OpenDialog.InitialDir := ExtractFilePath(OpenDialog.FileName);
  end;

Asi es como abro yo el dialogo, podria adaptar esa forma que exponeis??

Neftali [Germán.Estévez] 26-11-2009 17:00:42

Cita:

Empezado por xio (Mensaje 347488)
Asi es como abro yo el dialogo, podria adaptar esa forma que exponeis??

¿Has mirado el ejemplo que hay un poco más arriba?

xio 26-11-2009 17:03:50

Si, pero no se como integrarlo en mi codigo, soy un pelin torpe para estas cosas.....
He estado haciendo pruebas pero no se como integrarlo, lo siento

Neftali [Germán.Estévez] 26-11-2009 17:32:51

Lo que tú estás haciendo es lo que en el ejemplo está como:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  OpenDialog1.Execute;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  OpenDialog2.Execute;
end;

El resto sólo tienes que copiarlo como está ahí.

xio 26-11-2009 18:39:04

Pues perdona mi torpeza pero no me funciona. Podrias pasarme un ejemplo en codigo??

Neftali [Germán.Estévez] 26-11-2009 18:48:00

1 Archivos Adjunto(s)
:confused::confused::confused::confused::confused::confused:

Sí, aquí lo tienes.

xio 26-11-2009 18:58:17

Descargo el fichero y tiene un archivo que no tiene extension, con que programa debo abrirlo??

Neftali [Germán.Estévez] 26-11-2009 22:18:51

ok. es un problema conocido en los foros con algunos ficheros ZIP.

Te subo un RAR con el nombre: "Cuadros de diálogo.rar.txt"
Quítale la extensión TXT y descomprímelo.

xio 27-11-2009 09:27:01

Ok, cuando lo subas me avisas. O dime donde lo has subido.

Un saludo y muchas gracias....

Neftali [Germán.Estévez] 27-11-2009 12:16:31

2 Archivos Adjunto(s)
Cita:

Empezado por xio (Mensaje 347568)
Ok, cuando lo subas me avisas. O dime donde lo has subido.

Perdón. No doy "pié con bola" y me lo he dejado sin subir.

Los he vuelto a subir (un ZIP y un RAR); Quítales la última extensión y prueba.
También lo tienes aquí, subidos a i web (1, 2)

xio 30-11-2009 16:56:49

Muchisimas gracias!!!!!


La franja horaria es GMT +2. Ahora son las 06:52:21.

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