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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.04.2014, 16:36   #1
Viburn
 
Регистрация: 05.04.2014
Сообщений: 8
По умолчанию Invalid message parameter list

При покидании курсора некоторого прямоугольника должен изменяться параметр его рамки.

Код:
procedure CMMouseLeave(var msg: TMessage; Sender: TObject); message CM_MOUSELEAVE;
...
procedure TForm1.CMMouseLeave(var msg: TMessage; Sender: TObject);
begin
inherited;
(Sender as TShape).Pen.Width:=1;
(Sender as TShape).Pen.Color:=clRed;
end;
при компиляции еррор Invalid message parameter list.
Viburn вне форума Ответить с цитированием
Старый 05.04.2014, 17:04   #2
ReportCube
Форумчанин
 
Аватар для ReportCube
 
Регистрация: 11.03.2011
Сообщений: 426
По умолчанию

А Вы посмотрите в исходниках правильное количество параметров в методе обработчика CM_MOUSELEAVE - там нет Sender: TObject и никогда не было.
ReportCube вне форума Ответить с цитированием
Старый 05.04.2014, 17:17   #3
Viburn
 
Регистрация: 05.04.2014
Сообщений: 8
По умолчанию

Цитата:
Сообщение от ReportCube Посмотреть сообщение
А Вы посмотрите в исходниках правильное количество параметров в методе обработчика CM_MOUSELEAVE - там нет Sender: TObject и никогда не было.
Хорошо. Но неужели мне придётся писать к каждому из 25 шейпов процедуру покидания курсора отдельно?
Viburn вне форума Ответить с цитированием
Старый 05.04.2014, 17:27   #4
ReportCube
Форумчанин
 
Аватар для ReportCube
 
Регистрация: 11.03.2011
Сообщений: 426
По умолчанию

У каждого из компонентов TShape есть событие OnMouseLeave, для которого назначаете один общий обработчик. Вот там имеется Sender: TObject, к которому и следует обращаться
ReportCube вне форума Ответить с цитированием
Старый 05.04.2014, 17:28   #5
Viburn
 
Регистрация: 05.04.2014
Сообщений: 8
По умолчанию

Цитата:
Сообщение от ReportCube Посмотреть сообщение
У каждого из компонентов TShape есть событие OnMouseLeave, для которого назначаете один общий обработчик. Вот там имеется Sender: TObject, к которому и следует обращаться
У меня D7 и там нету
Viburn вне форума Ответить с цитированием
Старый 05.04.2014, 17:52   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
procedure CMMouseLeave(var msg: TMessage; Sender: TObject); message CM_MOUSELEAVE;
Убери второй параметр. В обработчиках такого типа должен быть только один параметр: http://www.programmersforum.ru/showthread.php?t=92777
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.04.2014, 02:11   #7
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,872
По умолчанию

Цитата:
Сообщение от Viburn Посмотреть сообщение
Хорошо. Но неужели мне придётся писать к каждому из 25 шейпов процедуру покидания курсора отдельно?
Проще перейти на более старшую версию Дельфи.

P.S. Хотя вопрос обработки сообщений CM_MOUSEENTER/CM_MMOUSELEAVE в Д7 до сих пор открыт. Вроде и есть средне-неплохое решение, только проверять его некому.
northener вне форума Ответить с цитированием
Старый 06.04.2014, 10:55   #8
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

как это обычно и делается, дописать самому в аналогично-измененный компонент, допустим TShapeEx

Код:
  protected
    procedure MouseExit(var Msg: TMessage); message CM_MOUSELEAVE;
    procedure MouseEnter(var Msg: TMessage); message CM_MOUSEENTER;
...

Код:
property OnExit: TNotifyEvent read FOnExit write FOnExit;
    property OnEnter: TNotifyEvent read FOnEnter write FOnEnter;
...
Код:
procedure TPaintEx.MouseEnter(var Msg: TMessage);
begin
  inherited;
  if Assigned(FOnEnter) then FOnEnter(Self);
end;

procedure TPaintEx.MouseExit(var Msg: TMessage);
begin
  inherited;
  if Assigned(FOnExit) then FOnExit(Self);
end;
ZuBy вне форума Ответить с цитированием
Старый 06.04.2014, 11:06   #9
ReportCube
Форумчанин
 
Аватар для ReportCube
 
Регистрация: 11.03.2011
Сообщений: 426
По умолчанию

Тогда уж проще использовать "шаманский метод Geo", сам постоянно пользуюсь
ReportCube вне форума Ответить с цитированием
Старый 06.04.2014, 11:37   #10
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Для Image на днях этот пресловутый geo показывал, для shape можно аналогично
http://www.programmersforum.ru/showp...3&postcount=23
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
The message resource is present but the message is not found in the string/message table Apokal Win Api 0 19.05.2011 18:06
project raised exception class estringlisterror with message list index out of bounds obsession Общие вопросы Delphi 23 09.05.2011 01:31
EStringListError with message 'List index out of bounds (644)' после удаления дубликатов dzds Помощь студентам 2 25.03.2011 09:39
ошибка raized exception class EListError with message 'List index out of bounds(1)'.Process stopped SGRaptor Софт 0 22.05.2010 19:12
raised exception class EIdSocketError with message' Socket Error # 10022 Invalid argument eldar Работа с сетью в Delphi 16 08.08.2008 23:49