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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 07.04.2014, 10:54
Gareth Gareth вне форума
Активный
 
Регистрация: 21.03.2013
Адрес: Приднестровье
Сообщения: 202
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Загрузить иконку ярлыка в кнопку

Здравствуйте, помогите пожалуйста.
Я умею загружать в image путь до файла и его ярлык. То-есть по нажатию на image у меня отображается иконка и запускается программа...

Как мне сделать тоже самое на кнопки в которые можно загружать картинки, типа speedbutton.
Загружается всё через опендиалог
Подскажите пожалуйста!
Ответить с цитированием
  #2  
Старый 07.04.2014, 11:22
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Gareth
Я умею загружать в image путь до файла и его ярлык. То-есть по нажатию на image у меня отображается иконка и запускается программа...

Как мне сделать тоже самое на кнопки в которые можно загружать картинки, типа speedbutton.
Загружается всё через опендиалог
Компонент TSpeedButton иконки не умеет отображать, он отображает TBitmap, поэтому для отображения иконки в TSpeedButton нужно её преобразовать в TBitmap.
Примерно как-то так:
Код:
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
  ico: TIcon;
  bmp: TBitmap;
begin
  ico := TIcon.Create;
  try
    ico.Handle := ExtractIcon(HInstance, 'C:\WINDOWS\system32\calc.exe', 0);
    bmp := TBitmap.Create;
    try
      bmp.PixelFormat := pf32bit;
      bmp.Width := ico.Width;
      bmp.Height := ico.Height;
      bmp.Canvas.Draw(0, 0, ico);
      SpeedButton1.Glyph.Assign(bmp);
    finally
      bmp.Free;
    end;
  finally
    ico.Free;
  end;
end;
Ответить с цитированием
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение:
Gareth (07.04.2014)
  #3  
Старый 07.04.2014, 12:03
Gareth Gareth вне форума
Активный
 
Регистрация: 21.03.2013
Адрес: Приднестровье
Сообщения: 202
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

А есть кнопки которые отображают иконки как image ? Что бы не маятся с этими преобразованиями)
Делаю программу, по нажатию какой либо кнопки на мышке будет вызываться моя форма с ярлыками.


А на счет BitBtn ? С ним так же надо будет преобразовывать ?

Последний раз редактировалось Gareth, 07.04.2014 в 14:47.
Ответить с цитированием
  #4  
Старый 08.04.2014, 10:33
Gareth Gareth вне форума
Активный
 
Регистрация: 21.03.2013
Адрес: Приднестровье
Сообщения: 202
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от poli-smen
Компонент TSpeedButton иконки не умеет отображать, он отображает TBitmap, поэтому для отображения иконки в TSpeedButton нужно её преобразовать в TBitmap.
Примерно как-то так:
Код:
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
  ico: TIcon;
  bmp: TBitmap;
begin
  ico := TIcon.Create;
  try
    ico.Handle := ExtractIcon(HInstance, 'C:\WINDOWS\system32\calc.exe', 0);
    bmp := TBitmap.Create;
    try
      bmp.PixelFormat := pf32bit;
      bmp.Width := ico.Width;
      bmp.Height := ico.Height;
      bmp.Canvas.Draw(0, 0, ico);
      SpeedButton1.Glyph.Assign(bmp);
    finally
      bmp.Free;
    end;
  finally
    ico.Free;
  end;
end;
Этот код позволяет вставлять в speedbutton только ico, когда вставляю файл например exe, jpg или что-то другое, на кнопке появляется белый квадрат.
Как можно сделать так, что бы отображался любой ярлык?)
Ответить с цитированием
  #5  
Старый 08.04.2014, 10:47
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Gareth
Цитата:
Сообщение от poli-smen
Код:
.....
    ico.Handle := ExtractIcon(HInstance, 'C:\WINDOWS\system32\calc.exe', 0);
.....
Этот код позволяет вставлять в speedbutton только ico, когда вставляю файл например exe, jpg или что-то другое, на кнопке появляется белый квадрат.
Вообще-то "calc.exe" это вовсе никакой не "ico", а очень даже "exe".
Цитата:
Сообщение от Gareth
Как можно сделать так, что бы отображался любой ярлык?)
Если я правильно тебя понял, тебе нужно что-то вроде такого "Получить иконку файла по ярлыку" или такого "Получить иконку из ярлыка"
Ответить с цитированием
  #6  
Старый 08.04.2014, 14:52
Gareth Gareth вне форума
Активный
 
Регистрация: 21.03.2013
Адрес: Приднестровье
Сообщения: 202
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Poli-smen я новичок, там на всю страницу код, еще и на англ))

Сейчас доходчиво попробую объяснить что конкретно мне надо

У меня есть панель, на ней хочу сделать кнопки, не важно speedbutton или bitbtn... По нажатию по кнопке, будет открываться opendialog, там я буду выберать нужный себе файл. Картинка файла будет грузится в кнопку.
И по нажатию этой кнопки будет открываться тот файл который я выбрал в opendialog.

Я со всем разобрался, не знаю лишь как загрузить в speedbutton или bitbtn икону ярлыка.
Цитата:
Сообщение от poli-smen
Если я правильно тебя понял, тебе нужно что-то вроде такого Получить иконку из ярлыка
Да, получить его в любую из кнопок (speedbutton, bitbtn)

Помогите пожалуйста понять как это делается .

Последний раз редактировалось Gareth, 08.04.2014 в 16:36.
Ответить с цитированием
  #7  
Старый 08.04.2014, 16:49
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Gareth
Я со всем разобрался, не знаю лишь как загрузить в speedbutton или bitbtn икону ярлыка.
Честно не могу понять в чём у тебя загвоздка. Выше я уже приводил код, который получает иконку для конкретного файла (в примере было для калькулятора). Осталось только переделать этот код, чтобы он получал иконку из произвольно выбранного (через OpenDialog) файла:
Код:
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
  ico: TIcon;
  bmp: TBitmap;
  FileName: AnsiString;
begin
  if OpenDialog1.Execute then
  begin
    FileName := OpenDialog1.FileName;
    ico := TIcon.Create;
    try
      ico.Handle := ExtractIcon(HInstance, Pointer(FileName), 0);
      bmp := TBitmap.Create;
      try
        bmp.PixelFormat := pf32bit;
        bmp.Width := ico.Width;
        bmp.Height := ico.Height;
        bmp.Canvas.Draw(0, 0, ico);
        SpeedButton1.Glyph.Assign(bmp);
      finally
        bmp.Free;
      end;
    finally
      ico.Free;
    end;
  end;
end;
Ответить с цитированием
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение:
Gareth (08.04.2014)
  #8  
Старый 08.04.2014, 16:54
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

В модуле ShellApi есть подходящая функция ExtractAssociatedIcon, вот так ей можно пользоваться
Код:
...
var
   Icon : TIcon;
   Pch: array[0..256] of Char;
   IconIndex: Word;
  begin
   Icon := TIcon.Create;
   StrPCopy(Pch,'C:\WINDOWS\NOTEPAD.EXE');
   Icon.Handle:= ExtractAssociatedIcon(hInstance, Pch, IconIndex);
   SpeedButton1.Glyph.Width:= Icon.Width;
   SpeedButton1.Glyph.Height:= Icon.Height;
   SpeedButton1.Glyph.Canvas.Draw(0, 0, Icon);
   Icon.Free;
end;
...
Ответить с цитированием
Этот пользователь сказал Спасибо Alegun за это полезное сообщение:
Gareth (08.04.2014)
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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