Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.09.16;
Скачать: CL | DM;

Вниз

Как при открытии TOpenDialog задать формат отображения файлов?   Найти похожие ветки 

 
Tack ©   (2007-07-05 15:40) [0]

Т.е. нужно при показе диалога открытия файла сразу переключать его в вид "Эскизы страниц" или "Список" или "Таблица". Есть возможность это сделать в программном коде?


 
clickmaker ©   (2007-07-06 17:18) [1]

procedure TForm1.OpenDialog1FolderChange(Sender: TObject);
var
 Wnd: HWND;
 AStyle: DWORD;
begin
 Wnd := GetParent(OpenDialog1.Handle);
 Wnd := FindWindowEx(Wnd, 0, "SHELLDLL_DefView", nil);
 if Wnd <> 0 then begin
   Wnd := FindWindowEx(Wnd, 0, "SysListView32", nil);
   AStyle := GetWindowLong(Wnd, GWL_STYLE);
   if (AStyle and LVS_REPORT) = 0 then
     AStyle := AStyle or LVS_REPORT;
   SetWindowLong(Wnd, GWL_STYLE, AStyle);
   // force items recreation, didn"t find more beautiful way...
   PostMessage(Wnd, WM_CONTEXTMENU, 0, 0);
   PostMessage(Wnd, WM_KEYDOWN, VK_ESCAPE, 0);
 end;
end;


начиная с ХР можно использовать LVM_SETVIEW


 
Tack ©   (2007-07-07 12:01) [2]

Никогда бы такое не пришло в голову, и в MSDN про это ни строчки.
Спасибо огромное!


 
Rouse_ ©   (2007-07-10 11:40) [3]

Я немного по другому делал (через перегрытие DLGPROC), но как вариант:

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type
 TForm1 = class(TForm)
   Button1: TButton;
   Button2: TButton;
   Button3: TButton;
   Button4: TButton;
   Button5: TButton;
   OpenDialog1: TOpenDialog;
   procedure Button1Click(Sender: TObject);
   procedure OpenDialog1Show(Sender: TObject);
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

var
 DLGStyle: Integer;

const
   ODM_VIEW_ICONS  = $7029;
   ODM_VIEW_LIST   = $702b;
   ODM_VIEW_DETAIL = $702c;
   ODM_VIEW_THUMBS = $702d;
   ODM_VIEW_TILES  = $702e;

 DlgStyles: array [0..4] of Integer =
   (ODM_VIEW_ICONS,
   ODM_VIEW_LIST,
   ODM_VIEW_DETAIL,
   ODM_VIEW_THUMBS,
   ODM_VIEW_TILES);

function NewOpenDlgProc(Wnd: HWND; uMsg: DWORD;
 WParam, LParam:integer): Integer; stdcall;
var
 ShellHandle: THandle;
begin
 if uMsg = WM_SHOWWINDOW then
 begin
   ShellHandle := FindWindowEx(Wnd, 0, "SHELLDLL_DefView", nil);
   SendMessage(ShellHandle, WM_COMMAND, DLGStyle, 0);
 end;
 Result := CallWindowProc(Pointer(GetWindowLong(Wnd, GWL_USERDATA)), Wnd, uMsg, WParam, LParam);
end;

procedure TForm1.OpenDialog1Show(Sender: TObject);
begin
SetWindowLong(GetParent(OpenDialog1.Handle), GWL_USERDATA,
  SetWindowLong(GetParent(OpenDialog1.Handle), DWL_DLGPROC, DWORD(@NewOpenDlgProc)));
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 DLGStyle := DLGStyles[TComponent(Sender).Tag];
 OpenDialog1.Execute;
end;

end.



Страницы: 1 вся ветка

Текущий архив: 2007.09.16;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.032 c
2-1188151129
hprx
2007-08-26 21:58
2007.09.16
ListBox


15-1187089130
просто так
2007-08-14 14:58
2007.09.16
как запретить несанкционированное скачивание?


15-1185471908
Константинов
2007-07-26 21:45
2007.09.16
Delphi забоставал


2-1188068008
Bad_B
2007-08-25 22:53
2007.09.16
Что я делаю не так?


2-1187598275
DevilDevil
2007-08-20 12:24
2007.09.16
Необоснованно приходит DoubleClick. У кого-либо возникало?