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

Вниз

Сравнить record ы   Найти похожие ветки 

 
Vovan#1   (2006-09-01 23:55) [0]

[code]
type
 TMyRecord = record
  a, b, c: Integer;
 end;

var
Rec1, Rec2: TMyRecord;

begin
 with Rec1 do
  begin
   a := 0;
   b := 0;
   c := 0;
  end;
 with Rec2 do
  begin
   a := 1;
   b := 1;
   c := 1;
  end;
 if (Rec1 = Rec2) then ShowMessage("Equal")
  else ShowMessage("Different");
[/code]

= [Error] ????.pas(49): E2015 Operator not applicable to this operand type

Why? :(


 
Zeqfreed ©   (2006-09-01 23:58) [1]

Life"s unfair. Use per-field comparison or CompareMem function.


 
Vovan#1   (2006-09-02 00:06) [2]

Так Delphi нужно уволить.


 
default ©   (2006-09-02 00:06) [3]

вот бы тебе сюда перегрузку операторов и зажил бы по-человечески:)...


 
Palladin ©   (2006-09-02 00:08) [4]

а если говорить доступным для конференции языком :)
If CompareMem(@rec1,@rec2,SizeOf(tmyrecord)) then

при условии a,b,c integer, бо чуть отличись от integer эти три элемента и packed not used придется писать функцию почленного сравнения записи...


 
Vovan#1   (2006-09-02 00:21) [5]

>If CompareMem(@rec1,@rec2,SizeOf(tmyrecord)) then

Но ведь это +SysUtils = +400 Kb.
Буду по полям.


 
Palladin ©   (2006-09-02 00:28) [6]


> Но ведь это +SysUtils = +400 Kb.

:))) ты откуда упал?

ой... это же "начинащим"

ну раз: 400кб это модуль с исходниками... а они как известно, даже не начинающему, в полном исходном размере ну ни как не могул линковаться к исполняемому модулю

ну два: традиция смарт юнит линк сохраняется в продуктах borland, относимых к семейству Pascal/Delphi и по сей день, что значит: сколько ты из модуля используешься столько и прилинкуется, ни на байт больше...

ну три: просто так... для четности...


 
Vovan#1   (2006-09-02 00:32) [7]

Да, я хотел уже писать, что переборщил с +400 кб, но ничего... ничего....

Вы, конечно же, догадались, что за мнемоническими TMyRecord стоял TRGBQuad (да, пусть полей больше - но это была проверка). Почему не посоветовали такое?:

[code]
var
 a: TRGBQuad;
 b: TRGBQuad;
 c: TColor;
begin
 a.rgbBlue := 0;
 a.rgbGreen := 128;
 a.rgbRed := 128;
 a.rgbReserved := 0;

 b.rgbBlue := 0;
 b.rgbGreen := 128;
 b.rgbRed := 128;
 b.rgbReserved := 0;

 If Integer(a) = Integer(b) then
  ...
[/code]


 
Anatoly Podgoretsky ©   (2006-09-02 00:37) [8]

Vovan#1   (02.09.06 00:32) [7]
Потому что у тебя не TRGBQuad, а запись из целых.


 
Anatoly Podgoretsky ©   (2006-09-02 00:38) [9]

Это мы телепатить не умеем, а читаем хорошо.


 
Vovan#1   (2006-09-02 00:38) [10]

TRGBQuad <> запись из целых???


 
Vovan#1   (2006-09-02 00:39) [11]

>Это мы телепатить не умеем, а читаем хорошо.

Посоветовали бы добавить в запись целое и тайпкастить?


 
Vovan#1   (2006-09-02 00:41) [12]

>Это мы телепатить не умеем, а читаем хорошо.

Ах да, я читаю плохо. Понял ошибку. Действительно, тут не протелепатишь. Всё, забыли. Главное - разобрались с делом. Всё, я программить... Всем спасибо.


 
Palladin ©   (2006-09-02 00:44) [13]


> TRGBQuad <> запись из целых???

никому не известно из чего состоит TRGBQuad, но большинству известно, что запись (и любая единица) в Delphi будет пытаться 32битным компилятором выровнятся по именно этим 32ум битам...



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

Текущий архив: 2006.09.24;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.039 c
15-1157376145
cmd
2006-09-04 17:22
2006.09.24
cmd


15-1157386489
Вти
2006-09-04 20:14
2006.09.24
Image1


1-1155124059
Alkid
2006-08-09 15:47
2006.09.24
Компиляция проекта из командной строки


4-1148473179
Chaser
2006-05-24 16:19
2006.09.24
Заголовок окна


15-1157015686
TGX
2006-08-31 13:14
2006.09.24
PHP скрипт виснет!