Форум: "Начинающим";
Текущий архив: 2007.04.22;
Скачать: [xml.tar.bz2];
ВнизTNotifyEvent Найти похожие ветки
← →
Steep © (2007-04-05 07:44) [0]Как создать вручную этот самый нотифи?
Неужели нужно создавать такой класс?
TMyClass = class(TObject)
private
protected
public
constructor Create; override;
destructor Destroy; override;
published
end;
← →
MBo © (2007-04-05 08:05) [1]Задача какая?
← →
Steep © (2007-04-05 08:06) [2]задача создать кнопку в RealTime и на нее повесить открытие файла
указанного пользователем
← →
Сергей М. © (2007-04-05 08:10) [3]
> Неужели нужно создавать такой класс?
Вовсе не обязательно.
Можно воспользоваться любым уже имеющимся классом, например, классом какой-либо формы, имеющейся в проекте. Достаточно добавить в этот класс процедурный метод с прототипом TNotifyEvent
← →
Steep © (2007-04-05 08:24) [4]
> Достаточно добавить в этот класс процедурный метод с прототипом
> TNotifyEvent
Это как? И возможно ли это будет сделать - ведь кол-во этих самых кнопок и их действий заранее неизвестно...
← →
Думкин © (2007-04-05 08:27) [5]> Steep © (05.04.07 08:24) [4]
Что стоит за фразой -
> и их действий заранее неизвестно... ??
← →
Steep © (2007-04-05 08:33) [6]
> Что стоит за фразой - > и их действий заранее неизвестно.
> .. ??
Ну я ж не знаю какой файл они хотят запустить этой кнопкой...
Я только знаю что запустить
А узнать только когда будет создаватся сама кнопка т.е. в real-tim"е
← →
Думкин © (2007-04-05 08:37) [7]> Steep © (05.04.07 08:33) [6]
То есть, можно писать некоторую процедуру с входными данными, которая выполняет определенные действия. Так?
Ну и цепляй процедурный метод к соответствующей кнопке и выполняй внутри нее процедуру.
Вопрос в том, как получить внешние параметры? так тебе лучщше знать откуда они вообще возьмутся.
Все-таки стоит, хотя бы для себя расписать, что же все-таки нужно и если после этого не ясно - то дать это же описание и сюда.
← →
Steep © (2007-04-05 08:51) [8]Итак ;)
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:59) [9]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 09:01) [10]
> 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 09:04) [11]
> тут на все кнопки работает 1 событие
И что ?
Событие - оно и в Африке событие)
В данном случае - событие нажатия некоей кнопки.
А вот какой конкретно - об этом (см. пример выше) скажет параметр Sender.
Зная же какая конкретно кнопка была нажата, ты уже ветвишь алгоритм реакции на нажатие кнопки соответствующим образом.
← →
Думкин © (2007-04-05 09:04) [12]
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:06) [13]О... допедрил ;)
Нужно создать массив типа stringvar PathArray: array of string;
и в него заносить все path (с таким же номером что и кнопка ;) ), а потом
только нужно как-то узнать от какого номера кноки произошел клик..
Не подскажете как?procedure TMyForm.DoOnButtonCkick(Sender: TObject);
begin
ShellExecute(handle, "open", PathArray[?], NULL, NULL, SW_SHOWNORMAL);
end;
← →
Steep © (2007-04-05 09:08) [14]
> Думкин ©
О... а что это за параметр у кнопки (Operation := Edit.Text;) ?
Можно прописать несколько таких? типа: Operation1 := Edit2.Text; ?
← →
Сергей М. © (2007-04-05 09:11) [15]
> Не подскажете как?
При создании кнопки занеси ее порядковый номер в ее св-во Button.Tag.
Значение этого св-ва и будет выступать в кач-ве индекса массива PathArray[]
← →
Steep © (2007-04-05 09:11) [16]А понял ;)
Мы дописываем к кслассу кнопки сий путь ;) (блин до такого я точно бы не догодался ;) )
TmyButton = class(TSpeedButton)
Opereation : string;
end;
Большое спасибо вам! Сергей М. © и Думкин © !
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.04.22;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.114 c