Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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]

Задача какая?


Наверх

Титульная страница Поиск, карта сайта Написать письмо