Форум: "Основная";
Текущий архив: 2005.06.14;
Скачать: [xml.tar.bz2];
ВнизПриведение типов Найти похожие ветки
← →
P.N.P. © (2005-05-23 12:29) [0]Что-то я уже совсем запутался...
Разбираю старый проект, там есть процедура обработки сообщений,
так вот, на это
{Msg:TMsg; Pnt:TPoint;}
Pnt:=TPoint(Msg.lParam);
Delphi7 ругается "Invalid typecast"
Как тогда можно lparam в TPoint преобразовать?
← →
Ega23 © (2005-05-23 12:44) [1]
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;
?
← →
P.N.P. © (2005-05-23 12:50) [2]Уже разобрался :)
← →
AbrosimovA (2005-05-23 12:54) [3]Никак.
Ведь
type TPoint = packedrecord
X: Longint;
Y: Longint;
end;
a
TMsg.lParam: integer;
Ты можешь только:
Pnt:=Point(Msg.lParam,0)
или
Pnt.X:=Msg.lParam
← →
Newbie (2005-05-24 12:04) [4]А не подскажет ли кто, каким образом вообще работало раньше это приведение? Ведь размерность типов-то не совпадает...
{Msg:TMsg; Pnt:TPoint;}
Pnt:=TPoint(Msg.lParam);
И до какой версии Delphi это было возможно?
(Тоже есть старый проект с аналогичными участками кода.)
← →
Newbie (2005-05-24 17:01) [5]неужели никто не подскажет? Действительно, очень интересно узнать как ЭТО работало раньше?
← →
Yanis © (2005-05-24 17:09) [6]var
Msg:TMsg;
Pnt:Pointer;
begin
Pnt:=Pointer(Msg.lParam);
Может что то типа того было?
← →
Newbie (2005-05-24 17:28) [7]Yanis
Не-а. Именно аналогично коду в первом посте.
Вот конкретно у меня имеющийся кусок кода. Судя по всему, когда-то он был рабочим...
type MyRec = record
lo: cardinal;
hi: cardinal;
end;
var
MyRes: integer;
MyTemp: int64;
begin
...
MyRes:= MyRec(MyTemp).hi;
← →
begin...end © (2005-05-24 17:34) [8]> Newbie (24.05.05 17:28) [7]
> Вот конкретно у меня имеющийся кусок кода. Судя по всему,
> когда-то он был рабочим...
Этот код остался рабочим и сейчас.
← →
Yanis © (2005-05-24 17:35) [9]
> Именно аналогично коду в первом посте.
Там вообще объявление в коментариях. Так и надо?
← →
Newbie (2005-05-24 17:45) [10]begin...end
Мда. Напутал я с последним кодом. Прошу прощения.
Получается этомуPnt:=TPoint(Msg.lParam);
кроме как ошибка, объяснения нет?
← →
P.N.P. © (2005-05-24 18:42) [11]Я сделал
Pnt:=TPoint(Pointer(Msg.lParam)^);
То, что объявление в коментах - так это чтоб пояснить, что к чему.
А код совсем старый, еще 1995 года.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.06.14;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.06 c