Форум: "Основная";
Текущий архив: 2002.05.09;
Скачать: [xml.tar.bz2];
ВнизРазработчики 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.006 c