Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Создать папку в меню кнопки ПУСК

Delphi , Рабочий стол , ПУСК

Создать папку в меню кнопки ПУСК

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

Uses
   ShlObj, ActiveX;

 procedure FreePidl(pidl: PItemIDList);
 var
   allocator: IMalloc;
 begin
   if Succeeded(SHGetMalloc(allocator)) then
   begin
     allocator.Free(pidl);
     {$IFDEF VER100}
     allocator.Release;
     {$ENDIF}
   end;
 end;

 function CreateFolder(aFolderName: string; aLocation: Integer): Boolean;
 var
   pIdl: PItemIDList;
   hPath: PChar;
 begin
   Result := False;
   if SUCCEEDED(SHGetSpecialFolderLocation(0, aLocation, pidl)) then
   begin
     hPath := StrAlloc(MAX_PATH);
     SHGetPathFromIDList(pIdl, hPath);
     SetLastError(0);
     CreateDirectory(PChar(hPath + '\\' + aFolderName), nil);
     if (GetLastError = 0) or (GetLastError = ERROR_ALREADY_EXISTS) then
       Result := True;
     FreePIDL(pIdl);
     StrDispose(hPath);
   end;
 end;


 procedure TForm1.Button1Click(Sender: TObject);
 begin
   CreateFolder('MyProgramgroup', CSIDL_PROGRAMS);
 end;

Here's a translation of the content into Russian:

Это код на языке Delphi, который создает новый папку в директории "Программы" (CSIDL_PROGRAMS), когда кнопка нажата.

Расшифровка того, что код делает:

  1. Процедура FreePidl используется для освобождения памяти, выделенной для структуры ItemIDList. Это необходимо потому, что SHGetMalloc выделяет память, которая должна быть освобождена.
  2. Функция CreateFolder создает новую папку с указанным именем в указанной локации (в этом случае, CSIDL_PROGRAMS). Она возвращает булевое значение, указывающее, была ли создана папка успешно.
  3. В обработчике события Button1Click, функция CreateFolder вызывается для создания новой папки с именем "MyProgramgroup" в директории "Программы".

Некоторые предложения по улучшению:

  • вместо использования SHGetMalloc и освобождения памяти вручную, можно использовать метод IMalloc.Free.
  • можно добавить обработку ошибок для случаев, когда создание папки не удается. Например, можно отобразить сообщение об ошибке, если CreateDirectory возвращает ненулевое значение.
  • также можно рассмотреть использование SHCreateDirectoryEx вместо CreateDirectory, так как она предоставляет больше функций и гибкости.

Здесь приведен модифицированный код:

procedure TForm1.Button1Click(Sender: TObject);
begin
  if CreateFolder('MyProgramgroup', 32) then
    ShowMessage('Папка создана успешно!')
  else
    ShowMessage('Не удалось создать папку!');
end;

function CreateFolder(aFolderName: string; aLocation: Integer): Boolean;
var
  pIdl: PItemIDList;
  hPath: PChar;
begin
  Result := False;
  if SHGetSpecialFolderLocation(0, aLocation, pIdl) = S_OK then
  begin
    hPath := StrAlloc(MAX_PATH);
    SHGetPathFromIDList(pIdl, hPath);
    SetLastError(0);
    if CreateDirectory(PChar(hPath + '\') + aFolderName, nil) = S_OK then
      Result := True;
    IMalloc.Free(pIdl);
    StrDispose(hPath);
  end;
end;

Замечание: я заменил CSIDL_PROGRAMS на константное значение 32, которое является правильным значением для директории "Программы". Возможно, вам нужно изменить это в зависимости от вашей версии Delphi и целевой платформы.

В статье описывается создание папки в меню кнопки ПУСК с помощью языка программирования Delphi, используя функции из библиотеки ShlObj и ActiveX.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: ПУСК ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-10-24 20:03:55/0.0036740303039551/0