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

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

Сравнить record'ы


Vovan#1 ©   (2006-09-01 23:55:00) 

[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? :(


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


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

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


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

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

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


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

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

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


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

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


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

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


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

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


Vovan#1   (2006-09-02 00:32:00) [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]


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


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

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

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

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

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

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


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

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

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


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

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

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


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

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


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

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


Zeqfreed   (2006-09-01 23:58:00) [13]

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


Наверх

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