Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.05.09;
Скачать: CL | DM;

Вниз

Разработчики Delphi схалтурили   Найти похожие ветки 

 
Lord BDV   (2002-04-24 19:51) [0]

Товарищи... Уважаемые товарищи программисты!
Похоже, разработчики Delphi или схалтурили, или еще что-то случилось, НО, оказывается, компонент TAnimate не имеет стандартного для почти всех компонент Delphi обработчика события OnClick. А жаль, очень нужно.
Поэтому прошу Вас придумать способ "отловить" щелчек мышкой по этому компоненту.
Интересно будет узнать, какие пути решения этой проблемы предложите Вы.

Пока я вижу единственный вариант выкрутиться: в WinAPI наверняка должна быть функция, фиксирующая состояние мыши: ее абсолютные координаты (относительно экрана), и состояние нажатости правой и левой кнопок мыши. Может быть, использовать эту функцию.
Но какая процедура в Delphi реализует вышеуказанные возможности, я не знаю. Прошу, подскажите и это!


 
Дремучий ©   (2002-04-24 20:46) [1]

пишешь свой класс-наследник TAnimate и в нем определяешь onClick событие в разделе published


 
Дремучий ©   (2002-04-24 20:48) [2]

это вообщем не халтура, просто посчитали ненужным,
и соглашусь с тобой, что в этом они не правы....


 
Lord BDV   (2002-04-24 21:40) [3]

В ответ на первый комментарий - а можно без написания нового класса?

Ответ на второй комментарий - и как Вы думаете эту проблему можно решить.

Всех прошу обратить внимание на вторую часть вопроса - а именно - подскажите, какая функция API выдает состояние мышки.


 
Doom ©   (2002-04-24 21:42) [4]

WM_GetMouseState???


 
Suntechnic ©   (2002-04-24 21:48) [5]

Конечно лучше всего отнаследоваться и сделать всё по человечески, но если тебе нужно одноразовое решение, то могу предложить следующее. Пишешь свою оконную процедуру. Берёшь адрес существующей (GetWindowLong), сохраняешь этот адрес. Затем подменяешь процедуру окна компонента своей (SetWindowLong), в котрой вызываешь родную по заранее сохранённому адресу. Итог: ты имеешь оконную процедуру куда валятся все сообщения, и в том числе о кликах мыши.


 
Lord BDV   (2002-04-25 10:33) [6]

Прошу прощения за неосведомленность в этой области программирования, но не могли бы Вы набросать примерный код и поподробнее разъяснить, как с ним работать.

Например, в юните формы, на которой лежит TAnimate, я написал процедуру:

Procedure AnmClickAction;
begin
...
end;


Так каким образом конкретно "пришить" эту процедуру к TAnimate на форме, чтобы она выполнялась каждый раз, когда пользователь тыкает в TAnimate?


 
AlexSV   (2002-04-25 11:05) [7]

Вообщем согласен с Дремучий ©, но предлагаю, как вариант не писать свой класс-наследник, а просто вывести OnClick в область
public.

Лучше примером:
-- интерфейсная часть (ничего нового)

type
TForm1 = class(TForm)
Animate1: TAnimate;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
// объявляем процедуру, которую повесим на Click
procedure AnimateClick(Sender: TObject);
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

// объявляем тип, для перевода Click в public
type
TClickAnimate = class(TAnimate)
public
property OnClick;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
// Надеюсь объяснять не надо - привязали Click
TClickAnimate(Animate1).OnClick := AnimateClick;
end;

// Собственно сам Click
procedure TForm1.AnimateClick(Sender: TObject);
begin
ShowMessage("Animate clicked!");
end;



Страницы: 1 вся ветка

Текущий архив: 2002.05.09;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.008 c
6-26203
Lider
2002-02-22 01:54
2002.05.09
Проксяк


1-26078
Невидимка
2002-04-26 13:03
2002.05.09
Вывод диалога и сохранение файла...


1-26184
MPro
2002-04-25 15:31
2002.05.09
comboboxex глючит?


14-26233
Morfey
2002-03-31 14:29
2002.05.09
Кто нибкдь знает как пользоваться компонентом tmagras


3-26007
Chepura Sergey
2002-04-15 17:42
2002.05.09
Поиск в таблицах Intrbase