Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 3 269

/ вопрос открыт /

Приветствую, уважаемые эксперты!
Необходимо показать системное окно Свойства файла, но не для одного, а для нескольких. В инете полно инфы как это сделать для одного файла (например, http://vrssoft2004.narod.ru/htm/sovet_proritets_file.htm). Как это можно сделать для нескольких?
Заранее спасибо.

VIRUS Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: VIRUS (статус: Посетитель)
Вопрос отправлен: 11 октября 2009, 03:09
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Игорь Данилевич

Здравствуйте, VIRUS!

Ответ на Ваш вопрос можно найти опять же в инете:
http://www.forum.vingrad.ru/findpost-1781959.html

Используется ф-я SHMultiFileProperties.

Приложение:
  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6. Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  7. Dialogs, ShellAPI, ShlObj, ActiveX, StdCtrls;
  8.  
  9. type
  10. TForm1 = class(TForm)
  11. Button1: TButton;
  12. procedure Button1Click(Sender: TObject);
  13. private
  14. { Private declarations }
  15. public
  16. { Public declarations }
  17. end;
  18.  
  19. var
  20. Form1: TForm1;
  21.  
  22. function SHMultiFileProperties(pdtObj: IDataObject;
  23. dwFlags: DWORD): HRESULT; stdcall; external 'shell32.dll';
  24.  
  25. implementation
  26.  
  27. {$R *.dfm}
  28.  
  29. function ShowPropertiesDialog(const AFolder: String; Files: TStrings): HRESULT;
  30. const
  31. IID_IDataObject: TGUID = (
  32. D1: $0000010E; D2: $0000; D3: $0000; D4: ($C0, $00, $00, $00,
  33. $00, $00, $00, $46));
  34. var
  35. Data: IDataObject;
  36. FolderID, FileID: PItemIDList;
  37. Desktop: IShellFolder;
  38. Folder: IShellFolder2;
  39. PFolder, PFileName: PWideChar;
  40. Malloc: IMalloc;
  41. I: Integer;
  42. ItemList: array of PItemIDList;
  43. begin
  44. Result := E_INVALIDARG;
  45. if not Assigned(Files) then
  46. Exit;
  47. if Succeeded(SHGetMalloc(Malloc)) then
  48. try
  49. if Succeeded(SHGetDesktopFolder(Desktop)) then
  50. try
  51. PFolder := StringToOleStr(AFolder);
  52. if Succeeded(Desktop.ParseDisplayName(0, nil, PFolder, PULONG(nil)^,
  53. FolderID, PULONG(nil)^)) then
  54. try
  55. if Succeeded(Desktop.BindToObject(FolderID, nil, IID_IShellFolder2,
  56. Folder)) then
  57. try
  58. SetLength(ItemList, Files.Count);
  59. for I := 0 to Files.Count - 1 do
  60. begin
  61. PFileName := StringToOleStr(Files[I]);
  62. if Succeeded(Folder.ParseDisplayName(0, nil, PFileName,
  63. PULONG(nil)^, FileID, PULONG(nil)^)) then
  64. ItemList[I] := FileID;
  65. end;
  66. if Succeeded(Folder.GetUIObjectOf(0, Files.Count, ItemList[0],
  67. IID_IDataObject, nil, Data)) then
  68. try
  69. Result := SHMultiFileProperties(Data, 0);
  70. finally
  71. Data := nil;
  72. end;
  73. finally
  74. for I := 0 to High(ItemList) do
  75. if Assigned(ItemList[I]) then
  76. Malloc.Free(ItemList[I]);
  77. Folder := nil;
  78. end;
  79. finally
  80. Malloc.Free(FolderID);
  81. end;
  82. finally
  83. Desktop := nil;
  84. end;
  85. finally
  86. Malloc := nil;
  87. end;
  88. end;
  89.  
  90. procedure TForm1.Button1Click(Sender: TObject);
  91. var
  92. List: TStringList;
  93. begin
  94. List := TStringList.Create;
  95. with List do
  96. try
  97. Sorted := True;
  98. Duplicates := dupIgnore;
  99.  
  100. Append('explorer.exe');
  101. Append('win.ini');
  102. Append('regedit.exe');
  103. if Succeeded(ShowPropertiesDialog('C:WINDOWS', List)) then
  104. MessageBox(Handle, 'Success!', 'Information', MB_ICONINFORMATION);
  105. finally
  106. Free;
  107. end;
  108. end;
  109.  
  110. end.


Ответ отправил: Игорь Данилевич (статус: 3-ий класс)
Время отправки: 11 октября 2009, 21:47
Оценка за ответ: 5

Комментарий к оценке: Спасибо.
А если файлы лежат в разных папках?

Мини-форум вопроса

Всего сообщений: 1; последнее сообщение — 12 октября 2009, 17:36; участников в обсуждении: 1.
VIRUS

VIRUS (статус: Посетитель), 12 октября 2009, 17:36 [#1]:

А если файлы лежат в разных папках?

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 16:46
Выполнено за 0.02 сек.