Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.10.2008, 20:02   #1
ScorpioN_T
Пользователь
 
Регистрация: 27.10.2008
Сообщений: 62
По умолчанию запуск программ по нажатию на картику (проблема со значком)

Не знал как назвать тему... прочтите пост я думаю подходит
ситуация такая...
Delphi 7
есть форма.
На ней компоненты: Image1, Edit1, Edit2, Button1.
Теперь я записываю в "Edit1" к примеру путь к игре (пусть контра) "c:/Valve/hl.exe" , в "Edit2" путь к значку "c:/Valve/ctrike/Counter-Strike.ico"
код:
uses .... ,ShellAPI;
....
procedure TForm1.Button1Click(Sender: TObject);
begin
Image1.Picture.LoadFromFile(edit2.Text );
ShellExecute(Handle, nil, Pchar(Edit1.text), nil, nil, SW_SHOW);
end;
....

Суть проги - по нажатию на картинку открыть ту прогу которая изображена...
Т.е в одной строке пишу путь к файлу, а во второй строке пишу путь к значку.
Я хочу это как нить упростить.
Сам "hl.exe" имеет свой значок.

Мне нужно ИСПОЛЬЗОВАТЬ один Edit1(где будет указываться путь к файлу) - так чтобы после на Image1 появилась его значок и можно было запустить эту прогу...
Это что вроде ярлыка на .exe файл...
Я думаю свою мылсь до ВАС до ввел...
ScorpioN_T вне форума Ответить с цитированием
Старый 29.10.2008, 20:59   #2
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Если хочешь нажимать на Эдит, так и нажимай на Эдит, зачем
procedure TForm1.Button1Click(Sender: TObject);
puporev вне форума Ответить с цитированием
Старый 29.10.2008, 21:10   #3
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Я так понял, он хочет нажимать на картинку.
Тогда:
Код:
Edit2KeyDown -
if key=VK_RETURN then
Image1.Picture.LoadFromFile(edit2.Text );

Image1Click -
ShellExecute(Handle, nil, Pchar(Edit1.text), nil, nil, SW_SHOW);
mihali4 вне форума Ответить с цитированием
Старый 29.10.2008, 21:54   #4
ScorpioN_T
Пользователь
 
Регистрация: 27.10.2008
Сообщений: 62
По умолчанию

Цитата:
Сообщение от puporev Посмотреть сообщение
Если хочешь нажимать на Эдит, так и нажимай на Эдит, зачем
procedure TForm1.Button1Click(Sender: TObject);
едит мне всё равно будет нужен...
кнопка - на то она и кнопка, у мну там еще валом бдет настраек...


Цитата:
Сообщение от mihali4 Посмотреть сообщение
Я так понял, он хочет нажимать на картинку.
Тогда:
Код:
Edit2KeyDown -
if key=VK_RETURN then
Image1.Picture.LoadFromFile(edit2.Text );

Image1Click -
ShellExecute(Handle, nil, Pchar(Edit1.text), nil, nil, SW_SHOW);

Да мне нужно нажимать на картинку...
Спасибо!такой код я пробывал уже...

В общем мне нужны те же функции что и обычного ярлыка...
когда создаешь ярлык на рабочем столе, тебе предлогают указать путь к файлу ОДИН РАЗ, а значок этого файла ставиться АВТОМАТОМ (т.е. вытаскивается из этого же файла).
Вот мне НУЖНО вытащить значок из .exe файла и поместить его в Image1, так чтоб не писать в ручную путь к значку...


Кстати mihali4 , Я на днях скачал твой ФАК, Он мне очень помог...
Спасибо!

Ребята, предложите еще дей...
ScorpioN_T вне форума Ответить с цитированием
Старый 29.10.2008, 22:30   #5
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Кстати mihali4 , Я на днях скачал твой ФАК, Он мне очень помог...
Тогда я вообще ничего не понимаю...
Если в ФАКе сделать поиск по началу слова "извлечь", то можно найти 2 способа извлечения иконки из файла...
mihali4 вне форума Ответить с цитированием
Старый 31.10.2008, 14:12   #6
ScorpioN_T
Пользователь
 
Регистрация: 27.10.2008
Сообщений: 62
По умолчанию

Извлечение иконки из EXE-файла

В данном примере мы рассмотрим то, как можно "выдрать" иконку из EXE файла и поместить ее в объект имеющий канву (в данном случае это TImage).

uses ShellApi;

