Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Файловая система
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 24.07.2008, 15:38
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию Свойства файла

Всем огромный привет!!!
Подскажите пожалуйста как вызвать системное окно свойств файла, зная только его имя и путь.
Заранее благодарен
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #2  
Старый 24.07.2008, 17:04
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,029
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Код:
procedure TMainForm.acImageFileProperiesExecute(Sender: TObject);
var
  AFileName : String;
begin
  AFileName := PPicList.GetFileName;
  If Not FileExists(AFileName)
    Then MessageDlg(Format(Language1.TranslateUserMessage('FileNotFound'),[AFileName]),mtError,[mbOK],0)
    Else ExecuteContextMenu(AFileName,'Properties');
end;

и юнит:
Код:
unit ShellContextMenu;

interface

uses Windows, SysUtils, Forms, ShlObj, ActiveX;

function  ExecuteContextMenu (const FileName, Cmd: string): Boolean;

implementation

function  ExecuteContextMenu (const FileName, Cmd: string): Boolean;
  var
    ShellFolder             : IShellFolder;
    FileObject              : IShellFolder;
    Menu                    : IContextMenu;
    lpItemIdList, lpNameList: PItemIDList;
    WideStr                 : WideString;
    Malloc                  : IMalloc;
    Attributes, uLength     : ULONG;
    Command                 : TCMInvokeCommandInfo;
    hr: HRESULT;
begin
  Result := FALSE;

  if  FileExists (FileName)           then
  begin
    Menu := nil;
    Malloc := nil;
    FileObject := nil;
    ShellFolder := nil;

    try
      hr := SHGetMalloc (Malloc);

      if  SUCCEEDED (hr)              then
      begin
        hr := SHGetDesktopFolder (ShellFolder);

        if  SUCCEEDED (hr)            then
        begin
          WideStr := ExtractFilePath (FileName);
          hr := ShellFolder.ParseDisplayName (0, nil,
                              PWideChar (WideStr), uLength,
                              lpItemIdList, Attributes);

          if  SUCCEEDED (hr)          then
          begin
            hr := ShellFolder.BindToObject (lpItemIdList, nil,
                          IID_IShellFolder, Pointer (FileObject));

            if  SUCCEEDED (hr)        then
            begin
              WideStr := ExtractFileName (FileName);
              hr := FileObject.ParseDisplayName (0, nil,
                  PWideChar (WideStr), uLength, lpNameList, Attributes);

              if  SUCCEEDED (hr)      then
              begin
                hr := FileObject.GetUIObjectOf (0, 1, lpNameList,
                              IID_IContextMenu, nil, Pointer (Menu));

                if  SUCCEEDED (hr)    then
                begin
                  FillChar (Command, sizeof (Command), 0);
                  Command.cbSize := sizeof (Command);
                  Command.hwnd   := Application.Handle;
                  Command.lpVerb := PChar (Cmd);
                  Command.nShow  := SW_SHOW;
                  Result := SUCCEEDED (Menu.InvokeCommand (Command));
                end;
              end;
            end;
          end;
        end;
      end;
    finally
      Menu := nil;
      FileObject := nil;

      if  Malloc <> nil   then        Malloc.Free (lpItemIdList);
      Malloc := nil;
      ShellFolder := nil;
    end;
  end;
end;

end.
Ответить с цитированием
  #3  
Старый 24.07.2008, 17:41
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Большое спасибо, немного переделал для отображения свойств папки

И еще один вопрос, для того чтобы вызвать свойства группы файлов, файлы необходимо вписать в одну стрчку чередуя их #0#0 или каким-то другим делителем? #0#0 у меня не сработал.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию

Последний раз редактировалось M.A.D.M.A.N., 24.07.2008 в 18:15.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 15:23.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter