![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Поймать OnClick в классе
oleg1963lora © (2010-02-03 11:26:00)Еще один вопрос. Создал класс: на панели находятся ProgressBar, UpDown и ассоциированный с ним Edit. Нужно чтобы при нажатии UpDown значение Edit передавалось в progressBar.Position.
Как правильно объявить событие в классе?
Сергей М. (2010-02-05 11:52:00) [1]
> oleg1963lora (05.02.10 11:47) [24]
+ к Медвежонок Пятачок © (05.02.10 11:06) [23]
Либо TFrame, о котором говорили большевики в [15]
oleg1963lora (2010-02-05 11:47:00) [2]
> Медвежонок Пятачок © (05.02.10 11:06) [23]
> procedure Click(Button: TUDBtnType); reintroduce; dynamic;
Понял, не дурак.Буду переделывать. Спасибо
Медвежонок Пятачок (2010-02-05 11:06:00) [3]но как улучшить пока не знаю
TCustomUpDown = class(TWinControl)
...
procedure Click(Button: TUDBtnType); reintroduce; dynamic;
...
Вместо TUPDown пишем класс TMyUPDown в котором переопределяем виртуальный Click
в переопределенном клик сначала вошкаемся с прогрессбаром, затем вызываем унаследованный клик.
или наоборот.
сначала вызываем, затем вошкаемся с прогрессбаром.
oleg1963lora (2010-02-05 11:00:00) [4]
> Этим холодильником будешь пользоваться только ты
Пока только я, но желание разобраться остается. У меня самокритика не ржавеет, сам понимаю, что мое "творение" далеко от совершенства. Я сам бы задушил такого программера как я, увидь я это со стороны, но как улучшить пока не знаю. Желание написать лучше не ржавеет!:)
Сергей М. (2010-02-05 09:24:00) [5]
> oleg1963lora (05.02.10 09:04) [19]
> Поясню на примере холодильника
Этим холодильником будешь пользоваться только ты или кто-то другой, кто не ведает о твоих программных выкрутасах в конструкторе со свойствами хомплектующих холодильника ?
oleg1963lora (2010-02-05 09:22:00) [6]Сделал как посоветовали.
private
procedure ModLevelClick(Sender: TObject; Button: TUDBtnType);
constructor TComponent1.Create(AOwner: TComponent);
begin
inherited;
ModLevel:= TUpDown.Create(Self);
ModLevel.OnClick:=ModLevelClick;
end;
procedure TComponent1.ModLevelClick(Sender: TObject; Button: TUDBtnType);
begin
ShowMessage('UpDownClick!');
end;
Все работает.Почему раньше не получалось - однако утро господа. Вчера у меня точно пробки повылетали:)
Спасибо всем за помощь и терпение.Тему можно закрыть.
oleg1963lora (2010-02-05 09:04:00) [7]
> Медвежонок Пятачок © (04.02.10 17:10) [14]
>
> появляется другой программист, который будет пользоваться
> этим компонентом.
Поясню на примере холодильника. У него нет даже выключателя! Только вилка. Воткнул - холодит, выдернул -... В моем случае мне нужен компонент имеющий на входе:
1. Координаты лев.верх. угла
2. Два входных параметра - опорный уровень и разброс параметра(в процентах);
На выходе : выходной уровень.
Изменения полученных на входе параметров-в "черном ящике"(понятие радиотехники).
Плохиш (2010-02-04 21:29:00) [8]
> oleg1963lora (04.02.10 14:09) [5]
> У меня есть подозрение, что мне не хватает каких-то базовых
> понятий.
Только подозрение?
Это, что, прикол такой?
Медвежонок Пятачок (2010-02-04 21:10:00) [9]"Другого" программиста даже не требуется.
Он сам однажды ткнет случайно в этот спин эдит и обработчик заточенный на прогрессбар слетит.
Ганя (2010-02-04 19:32:00) [10]
> Медвежонок Пятачок © (04.02.10 17:10) [14]
> появляется другой программист, который будет пользоваться этим компонентом.
Учитывая приведенный код, весьма сомнительно. Так что с этой стороны все в порядке)
Юрий Зотов (2010-02-04 19:15:00) [11]> Медвежонок Пятачок © (04.02.10 17:10) [14]
Не-а.
> автор
Создайте фрейм и зарегистрируйте его, как компонент. Будет то же самое, но намного проще.
Медвежонок Пятачок (2010-02-04 17:10:00) [12]все это конечно здорово, если бы не грабли которые уже лежат здесь в большом количестве.
напишешь ты свой чудо компонент.
в конструкторе повесишь на клик свой обработчик.
замечательно.
появляется другой программист, который будет пользоваться этим компонентом.
он его кидает на форму, дважды тыкает на спинэдит и попадает в новый пустой обработчик-метод который иде создаст в классе формы.
и привет твоей задумке.
при клике по спину будет работать обработчик, который ничего не знает про прогрессбар.
Сергей М. (2010-02-04 16:48:00) [13]В строке
MyUpDown.OnClick:= ИмяМетодаОбработчикаСобытия;
свойству OnClick объекта MyUpDown должно быть присвоено некое значение, равное ИмяМетодаОбработчикаСобытия
Вопрос к рубильнику: а что вместо этого ты пытаешься ему скормить ?
oleg1963lora (2010-02-04 16:33:00) [14]
> Медвежонок Пятачок
Я понимаю, что задолбал вю эху. А у мозга главный рубильник скоро выключится - термопары уже горят ровным строем.:))
Медвежонок Пятачок (2010-02-04 16:16:00) [15]Какие еще предложения?
есть предложение включить моск.
oleg1963lora (2010-02-04 16:15:00) [16]вариант
тоже ничего не дает (((
procedure MyUpDownClick(Sender:TObject);
MyUpDown.OnClick:=MyUpDownClick(Sender);
Какие еще предложения?
Медвежонок Пятачок (2010-02-04 16:10:00) [17]лучше так
procedure MyUpDownClick(Sender: TObject; Button: TUDBtnType);
Сергей М. (2010-02-04 16:02:00) [18]protected
procedure MyUpDownClick (Sender: TObject);
oleg1963lora (2010-02-04 15:58:00) [19]
protected
procedure MyUpDownClick;
...................................
...................................
procedure TComponent1.MyUpDownClick;
begin
ShowMessage('UpDownClick!');
end;
В конструкторе после создания компонентов пишу
Ни один вариант не работает, хотя 3-й вариант вроде бы должен работать. Что за засада!
1 MyUpDown.OnClick:=MyUpDownClick;
2 TUpDown(Sender).OnClick:=MyUpDownClick;
3 MyUpDown.OnClick:=MethodAddress(MyUpDownClick);
Anatoly Podgoretsky (2010-02-04 14:23:00) [20]> oleg1963lora (04.02.2010 14:09:05) [5]
Присвоить кнопки адрес обработчика очень просто.
UpDown.OnClick := имя обработчика без параметров.