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

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

Поймать OnClick в классе


Страницы:   1 2

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;

В конструкторе после создания компонентов пишу

1     MyUpDown.OnClick:=MyUpDownClick;
2     TUpDown(Sender).OnClick:=MyUpDownClick;
3     MyUpDown.OnClick:=MethodAddress(MyUpDownClick);
Ни один вариант не работает, хотя 3-й вариант вроде бы должен работать. Что за засада!


Anatoly Podgoretsky   (2010-02-04 14:23:00) [20]

> oleg1963lora  (04.02.2010 14:09:05)  [5]

Присвоить кнопки адрес обработчика очень просто.

   UpDown.OnClick := имя обработчика без параметров.


Страницы:   1 2

Наверх

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