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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.03.2015, 12:04   #1
NEoMASTERR
Форумчанин
 
Аватар для NEoMASTERR
 
Регистрация: 22.12.2010
Сообщений: 175
По умолчанию TGraphicControl и сообщения

Здравствуйте, Мой компонент наследник от TGraphicControl активно принимал и обрабатывал сообщения мышки, пока я не вынес код в отдельный юнит. Почему перестал? Подскажите.
Здравствуйте
NEoMASTERR вне форума Ответить с цитированием
Старый 18.03.2015, 12:19   #2
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

код покажи
ZuBy вне форума Ответить с цитированием
Старый 18.03.2015, 12:20   #3
NEoMASTERR
Форумчанин
 
Аватар для NEoMASTERR
 
Регистрация: 22.12.2010
Сообщений: 175
По умолчанию

Цитата:
Сообщение от ZuBy Посмотреть сообщение
код покажи
Боюсь там очень много кода, суть в том что я в основном юните ничего не менял, лишь перенес в другой

Код:
unit Unit1;
///
procedure TForm1.FormCreate(Sender: TObject);
begin
  GL:=TMyGLEngine.create(form1);
  GL.Anchors:=[akLeft,akTop,akRight,akBottom];
  GL.Parent:=form1;
  //GL.BackgroundColor:=clBlack;
  GL.Left:=0;
  GL.top:=0;
  GL.Width:=form1.clientWidth;
  GL.Height:=Form1.clientHeight;
  GL.init;
  Form1.WindowState:=wsMaximized;
end;
Это из основного юнита, всё что там есть

Код:
unit MyGlStock;
interface
//
 TMyGLEngine = class(TGraphicControl)
    private
    /////////////////
    /////////////////
  protected
    procedure WndProc(var msg:TMessage);override;
    procedure wmlbuttondown(var message:twmmouse);message wm_lbuttondown;
    procedure wmldblclick(var message:TWMMouse);message WM_LBUTTONDBLCLK;
    procedure wmlbuttonup(var message:twmmouse);message wm_lbuttonup;
    procedure wmmousemove(var message:twmmousemove);message wm_mousemove;
    procedure cmmouseenter(var message:tmessage);message cm_mouseenter;
    procedure cmmouseleave(var message:tmessage);message cm_mouseleave;
    procedure wmEraseBkGnd(var Msg: TWMEraseBkGnd); message WM_ERASEBKGND;
Может потому что код в блоке protected?

P.S. Я конечно могу обрабатывать нажатия через GetAsyncKeyState но думаю лишняя нагрузка ни к чему, Передвижение мышки ловлю по CM_DOCKNOTIFICATION, Но всё же мне интересно что случилось)
Здравствуйте

Последний раз редактировалось NEoMASTERR; 18.03.2015 в 12:29.
NEoMASTERR вне форума Ответить с цитированием
Старый 18.03.2015, 12:28   #4
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

а разве нельзя было сделать
Код:
published
    property OnClick;
    property OnMouseDown;
    property OnMouseMove;
    property OnMouseUp;
    property OnMouseEnter;
    property OnMouseLeave;
и так далее?
ZuBy вне форума Ответить с цитированием
Старый 18.03.2015, 12:30   #5
NEoMASTERR
Форумчанин
 
Аватар для NEoMASTERR
 
Регистрация: 22.12.2010
Сообщений: 175
По умолчанию

Цитата:
Сообщение от ZuBy Посмотреть сообщение
а разве нельзя было сделать
Код:
published
    property OnClick;
    property OnMouseDown;
    property OnMouseMove;
    property OnMouseUp;
    property OnMouseEnter;
    property OnMouseLeave;
и так далее?
Код:
  published
    //property ObjectList:TMyGlObjectList;
    property BackgroundColor:tcolor read FBackgroundColor write FBackgroundColor default clBtnFace;
    {events}
    property onclick;
    property ondblclick;
    property onmousedown;
    property onmouseup;
    property Background : TBitmap read GetFon write SetFon;
    property onmouseenter:tnotifyevent read fonmouseenter write fonmouseenter;
    property onmouseleave:tnotifyevent read fonmouseleave write fonmouseleave;
   // property OnMouseMove:TOnMouseMove read FOnMouseMove write FOnMouseMove;
Это всё есть, суть в том что сообщения не получает компонент, хотя раньше получал.
Судя по описаниям в интернетах TGraphicControl вообще не может получать сообщения, как же он тогда вообще работал час назад?))
Здравствуйте

Последний раз редактировалось NEoMASTERR; 18.03.2015 в 12:33.
NEoMASTERR вне форума Ответить с цитированием
Старый 19.03.2015, 06:37   #6
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

Код:
   procedure cmmouseenter(var message:tmessage);message cm_mouseenter;
   procedure cmmouseleave(var message:tmessage);message cm_mouseleave;
эти сообщения он обрабатывает точно, а зачем отлавливать сообщения?
перекрывайте основные события компонента, я так делал

вот например
Код:
procedure TZMSMediaButton.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if not Enabled then
    exit;
  fState := mbsDown;
  Paint;
  inherited;
end;
ZuBy вне форума Ответить с цитированием
Старый 19.03.2015, 08:55   #7
NEoMASTERR
Форумчанин
 
Аватар для NEoMASTERR
 
Регистрация: 22.12.2010
Сообщений: 175
По умолчанию

Цитата:
Сообщение от ZuBy Посмотреть сообщение
Код:
   procedure cmmouseenter(var message:tmessage);message cm_mouseenter;
   procedure cmmouseleave(var message:tmessage);message cm_mouseleave;
эти сообщения он обрабатывает точно, а зачем отлавливать сообщения?
перекрывайте основные события компонента, я так делал
Дело в том что он перестал обрабатывать любые сообщения, даже WM_Paint и я не могу понять что с ним произошло, рисую я по таймеру так что это не критично, обрабатывается лишь CM_DOCKNOTIFICATION
Здравствуйте
NEoMASTERR вне форума Ответить с цитированием
Старый 19.03.2015, 09:02   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Выложи юнит с компонентом
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 19.03.2015, 09:06   #9
NEoMASTERR
Форумчанин
 
Аватар для NEoMASTERR
 
Регистрация: 22.12.2010
Сообщений: 175
По умолчанию

Всё нашёл ошибку, случайно закомментировал inherited

Код:
procedure TMyGLEngine.WndProc(var msg: TMessage);
begin
  inherited;
Здравствуйте
NEoMASTERR вне форума Ответить с цитированием
Старый 19.03.2015, 09:42   #10
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
в основном юните ничего не менял, лишь перенес в другой
Цитата:
случайно закомментировал inherited
тут явные происки полтергейста
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Класс TGraphicControl avd Общие вопросы Delphi 2 08.08.2014 12:07
Сообщения в vk Mrsqler Работа с сетью в Delphi 15 04.06.2012 11:08
Компонент график функции y=ax² в качестве исходного класса выбрать класс TGraphicControl Veterok0587 Фриланс 4 21.06.2010 16:18
Как повернуть изображение в TGraphicControl на 180 градусов? NeonSimfi Win Api 1 06.05.2009 21:20
Сообщения Serg12345678 Общие вопросы C/C++ 1 12.04.2008 14:07