Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ярлыки в TPopupMenu, Ярлыки в TPopupMenu 
:(
    Опции темы
Budy
Дата 14.7.2004, 06:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 616
Регистрация: 6.2.2004
Где: Екатеринбург

Репутация: 1
Всего: 2



:Приветствую
Вот у меня есть папка с ярлыками. Как можно все их програм но разместить в моей TPopupMenu, чтоб еще и с картинками самих ярлычков?


--------------------
Как ты назовешь свой корабль, так на нем и напишут
user posted image
PM MAIL WWW ICQ   Вверх
<Spawn>
Дата 14.7.2004, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



Смотри инфу по функциям ExtractIcon, ExtractIconEx, ExtractAssociatiedIcon


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
AriX
Дата 14.7.2004, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 311
Регистрация: 16.6.2003

Репутация: 5
Всего: 19



Budy
примерно так - кидаешь на форму Button, PopupMenu и ImageList
PopupMenu1.Images := ImageList1
Button1.PopupMenu := PopupMenu1

добавь в Uses модули FileCtrl, ShellAPI, CommCtrl

и на OnClick кнопки пиши :::

Код
procedure TForm1.Button1Click(Sender: TObject);
var
 ListFiles: TStringList;
 Path: string;
 SearchRec: TSearchRec;
 i: integer;
 NewItem: TMenuItem;
 ico: TIcon;
 fi: SHFILEINFO;
begin
 Path := ExtractFileDir(Application.ExeName);
 ListFiles := TStringList.Create;
 ListFiles.Sorted := true;

 if SelectDirectory('', '', Path) then
 begin
   if FindFirst(Path + '\*.lnk', faAnyFile, SearchRec) = 0 then
   begin
     repeat
       if (SearchRec.Attr and faDirectory) = 0 then
         ListFiles.Add(SearchRec.Name);
     until FindNext(SearchRec) <> 0;
     FindClose(SearchRec);
   end;
 end;

 Memo1.Clear;
 Memo1.Lines := ListFiles;

 ico := TIcon.Create;
 for i := 0 to ListFiles.Count - 1 do
 begin
   SHGetFileInfo(PChar(ListFiles.Strings[i]), 0, fi, 0, SHGFI_ICON or SHGFI_SMALLICON);
   ico.Handle := fi.hIcon;
   ImageList_AddIcon(ImageList1.Handle, ico.Handle);
 end;
 ico.Free;

 PopupMenu1.Images := ImageList1;

 for i := 0 to ListFiles.Count - 1 do
 begin
   NewItem := TMenuItem.Create(Self);
   NewItem.Caption := ExtractFileName(ListFiles.Strings[i]);
   NewItem.ImageIndex := i;
   PopupMenu1.Items.Add(NewItem);
 end;

 ListFiles.Free;
end;


вот только фиг знает как убрать стрелки снизу-справа

Это сообщение отредактировал(а) AriX - 14.7.2004, 16:51
PM MAIL   Вверх
Budy
Дата 14.7.2004, 20:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 616
Регистрация: 6.2.2004
Где: Екатеринбург

Репутация: 1
Всего: 2



Ага, спасибо! ЗЫ.Счас кодик попробую smile.gif
А вот еще вопрос, как запустить эту ссылку. Ведь когда создаешь TPopupMenu, то он пустой, а для каждой "ссылки" нужно еще и процедуру писать. thumbs-up.gif
И какой процедурой запускать ссылку?


--------------------
Как ты назовешь свой корабль, так на нем и напишут
user posted image
PM MAIL WWW ICQ   Вверх
AriX
Дата 14.7.2004, 23:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 311
Регистрация: 16.6.2003

Репутация: 5
Всего: 19



можно сделать так :::

Path: string; - вытащи в глобальные переменные

ОБЯЗАТЕЛЬНО сделай PopupMenu1.AutoHotkeys := maManual (иначе Caption'ы будут с символом &)

вот в этой части
Код
 for i := 0 to ListFiles.Count - 1 do
 begin
   NewItem := TMenuItem.Create(Self);
   NewItem.Caption := ExtractFileName(ListFiles.Strings[i]);
   NewItem.ImageIndex := i;
   PopupMenu1.Items.Add(NewItem);
 end;


сделай так
Код
 for i := 0 to ListFiles.Count - 1 do
 begin
   NewItem := TMenuItem.Create(Self);
   NewItem.Caption := ExtractFileName(ListFiles.Strings[i]);
   NewItem.ImageIndex := i;
   NewItem.OnClick := MenuItemClick;
   PopupMenu1.Items.Add(NewItem);
 end;


и сама процедура (обязательно не забудь продекларировать ее в TForm1!!!)
Код
procedure TForm1.MenuItemClick(Sender: TObject);
begin
 ShellExecute(Application.Handle, '', PChar(Path + '\' + (Sender as TMenuItem).Caption), '', '', SW_SHOWNORMAL);
end;


нууу, думаю разберешься

------------------------------------------------------------
можно конечно изварачиваться - узнать параметры запуска в ярлыке для программы, рабочую папку...
если надо - или смотри в FAQ'e (там есть как узнать информацию о ярлыке) - или пиши - разберем smile.gif

PM MAIL   Вверх
Петрович
Дата 15.7.2004, 08:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

Репутация: 25
Всего: 55



to AriX :
Я гляжу ты переделал пример с ExtractAssociatedIcon на SHGetFileInfo? smile.gif.



--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
AriX
Дата 15.7.2004, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 311
Регистрация: 16.6.2003

Репутация: 5
Всего: 19



Петрович
ага smile.gif у меня просто на ярлыки были картинки большие, и если делать ExtractAssociatedIcon - то они как-то уменьшаются криво, а SHGetFileInfo с флагом SHGFI_SMALLICON это лучше делает - вот и поменял %)
PM MAIL   Вверх
Budy
Дата 15.7.2004, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 616
Регистрация: 6.2.2004
Где: Екатеринбург

Репутация: 1
Всего: 2



Спасибо. Код я попробовал. Вот только иконок в PopupMenu не видно hmmm.gif
Сейчас с запуском попробую. smile.gif


--------------------
Как ты назовешь свой корабль, так на нем и напишут
user posted image
PM MAIL WWW ICQ   Вверх
Петрович
Дата 15.7.2004, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

Репутация: 25
Всего: 55



Цитата
Спасибо. Код я попробовал. Вот только иконок в PopupMenu не видно

Странно, у меня похожий код работает.



--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
Budy
Дата 15.7.2004, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 616
Регистрация: 6.2.2004
Где: Екатеринбург

Репутация: 1
Всего: 2



AriX:
Цитата
можно конечно изварачиваться - узнать параметры запуска в ярлыке для программы, рабочую папку...
если надо - или смотри в FAQ'e (там есть как узнать информацию о ярлыке) - или пиши - разберем

Ну раз Вы не против, то можно:
Как получить "Свойства ссылки" при нажатии в PopupMenu на какую-нить ссылку правой кнопкой мыши?
Или немедленно показать Hint с местоположением файла ссылки. smile.gif
Добавлено @ 11:24
Цитата
Странно, у меня похожий код работает.

Да? А у меня вот нет thumbs-up.gif
Может слишком много ссылок?


--------------------
Как ты назовешь свой корабль, так на нем и напишут
user posted image
PM MAIL WWW ICQ   Вверх
Budy
Дата 15.7.2004, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 616
Регистрация: 6.2.2004
Где: Екатеринбург

Репутация: 1
Всего: 2



ЗЫ.Те, у кого с картинками: "У вас какая ося стоит?" notify.gif
ЗЫ.ЗЫ.Хотя врядли в етом дело

Это сообщение отредактировал(а) Budy - 15.7.2004, 11:41


--------------------
Как ты назовешь свой корабль, так на нем и напишут
user posted image
PM MAIL WWW ICQ   Вверх
AriX
Дата 15.7.2004, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 311
Регистрация: 16.6.2003

Репутация: 5
Всего: 19



Budy
это уже совсем не по теме вопросы
и вообще вроде нельзя (по крайней мере стандартными способами) узнать что на итем попапа нажали именно правой кнопкой, и хинт тоже нельзя сделать smile.gif
Добавлено @ 12:34
у меня XP стоит... странно что у тебя нету... ты точно все сделал - может ImageList забыл кинуть на форму.... вообще могу свой код кинуть - посмотри будет у тебя работать или нет :-/
PM MAIL   Вверх
Budy
Дата 15.7.2004, 19:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 616
Регистрация: 6.2.2004
Где: Екатеринбург

Репутация: 1
Всего: 2



Так то у меня в W98 Delphi стоит. С XP'шкой пока проблемы - надо нормальную версию взять.
А вот Пуск в 98ой винде ето ж вроде тоже Popup??! notify.gif


--------------------
Как ты назовешь свой корабль, так на нем и напишут
user posted image
PM MAIL WWW ICQ   Вверх
_hunter
Дата 15.7.2004, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 15
Всего: 98



это окно smile.gif ( если ты про кнопку )


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Pathfider
Дата 18.7.2004, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 128
Регистрация: 13.7.2004
Где: все там же

Репутация: -1
Всего: 1



Народ, а зачем так изгаляться ? Ведь проще создать PopupMenu (пункты меню) в конструкторе и в свойствах каждого пункта присвоить ему ярлычок. Единственное что программно уменьшить можно.
--------------------
Trust is a weakness
PM MAIL   Вверх
Budy
Дата 22.7.2004, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 616
Регистрация: 6.2.2004
Где: Екатеринбург

Репутация: 1
Всего: 2



Цитата
Народ, а зачем так изгаляться ? Ведь проще создать PopupMenu (пункты меню) в конструкторе и в свойствах каждого пункта присвоить ему ярлычок. Единственное что программно уменьшить можно.

А иконки будут? wow.gif Может примерный код предтавишь??!


--------------------
Как ты назовешь свой корабль, так на нем и напишут
user posted image
PM MAIL WWW ICQ   Вверх
Петрович
Дата 23.7.2004, 09:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

Репутация: 25
Всего: 55



Цитата
Народ, а зачем так изгаляться ? Ведь проще создать PopupMenu (пункты меню) в конструкторе и в свойствах каждого пункта присвоить ему ярлычок.

Это хорошо когда на этапе дизайна известен перечень пунктов меню. Не всегда это так.



--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0878 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.