Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.11.2008, 07:25   #1
joker
Форумчанин
 
Регистрация: 23.09.2007
Сообщений: 147
По умолчанию Косяки с правой кнопкой мыши

Ситуация такая. Есть форма, на форме ScrollBox, на ней лежит Image.
Image не совпадает по размерам со ScrollBox. Проект типа Paint на ООП (c классами инструментов в отдельном модуле).
Проблема в том, что если выйти за область имейджа с зажатой правой кнопкой мыши и отпустить - дельфа не словит событие (вообще не вызывается обработчик). Проверял на 7-ой и на 2006-ой, с левой кнопкой все в порядке. Как сделать так, чтоб события правой кнопки мыши стала нормально обрабатываться.
Я пытался с помощью SetCapture, но у Image, равно как и PaintBox нет хендла, поскольку TGraphicControl потомок TControl. А в случае c использование в качестве параметра SetCapture хендла скроллбокс или формы, все жутко тормозит и виснет.
Я надеваю тапочки, ищу чем похмелиться, ах, если я сейчас умру, то на... я родился
joker вне форума Ответить с цитированием
Старый 09.11.2008, 09:24   #2
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

У TImage есть свойство MouseCapture, только оно protected

Код:
type
   TMyImage = class(TImage)
   end;

procedure TForm6.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
   TMyImage(Image1).MouseCapture := true;
end;

procedure TForm6.Image1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
   TMyImage(Image1).MouseCapture := false;
end;
alexBlack вне форума Ответить с цитированием
Старый 11.11.2008, 10:54   #3
joker
Форумчанин
 
Регистрация: 23.09.2007
Сообщений: 147
По умолчанию

Спасибо, работает. Вот только вопрос, почему при приведении к введенному классу, ничем не отличающимся от предка, становится доступным protected свойство?
Я надеваю тапочки, ищу чем похмелиться, ах, если я сейчас умру, то на... я родился
joker вне форума Ответить с цитированием
Старый 11.11.2008, 17:26   #4
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Из help'а:
A protected member is visible anywhere in the module where its class is declared and from any descendant class, regardless of the module where the descendant class appears.
Somebody вне форума Ответить с цитированием
Старый 12.11.2008, 13:25   #5
joker
Форумчанин
 
Регистрация: 23.09.2007
Сообщений: 147
По умолчанию

Забавно, про то, что в модуле, где будет перегружен класс будут видны его protected св-ва не знал, я думал, если класс перегружен в другом модуле, то там уже вне класса нельзя обратиться к protected св-ву.
Я надеваю тапочки, ищу чем похмелиться, ах, если я сейчас умру, то на... я родился
joker вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
PopupMenu левой кнопкой мыши Pinya Компоненты Delphi 3 22.08.2008 19:23
Работа с программируемой кнопкой мыши DShiller Общие вопросы Delphi 6 23.04.2008 12:23
PopupMenu должно появляться только при нажатии на значок в трее правой кнопкой AidarBik Win Api 14 08.03.2008 23:51
Как работать с правой кнопкой мыши? ZeRRon Помощь студентам 4 28.12.2007 18:45
MouseDown: обращение к правой кнопке мыши ZhekON Общие вопросы Delphi 2 11.05.2007 19:17