Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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;

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

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


 
Сергей М. ©   (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
15-1263644504
AlexDan
2010-01-16 15:21
2010.04.04
dll библиотеки и линукс..


15-1263435454
brother
2010-01-14 05:17
2010.04.04
Уникальность окна


15-1263250575
Германн
2010-01-12 01:56
2010.04.04
ShowModal или где?


2-1265174868
Ulugbek
2010-02-03 08:27
2010.04.04
Как изменять программно Caption MainMenuItems внутри Toolbar


2-1264921818
cyber-pilot
2010-01-31 10:10
2010.04.04
Указатель на массив





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский