Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Приведение типов [D7]


P.N.P. ©   (2005-05-23 12:29:00) 

Что-то я уже совсем запутался...
Разбираю старый проект, там есть процедура обработки сообщений,
так вот, на это

{Msg:TMsg; Pnt:TPoint;}
Pnt:=TPoint(Msg.lParam);

Delphi7 ругается "Invalid typecast"
Как тогда можно lparam в TPoint преобразовать?


P.N.P.   (2005-05-24 18:42:00) [1]

Я сделал
Pnt:=TPoint(Pointer(Msg.lParam)^);
То, что объявление в коментах - так это чтоб пояснить, что к чему.
А код совсем старый, еще 1995 года.


Newbie   (2005-05-24 17:45:00) [2]

begin...end
Мда. Напутал я с последним кодом. Прошу прощения.
Получается этому
Pnt:=TPoint(Msg.lParam);
кроме как ошибка, объяснения нет?


Yanis   (2005-05-24 17:35:00) [3]


> Именно аналогично коду в первом посте.

Там вообще объявление в коментариях. Так и надо?


begin...end   (2005-05-24 17:34:00) [4]

> Newbie   (24.05.05 17:28) [7]

> Вот конкретно у меня имеющийся кусок кода. Судя по всему,
> когда-то он был рабочим...

Этот код остался рабочим и сейчас.


Newbie   (2005-05-24 17:28:00) [5]

Yanis
Не-а. Именно аналогично коду в первом посте.
Вот конкретно у меня имеющийся кусок кода. Судя по всему, когда-то он был рабочим...

type MyRec = record
 lo: cardinal;
 hi: cardinal;
end;

var
 MyRes: integer;
 MyTemp: int64;
 
begin
 ...
 MyRes:= MyRec(MyTemp).hi;


Yanis   (2005-05-24 17:09:00) [6]

var
 Msg:TMsg;
 Pnt:Pointer;
begin
 Pnt:=Pointer(Msg.lParam);

Может что то типа того было?


Newbie   (2005-05-24 17:01:00) [7]

неужели никто не подскажет? Действительно, очень интересно узнать как ЭТО работало раньше?


Newbie   (2005-05-24 12:04:00) [8]

А не подскажет ли кто, каким образом вообще работало раньше это приведение? Ведь размерность типов-то не совпадает...

{Msg:TMsg; Pnt:TPoint;}
Pnt:=TPoint(Msg.lParam);

И до какой версии Delphi это было возможно?

(Тоже есть старый проект с аналогичными участками кода.)


AbrosimovA   (2005-05-23 12:54:00) [9]

Никак.
Ведь
 type TPoint = packedrecord
  X: Longint;
  Y: Longint;
 end;

a
TMsg.lParam: integer;

Ты можешь только:

Pnt:=Point(Msg.lParam,0)
или
Pnt.X:=Msg.lParam


P.N.P.   (2005-05-23 12:50:00) [10]

Уже разобрался :)


Ega23   (2005-05-23 12:44:00) [11]


Unit
Windows

type TPoint = record
 X: Longint;
 Y: Longint;
end;

unit Messages

 PMessage = ^TMessage;
 TMessage = packed record
   Msg: Cardinal;
   case Integer of
     0: (
       WParam: Longint;
       LParam: Longint;
       Result: Longint);
     1: (
       WParamLo: Word;
       WParamHi: Word;
       LParamLo: Word;
       LParamHi: Word;
       ResultLo: Word;
       ResultHi: Word);
 end;



?


Наверх

Титульная страница Поиск, карта сайта Написать письмо