Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.06.14;
Скачать: CL | DM;

Вниз

Приведение типов   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.036 c
1-1117525901
Layner
2005-05-31 11:51
2005.06.14
Здравствуйте, подскажите плз, как программно установить ListView


14-1117004684
Arkady
2005-05-25 11:04
2005.06.14
Как зарегистрироваться на www.borland.com?


1-1117423021
FANAT
2005-05-30 07:17
2005.06.14
Количество строк


14-1116755818
Igorek
2005-05-22 13:56
2005.06.14
Воскресный флэшовый квест :8-)


1-1117122507
Avals-Z
2005-05-26 19:48
2005.06.14
Подскажите кто знает