![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сравнить 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.