procedure TForm1.Button1Click(Sender: TObject);
var IconIndex: word;
h: hIcon;
begin
IconIndex := 0;
h := ExtractAssociatedIcon(hInstance, 'C:\FILE.EXE', IconINdex);
DrawIcon(Form1.image1.Canvas.Handle , 10, 10, h);
end;

Вместо FILE.EXE должен быть нужный вам EXE файл.

вот тот кусок с ФАКа...
Вот не задача, я этот код происываю у себя, ВОТ тока вместо значка того файла он мне рисует БЕЛЫЙ лист.... т.е. он не вытаскивает значок (как я понял)...
Может чего еще нужно добавить...

Еще раз поясню, я делаю что то вроде ярлыка в своей проге, МНЕ нужно чтобы после указания пути к файлу FILE.EXE он мне вытащил его зназок и поместил его на Image...
ScorpioN_T вне форума Ответить с цитированием
Старый 31.10.2008, 15:37   #7
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

В этом способе что-то не так.
А вот другой (оттуда же ) "Как извлечь иконку из другого файла" работает на ура. Я проверил.

Последний раз редактировалось mihali4; 31.10.2008 в 18:29.
mihali4 вне форума Ответить с цитированием
Старый 31.10.2008, 18:32   #8
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Прошу прощения, пришлось создать новый пост, а не править предыдущий, чтобы привлечь внимание.

Насчет первого способа. Пытался привести его в чувство, но никак. Вот код:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var IconIndex: word;
    fname: string;
    h: THandle;
begin
IconIndex := 0;
fname:='E:\For Text\ICE Book Reader Rus.exe';
if OpenDialog1.Execute then
fname:=OpenDialog1.FileName;
h:= ExtractAssociatedIcon(hInstance, PAnsiChar(fname), IconINdex);
DrawIcon(Image1.Canvas.Handle, 10, 10, h);
end;
Если закомментировать строки, выделенные красным, работать перестает, хотя переменной fname присваивается точно такое же значение, как и в результате отработки OpenDialog. OpenDialog1.FileName - тоже string. Ничего не понимаю...
Подключайтесь, у кого какие будут соображения?

З.Ы. Через 20 минут - сам же и нашел.
То ScorpioN_T :
Код:
procedure TForm1.Button1Click(Sender: TObject);
var IconIndex: word;
    fname: string;
    h: THandle;
    pname: array[0..255] of Char;
begin
IconIndex := 0;
fname:='E:\For Text\ICE Book Reader Rus.exe';
StrPCopy(pname,fname);
h:= ExtractAssociatedIcon(hInstance, pname, IconINdex);
DrawIcon(Image1.Canvas.Handle, 10, 10, h);
end;
Исправьте у себя в DFaq.

Последний раз редактировалось mihali4; 31.10.2008 в 18:58.
mihali4 вне форума Ответить с цитированием
Старый 01.11.2008, 12:51   #9
ScorpioN_T
Пользователь
 
Регистрация: 27.10.2008
Сообщений: 62
По умолчанию

Спасибо mihali4!
Эти способы я ОПРОБУЮ...
Вот вчера сам кое-что надыбал и пока это меня устраивает.
З.Ы. Вчера я в посте отвечал, но видимо из-за разрыва соединения с Инетом ответ не дошел

Вот мои код :

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  Pch: array[0..256] of Char;
  IconExtr: HIcon;
    Bitmap   : TBitmap;
  IconSave : TIcon;
  FullDir  : String;
  IconIndex: Word;
begin
  IconSave := TIcon.Create;
  Bitmap := TBitmap.Create;
  if OpenDialog1.Execute then
  begin
    IconIndex := 0;
  FullDir := OpenDialog1.FileName;
  StrPCopy(Pch,FullDir);
  IconExtr := ExtractAssociatedIcon(hInstance,Pch,IconINdex);
  IconSave.Handle := IconExtr;
  Bitmap.Width := IconSave.Width;
  Bitmap.Height := IconSave.Height;
  Bitmap.Canvas.Draw(0, 0, IconSave);
  Image1.Picture.Icon := IconSave;
  end;
end;
И этот способ похож на выше указаные
Считаю тему закрытой!

Последний раз редактировалось mihali4; 02.01.2010 в 22:36.
ScorpioN_T вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запуск программ на хостинг-сервере Gordon PHP 2 10.09.2008 22:59
Dev-C++ проблема с запуском программ Надюха Помощь студентам 12 28.05.2008 03:55
Сервис->запуск программ->не коректная работа Air Общие вопросы Delphi 2 26.03.2008 19:52
Запуск программ sinoptik Общие вопросы Delphi 6 04.05.2007 13:54