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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 11.05.2011, 22:15
ASЯ ASЯ вне форума
Прохожий
 
Регистрация: 11.05.2011
Сообщения: 3
Репутация: 10
По умолчанию Иконки с рабочего стола

Здравствуйте.
Возникла срочная необходимость написать программу, которая иммитирует рабочий стол Windows.
То есть разгоняется форма на весь экран, прибирается панель задач, создаётся кнопка "Пуск", по которой появляется панель с названиями программ, которые можно запустить...

Проблема в том, что необходимо отобразить ярлыки с рабочего стола сверху на форме, желательно в виде Image, чтоб можно было кликать.

Заранее спасибо!
Ответить с цитированием
  #2  
Старый 11.05.2011, 22:29
Аватар для 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, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #3  
Старый 12.05.2011, 22:37
ASЯ ASЯ вне форума
Прохожий
 
Регистрация: 11.05.2011
Сообщения: 3
Репутация: 10
По умолчанию

Цитата:
Можно через поиск файлов организовать.

Как?
На разных машинах не всегда совпадают пути. Или нет?


Вобщем.. Может кому ещё интересно:

получение пути к рабочему столу:
Код:
function TF_Main.GetDeskTopPath : string;
var
  shellMalloc: IMalloc;
  ppidl: PItemIdList;
  PerDir: string;
begin
  ppidl := nil;
  try
    if SHGetMalloc(shellMalloc) = NOERROR then
    begin
      SHGetSpecialFolderLocation(F_Main.Handle, CSIDL_DESKTOP, ppidl);
      SetLength(Result, MAX_PATH);
      if not SHGetPathFromIDList(ppidl, PChar(Result)) then
        raise exception.create('SHGetPathFromIDList failed : invalid pidl');
      SetLength(Result, lStrLen(PChar(Result)));
    end;
  finally
   if ppidl <> nil then
         shellMalloc.free(ppidl);
  end;
end;


Количество файлов в директории:

Код:
function TF_Main.GetFileCount(Dir: string): integer;
var
  fs: TSearchRec;
begin
  Result := 0;
  if FindFirst(Dir + '\*.lnk', faAnyFile - faDirectory - faVolumeID, fs) = 0
    then
    repeat
      inc(Result);
    until
      FindNext(fs) <> 0;
  FindClose(fs);
end;


открыть ярлык:

Код:
procedure TF_Main.GoLink(path: string);
begin
ShellExecute(0, nil, PChar(path), nil, nil, SW_SHOWNORMAL);

end;

имя файла по ярлыку:

Код:
function TF_Main.GetFileNamefromLink(LinkFileName: string): string;
var
  MyObject: IUnknown;
  MySLink: IShellLink;
  MyPFile: IPersistFile;
  FileInfo: TWin32FINDDATA;
  WidePath: array[0..MAX_PATH] of WideChar;
  Buff: array[0..MAX_PATH] of Char;
begin
  Result := '';
  if (fileexists(Linkfilename) = false) then
    exit;
  MyObject := CreateComObject(CLSID_ShellLink);
  MyPFile := MyObject as IPersistFile;
  MySLink := MyObject as IShellLink;
  StringToWideChar(LinkFileName, WidePath, SizeOf(WidePath));
  MyPFile.Load(WidePath, STGM_READ);
  MySLink.GetPath(Buff, Max_PATH, FileInfo, SLGP_UNCPRIORITY);
  Result := buff;
end;

рисовать иконку из файла:

Код:
procedure TF_Main.DRIcon(filPath : string; c : integer);
var
  IconIndex: word;
  h: hIcon;
begin
  IconIndex := 0;
  h := ExtractAssociatedIcon(hInstance,
    PChar(filPath), IconINdex);

  DrawIcon(Image1.Canvas.Handle, 40, c*50, h);
end;
Ответить с цитированием
  #4  
Старый 13.05.2011, 09:18
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Цитата:
Сообщение от ASЯ
Проблема в том, что необходимо отобразить ярлыки с рабочего стола сверху на форме, желательно в виде Image, чтоб можно было кликать.
а почему бы не использовать для такого случая компонент TListView? в конце-концов рабочий стол это из себя и представляет.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #5  
Старый 13.05.2011, 22:29
ASЯ ASЯ вне форума
Прохожий
 
Регистрация: 11.05.2011
Сообщения: 3
Репутация: 10
По умолчанию

Цитата:
а почему бы не использовать для такого случая компонент TListView? в конце-концов рабочий стол это из себя и представляет.

Ага. Я использовала TListBox, чтоб выводить названия, и Image, чтоб показывать картинки ярлыков.
А с компонентом TListView, к сожалению не особо знакома))
Но всё равно спасибо за совет)
Ответить с цитированием
  #6  
Старый 10.06.2011, 17:25
valer2011 valer2011 вне форума
Прохожий
 
Регистрация: 10.06.2011
Сообщения: 1
Репутация: 10
По умолчанию

Что-то не работает, толи руки кривые - толи сани не едут
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter