![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TNotifyEvent [XP]
Steep © (2007-04-05 07:44:00)Как создать вручную этот самый нотифи?
Неужели нужно создавать такой класс?
TMyClass = class(TObject)
private
protected
public
constructor Create; override;
destructor Destroy; override;
published
end;
Сергей М. (2007-04-05 09:11:00) [1]
> Не подскажете как?
При создании кнопки занеси ее порядковый номер в ее св-во Button.Tag.
Значение этого св-ва и будет выступать в кач-ве индекса массива PathArray[]
Steep (2007-04-05 09:11:00) [2]А понял ;)
Мы дописываем к кслассу кнопки сий путь ;) (блин до такого я точно бы не догодался ;) )
TmyButton = class(TSpeedButton)
Opereation : string;
end;
Большое спасибо вам! Сергей М. © и Думкин © !
Steep (2007-04-05 09:08:00) [3]
> Думкин ©
О... а что это за параметр у кнопки (Operation := Edit.Text;) ?
Можно прописать несколько таких? типа: Operation1 := Edit2.Text; ?
Steep (2007-04-05 09:06:00) [4]О... допедрил ;)
Нужно создать массив типа string
var PathArray: array of string;
и в него заносить все path (с таким же номером что и кнопка ;) ), а потом
только нужно как-то узнать от какого номера кноки произошел клик..
Не подскажете как?
procedure TMyForm.DoOnButtonCkick(Sender: TObject);
begin
ShellExecute(handle, "open", PathArray[?], NULL, NULL, SW_SHOWNORMAL);
end;
Сергей М. (2007-04-05 09:04:00) [5]
> тут на все кнопки работает 1 событие
И что ?
Событие - оно и в Африке событие)
В данном случае - событие нажатия некоей кнопки.
А вот какой конкретно - об этом (см. пример выше) скажет параметр Sender.
Зная же какая конкретно кнопка была нажата, ты уже ветвишь алгоритм реакции на нажатие кнопки соответствующим образом.
Думкин (2007-04-05 09:04:00) [6]
TmyButton = class(TSpeedButton)
Opereation : string;
end;
procedure TMyForm.DoOnButtonCkick(Sender : TObject);
var Path : string;
begin
Path := (Sender as TMyButto).Operation;
ShellExecute(handle, "open", Path, NULL, NULL, SW_SHOWNORMAL)
end;
With TMyButton.Create(Self) do
begin
Parent := ScrollBox1;
//Координаты - расчет
SetBounds( 1, (32*FBC)+(1*(FBC+1)), 32, 32 );
//Caption := IntToStr(FBC);//'Кнопка';
Glyph.LoadFromFile('FastButton.bmp');
Name := 'FastButton'+IntToStr(FBC);
Anchors := [akTop, akLeft];
Operation := Edit.Text;
onClick := MyForm.DoOnButtonCkick;
inc(FBC);
end;
Если грубо.
Steep (2007-04-05 09:01:00) [7]
> procedure TMyForm.DoOnButtonCkick(Sender: TObject);begin
> ShowMessage(TMyButton(Sender).Name + ' click event')end;
> Button1 := TMyButton.Create(..);Button1.Name := 'Button1';
> ..Button1.OnClick := MyForm.DoOnButtonCkick;
Прол это я думал... но тут на все кнопки работает 1 событие...
Сергей М. (2007-04-05 08:59:00) [8]type
TMyForm = class(TForm)
..
procedure DoOnButtonCkick(Sender: TObject);
..
end;
..
procedure TMyForm.DoOnButtonCkick(Sender: TObject);
begin
ShowMessage(TMyButton(Sender).Name + ' click event')
end;
Button1 := TMyButton.Create(..);
Button1.Name := 'Button1';
..
Button1.OnClick := MyForm.DoOnButtonCkick;
..
ButtonN := TMyButton.Create(..);
ButtonN.Name := 'ButtonN';
..
ButtonN.OnClick := MyForm.DoOnButtonCkick;
Steep (2007-04-05 08:51:00) [9]Итак ;)
1. Есть поле Edit на форме, кнопка и ScrollBox
2. Пользователь вводит в поле ввода например C:\Windows\Notepad.exe
и жмет кноку - создается кнопка (FastButton1) в ScrollBox которая запускат блокнот
3. Пользовател еще кнопку опять вводит например D:\games\hl.exe -cstrike
и опять давит по батону - получаем кнопку (FastButton2) в ScrollBox корая запускает контру ;)
Код создания кнопки:
FBC количество кнопок (с 0) для расчета положения следующей кнопки
Path - путь к приложению
begin
With TSpeedButton.Create(Self) do
begin
Parent := ScrollBox1;
//Координаты - расчет
SetBounds( 1, (32*FBC)+(1*(FBC+1)), 32, 32 );
//Caption := IntToStr(FBC);//'Кнопка';
Glyph.LoadFromFile('FastButton.bmp');
Name := 'FastButton'+IntToStr(FBC);
Anchors := [akTop, akLeft];
{//Предположения насчет события..
OnClick := ShellExecute(handle, "open", Path, NULL, NULL, SW_SHOWNORMAL);}
inc(FBC);
end;
end;
Думкин (2007-04-05 08:37:00) [10]> Steep © (05.04.07 08:33) [6]
То есть, можно писать некоторую процедуру с входными данными, которая выполняет определенные действия. Так?
Ну и цепляй процедурный метод к соответствующей кнопке и выполняй внутри нее процедуру.
Вопрос в том, как получить внешние параметры? так тебе лучщше знать откуда они вообще возьмутся.
Все-таки стоит, хотя бы для себя расписать, что же все-таки нужно и если после этого не ясно - то дать это же описание и сюда.
Steep (2007-04-05 08:33:00) [11]
> Что стоит за фразой - > и их действий заранее неизвестно.
> .. ??
Ну я ж не знаю какой файл они хотят запустить этой кнопкой...
Я только знаю что запустить
А узнать только когда будет создаватся сама кнопка т.е. в real-tim'е
Думкин (2007-04-05 08:27:00) [12]> Steep © (05.04.07 08:24) [4]
Что стоит за фразой -
> и их действий заранее неизвестно...??
Steep (2007-04-05 08:24:00) [13]
> Достаточно добавить в этот класс процедурный метод с прототипом
> TNotifyEvent
Это как? И возможно ли это будет сделать - ведь кол-во этих самых кнопок и их действий заранее неизвестно...
Сергей М. (2007-04-05 08:10:00) [14]
> Неужели нужно создавать такой класс?
Вовсе не обязательно.
Можно воспользоваться любым уже имеющимся классом, например, классом какой-либо формы, имеющейся в проекте. Достаточно добавить в этот класс процедурный метод с прототипом TNotifyEvent
Steep (2007-04-05 08:06:00) [15]задача создать кнопку в RealTime и на нее повесить открытие файла
указанного пользователем
MBo (2007-04-05 08:05:00) [16]Задача какая?