Форум: "Начинающим";
Текущий архив: 2010.04.04;
Скачать: [xml.tar.bz2];
ВнизПоймать OnClick в классе Найти похожие ветки
← →
oleg1963lora (2010-02-03 11:26) [0]Еще один вопрос. Создал класс: на панели находятся ProgressBar, UpDown и ассоциированный с ним Edit. Нужно чтобы при нажатии UpDown значение Edit передавалось в progressBar.Position.
Как правильно объявить событие в классе?
← →
Медвежонок Пятачок © (2010-02-03 12:04) [1]событие - это свойство. и оно у тебя уже есть. это свойство апдауна.
тебе нужен обработчик (значение этого свойства)
хотя это и неправильно идеологически.
события - они для пользователей класса а не для разработчиков класса.
← →
oleg1963lora (2010-02-04 10:32) [2]
> хотя это и неправильно идеологически.
> события - они для пользователей класса а не для разработчиков
> класса.
С этим я согласен, но как же мне с этим быть? Я хочу иметь "черный ящик" с указанием координат и двух входных свойств (Как в электронике: сигнал на входе, другой на выходе, а что там внутри-не ваше дело).
← →
Медвежонок Пятачок © (2010-02-04 10:33) [3]в чем вопрос-то?
← →
Anatoly Podgoretsky © (2010-02-04 11:07) [4]
> Как правильно объявить событие в классе?property OnMyClick: OnMyEvent ....
← →
oleg1963lora (2010-02-04 14:09) [5]<
> Anatoly Podgoretsky © (04.02.10 11:07) [4]
>
> property OnMyClick: OnMyEvent ....
Видно я задал некорректный вопрос. Имется входной параметр целого типа, на основании этого параметра, передается в ProgressBar.Position и Edit+UpDown. Нажимая кнопки Updown"a я изменяю значение которое получил на входе, а как передать значение из Edit.Text Position. По нажатию кнопки. Пишу обработчик:
procedure TComponent.UpDownClick(Sender:TObject);
begin
ProgressBar.Position:=StrToInt(Edit.Text);
end;
Далее для события UpDown
UpDown.OnClick:=....?
ЧТО? Как кнопке присвоить адрес обработчика?
У меня есть подозрение, что мне не хватает каких-то базовых понятий.
← →
Anatoly Podgoretsky © (2010-02-04 14:23) [6]> oleg1963lora (04.02.2010 14:09:05) [5]
Присвоить кнопки адрес обработчика очень просто.
UpDown.OnClick := имя обработчика без параметров.
← →
oleg1963lora (2010-02-04 15:58) [7]
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);
← →
Сергей М. © (2010-02-04 16:02) [8]protected
procedure MyUpDownClick(Sender: TObject);
← →
Медвежонок Пятачок © (2010-02-04 16:10) [9]лучше так
procedure MyUpDownClick(Sender: TObject; Button: TUDBtnType);
← →
oleg1963lora (2010-02-04 16:15) [10]вариант
тоже ничего не дает (((
procedure MyUpDownClick(Sender:TObject);
MyUpDown.OnClick:=MyUpDownClick(Sender);
Какие еще предложения?
← →
Медвежонок Пятачок © (2010-02-04 16:16) [11]Какие еще предложения?
есть предложение включить моск.
← →
oleg1963lora (2010-02-04 16:33) [12]
> Медвежонок Пятачок
Я понимаю, что задолбал вю эху. А у мозга главный рубильник скоро выключится - термопары уже горят ровным строем.:))
← →
Сергей М. © (2010-02-04 16:48) [13]В строке
MyUpDown.OnClick:= ИмяМетодаОбработчикаСобытия;
свойству OnClick объекта MyUpDown должно быть присвоено некое значение, равное ИмяМетодаОбработчикаСобытия
Вопрос к рубильнику: а что вместо этого ты пытаешься ему скормить ?
← →
Медвежонок Пятачок © (2010-02-04 17:10) [14]все это конечно здорово, если бы не грабли которые уже лежат здесь в большом количестве.
напишешь ты свой чудо компонент.
в конструкторе повесишь на клик свой обработчик.
замечательно.
появляется другой программист, который будет пользоваться этим компонентом.
он его кидает на форму, дважды тыкает на спинэдит и попадает в новый пустой обработчик-метод который иде создаст в классе формы.
и привет твоей задумке.
при клике по спину будет работать обработчик, который ничего не знает про прогрессбар.
← →
Юрий Зотов © (2010-02-04 19:15) [15]> Медвежонок Пятачок © (04.02.10 17:10) [14]
Не-а.
> автор
Создайте фрейм и зарегистрируйте его, как компонент. Будет то же самое, но намного проще.
← →
Ганя (2010-02-04 19:32) [16]
> Медвежонок Пятачок © (04.02.10 17:10) [14]
> появляется другой программист, который будет пользоваться этим компонентом.
Учитывая приведенный код, весьма сомнительно. Так что с этой стороны все в порядке)
← →
Медвежонок Пятачок © (2010-02-04 21:10) [17]"Другого" программиста даже не требуется.
Он сам однажды ткнет случайно в этот спин эдит и обработчик заточенный на прогрессбар слетит.
← →
Плохиш © (2010-02-04 21:29) [18]
> oleg1963lora (04.02.10 14:09) [5]
> У меня есть подозрение, что мне не хватает каких-то базовых
> понятий.
Только подозрение?
Это, что, прикол такой?
← →
oleg1963lora (2010-02-05 09:04) [19]
> Медвежонок Пятачок © (04.02.10 17:10) [14]
>
> появляется другой программист, который будет пользоваться
> этим компонентом.
Поясню на примере холодильника. У него нет даже выключателя! Только вилка. Воткнул - холодит, выдернул -... В моем случае мне нужен компонент имеющий на входе:
1. Координаты лев.верх. угла
2. Два входных параметра - опорный уровень и разброс параметра(в процентах);
На выходе : выходной уровень.
Изменения полученных на входе параметров-в "черном ящике"(понятие радиотехники).
← →
oleg1963lora (2010-02-05 09:22) [20]Сделал как посоветовали.
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;
Все работает.Почему раньше не получалось - однако утро господа. Вчера у меня точно пробки повылетали:)
Спасибо всем за помощь и терпение.Тему можно закрыть.
← →
Сергей М. © (2010-02-05 09:24) [21]
> oleg1963lora (05.02.10 09:04) [19]
> Поясню на примере холодильника
Этим холодильником будешь пользоваться только ты или кто-то другой, кто не ведает о твоих программных выкрутасах в конструкторе со свойствами хомплектующих холодильника ?
← →
oleg1963lora (2010-02-05 11:00) [22]
> Этим холодильником будешь пользоваться только ты
Пока только я, но желание разобраться остается. У меня самокритика не ржавеет, сам понимаю, что мое "творение" далеко от совершенства. Я сам бы задушил такого программера как я, увидь я это со стороны, но как улучшить пока не знаю. Желание написать лучше не ржавеет!:)
← →
Медвежонок Пятачок © (2010-02-05 11:06) [23]но как улучшить пока не знаю
TCustomUpDown = class(TWinControl)
...
procedure Click(Button: TUDBtnType); reintroduce; dynamic;
...
Вместо TUPDown пишем класс TMyUPDown в котором переопределяем виртуальный Click
в переопределенном клик сначала вошкаемся с прогрессбаром, затем вызываем унаследованный клик.
или наоборот.
сначала вызываем, затем вошкаемся с прогрессбаром.
← →
oleg1963lora (2010-02-05 11:47) [24]
> Медвежонок Пятачок © (05.02.10 11:06) [23]
> procedure Click(Button: TUDBtnType); reintroduce; dynamic;
Понял, не дурак.Буду переделывать. Спасибо
← →
Сергей М. © (2010-02-05 11:52) [25]
> oleg1963lora (05.02.10 11:47) [24]
+ к Медвежонок Пятачок © (05.02.10 11:06) [23]
Либо TFrame, о котором говорили большевики в [15]
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2010.04.04;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.005 c