Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.02.10;
Скачать: [xml.tar.bz2];

Вниз

Как мне написать процедуру Move для разных типов?   Найти похожие ветки 

 
Erik   (2004-01-29 17:41) [0]

Чтото вроде этого:
procedure MoveEx(const P1, P2: Pointer; Index: Integer);
begin
Move(P1^[i], P2^, SizeOf(P2^));
//Понятно, что SizeOf(P2^) вернет неправельное значение.
Inc(i, SizeOf(P2^));
end;

Вобщето мой вариант выглядит так:
Var
RecSize, ArraySize: Word;
i: Integer;
PData: PByteArray;
..
Move(PData^[i], RecSize, SizeOf(RecSize));
Inc(i, SizeOf(RecSize));


 
Sandman25   (2004-01-29 17:45) [1]

Чем не устраивает обычный Move?


 
MBo   (2004-01-29 17:46) [2]

поясни, что именно тебе требуется


 
Digitman   (2004-01-29 17:49) [3]


> Erik © (29.01.04 17:41)


что-то ты загнул ..

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


 
Erik   (2004-01-29 17:50) [4]

Это блок повторяется 10 раз, но морут быть разные типы данных!
Move(PData^[i], RecSize, SizeOf(RecSize));
Inc(i, SizeOf(RecSize));
Помоему естествено желаение заменить его одной процедурой.


 
Sandman25   (2004-01-29 17:52) [5]

[4] Erik © (29.01.04 17:50)

Точнее, 10 вызовами
MoveEx(PData, i, RecSize, SizeOf(RecSize))???


 
Sandman25   (2004-01-29 17:54) [6]

Кстати, если копируемые данные находились "рядом" и копируются в такой же блок, то их можно скопировать одним Move.


 
Erik   (2004-01-29 17:55) [7]

Ладно вот полный текст.
procedure DataToVariant1(Const Params: PRTKParams; Var VData: OleVariant);
Var
RecSize, ArraySize: Word;
PData: PByteArray;
i, SizeMem, ArrByteSize, SizeStn: Integer;
begin
RecSize := SizeOf(Params^);
SizeMem := Sizeof(RecSize);

ArrByteSize := GetByteSizeArr(@Params.TeenID, ArraySize);
SizeMem := SizeMem + ArrByteSize;
SizeStn := RecSize-SizeOf(Params^.TeenID);
SizeMem := SizeMem + SizeStn;

VData := VarArrayCreate([0, SizeMem],varByte);
PData := VarArrayLock(VData);
try
i := 0;
Move(RecSize, PData^[i], SizeOf(RecSize));
i := SizeOf(RecSize);
Move(SizeArray, PData^[i], SizeOf(SizeArray));
Inc(i, SizeOf(SizeArray));
Move(Params.TeenID[0], PData^[i], ArrByteSize);
Inc(i, ArrByteSize);
Move(Params^, PData^[i], SizeStn);
Inc(i, SizeStn);
finally
VarArrayUnLock(VData);
end;
end;


 
Digitman   (2004-01-29 17:55) [8]

кривой дорогой идете, товарисч)..

но если упрям, то м.б. поможет это :

function TypeInfo(TypeIdent): Pointer; (смотрим хэлп)


 
Erik   (2004-01-29 17:59) [9]

Какие не есть, зато мои! Быстрее идти дорогой которую знаш :)



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.02.10;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.007 c
14-29595
syte_ser78
2004-01-19 14:41
2004.02.10
Окна и менюшки в ВР7


1-29325
SeriousSam
2004-01-29 20:27
2004.02.10
и еще глупый вопрос: где label?


9-29181
Номолос
2003-07-26 09:24
2004.02.10
DelphiX в Delphi 7.


1-29308
nv_
2004-01-30 11:10
2004.02.10
ToolBar и его батоны


1-29465
Yuri Btr
2004-01-30 10:17
2004.02.10
Плавный скроллинг в StringGrid





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский