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

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

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.06.2007, 16:29   #1
ZhekON
Форумчанин
 
Аватар для ZhekON
 
Регистрация: 24.01.2007
Сообщений: 323
По умолчанию БУТТоны...

Есть десять неактивных(enebled:=false) TSpeedButton'ов(SpeedButton0, SpeedButton1...SpeedButton9)... есть два TEdit'а .... в одном путь к файлу програмы, а во втором описание програмы, мне нужно чтобы можно было добавлять на событие нажатые кнопки (SpeedButton.Onclick) запуск програмы из TEdit'а... как это зделать?
Всё проще чем вы думаете, нужно только правильно подойти к тому или иному вопросу?
ZhekON вне форума Ответить с цитированием
Старый 12.06.2007, 16:41   #2
Jeni
Форумчанин
 
Регистрация: 31.05.2007
Сообщений: 486
По умолчанию

В модуле ShellAPI есть функция ShellExecute
Можно записать так (в простейшем виде):
ShellExecute(0, nil, PAnsiChar(Edit.Text), nil, nil, 1);
Jeni вне форума Ответить с цитированием
Старый 12.06.2007, 16:54   #3
Сильванович Михаил
Студент
Форумчанин
 
Регистрация: 10.11.2006
Сообщений: 196
По умолчанию

Код:
uses ShellAPI;
...
procedure RunIt(x: integer);
begin
 ShellExecute(0, nil, PAnsiChar((FindComponent('Edit'+IntToStr(x)) as TEdit).Text), nil, nil, 1);
end;

procedure Click(Sender: TOBject);
var
 x: string;
 y: byte;
begin
 with Sender as TSpeedButton do
 begin
  x:=(Sender as TSpeedButton).Name;
  y:=StrToInt(x[Length(x)]+'');
  RunIt(y);
 end;
end;
...
var i: integer;
...
for i:=0 to 9 do 
begin
 (FindComponent('SpeedButton'+IntToStr(i)) as TSpeedButton).OnClick:=Click;
end;
Ну, думаю, понятно...
Visita Interiorem Terrae Rectificando Operae Lapidem...
Сильванович Михаил вне форума Ответить с цитированием
Старый 13.06.2007, 17:57   #4
ZhekON
Форумчанин
 
Аватар для ZhekON
 
Регистрация: 24.01.2007
Сообщений: 323
По умолчанию

С этим розобрался- ОГРОМНОЕ СПАСИБО!!!
НО возник вопрос: Как удалить процэдуру Click из Speedbutton.OnClick, так сказать очистить кнопку од реакцый?
Всё проще чем вы думаете, нужно только правильно подойти к тому или иному вопросу?
ZhekON вне форума Ответить с цитированием
Старый 13.06.2007, 18:24   #5
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

OnClick := nil;
pu4koff вне форума Ответить с цитированием
Старый 14.06.2007, 14:58   #6
ZhekON
Форумчанин
 
Аватар для ZhekON
 
Регистрация: 24.01.2007
Сообщений: 323
По умолчанию

Я создал Objects в которых храню адреса програм... у меня получается при нажатии на любой из SpeedButton'ов открывается одна и та жэ програма... КАк прикрепить к каждой кнопке свой адрес к програме? И чтоб можно было потом например удалить адрес с одной кнопки(зделать её пустой) и все что находятся вышэ по индэксу опустились нижэ...
ВОбщем идэя как в ПРОВОДНИКЕ ВИНДОВС... только здесь используются SpeedButton'ы помогите ПЛИЗЗ!!
Всё проще чем вы думаете, нужно только правильно подойти к тому или иному вопросу?
ZhekON вне форума Ответить с цитированием
Старый 14.06.2007, 19:01   #7
Сильванович Михаил
Студент
Форумчанин
 
Регистрация: 10.11.2006
Сообщений: 196
По умолчанию

Создай строковой массив, или воспользуйся TStrings, да обращайся к
его элементам, ведь каждая кнопка имеет свое имя (лучше, если
'общее'+порядковый номер в цепи), следовательно отличать одну
кнопку от другой заставить прогу можно. => все будет как положено.
А чтобы сделать кнопку пустой в массиве элементу присваеваем пустую строку (''); в процедуре запуска ставим проверку на пустую строку,
чтобы лишний раз не вызывать ShellExecute.
Visita Interiorem Terrae Rectificando Operae Lapidem...

Последний раз редактировалось Сильванович Михаил; 14.06.2007 в 19:11.
Сильванович Михаил вне форума Ответить с цитированием
Старый 14.06.2007, 20:38   #8
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Цитата:
Сообщение от ZhekON Посмотреть сообщение
Я создал Objects в которых храню адреса програм... у меня получается при нажатии на любой из SpeedButton'ов открывается одна и та жэ програма... КАк прикрепить к каждой кнопке свой адрес к програме? И чтоб можно было потом например удалить адрес с одной кнопки(зделать её пустой) и все что находятся вышэ по индэксу опустились нижэ...
ВОбщем идэя как в ПРОВОДНИКЕ ВИНДОВС... только здесь используются SpeedButton'ы помогите ПЛИЗЗ!!
Если ты хранишь в массиве адреса прог, то как вариант у SpeedButton в свойстве Tag напиши номер элемента в этом массиве и в OnClick запускаешь прогу номер Sender.Tag, ну а для удаления или OnClick := nil или Tag := -1 и в OnClick проверяешь, что Tag >= 0
pu4koff вне форума Ответить с цитированием
Старый 15.06.2007, 17:17   #9
ZhekON
Форумчанин
 
Аватар для ZhekON
 
Регистрация: 24.01.2007
Сообщений: 323
По умолчанию

Спасиба всем, ужэ получилось!
Ещё вопрос...
Как загрузить иконку програмы(к которой SpeedButton хранит адрес(путь)) на поверхность этого SpeedButton'а???
Всё проще чем вы думаете, нужно только правильно подойти к тому или иному вопросу?
ZhekON вне форума Ответить с цитированием
Старый 15.06.2007, 17:31   #10
Сильванович Михаил
Студент
Форумчанин
 
Регистрация: 10.11.2006
Сообщений: 196
По умолчанию

Код:
var
 index: word;
 fname: string;
 icon1: TIcon;
 bmp: TBitmap;
...
// index:=0;
 Icon1:=TIcon.Create;
 Icon1.Handle:=ExtractIcon(hInstance,PChar(fname),index);
 bmp:=TBitmap.Create;
 bmp.Width:=Icon1.Width;
 bmp.Height:=Icon1.Height;
 bmp.Canvas.Draw(0,0,Icon1);
 SpeedButton2.Glyph.Assign(bmp);
 bmp.Free;
 Icon1.Free;
З.Ы. Здесь в fname хранится адрес экзешника.
Visita Interiorem Terrae Rectificando Operae Lapidem...
Сильванович Михаил вне форума Ответить с цитированием
Ответ


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