От:
GvinPin
Дата: 02.06.06 10:43
Оценка:
Добрый день!
Долгое время писал на С++, а тут возникла необходимость писать на Делфи и сразу столкнулся с такой проблемой:
в общем у меня есть список с указателями на записи
type
sr = record
dateF : TDateTime;
count : integer;
... : ...
end;
var
psr : ^sr;
psr^.dateF := date;
List.Add(psr)
мне необходимо сделать сортировку списка по полю dateF, попытался сделать как в справке, но компилятор на меня ругается
function CompareSR(Item1, Item2: Pointer): Integer;
begin
Result := CompareDateTime(psr(Item1).dateF, psr(Item2).dateF);
end;
List.Sort(@CompareSR)
как я понимаю надо привести Item1 и Item2 к типу psr, но паскаль изучал 10 лет назад и как это сделать незнаю.
Подскажите пожалуйста, что я делаю не так?
Здравствуйте, GvinPin, Вы писали:
GP>type
GP> psr = ^sr;
GP> sr = record
GP> dateF : TDateTime;
GP> count : integer;
GP> ... : ...
GP> end ;
GP>// ...
GP>function CompareSR(Item1, Item2: Pointer): Integer;
GP>begin
GP> Result := CompareDateTime(psr(Item1)^ .dateF, psr(Item2)^ .dateF);
GP>end ;
GP>// ...
GP>List.Sort(@CompareSR)... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
It is always bad to give advices, but you will be never forgiven for a good one.
Oscar Wilde
Здравствуйте, GvinPin, Вы писали:
GP>в общем у меня есть список с указателями на записи
Лучше сразу сделайте объекты и подумайте, не использовать ли TObjectList. Сэкономите себе геморрой.
От:
GvinPin
Дата: 02.06.06 10:59
Оценка:
Здравствуйте, ekamaloff, Вы писали:
E>Здравствуйте, GvinPin, Вы писали:
E>GP>>type
GP>> psr = ^sr;
GP>> sr = record
GP>> dateF : TDateTime;
GP>> count : integer;
GP>> ... : ...
GP>> end ;
GP>>// ...
GP>>function CompareSR(Item1, Item2: Pointer): Integer;
GP>>begin
GP>> Result := CompareDateTime(psr(Item1)^ .dateF, psr(Item2)^ .dateF);
GP>>end ;
GP>>// ...
GP>>List.Sort(@CompareSR)
E>
пробовал, говорит invalid typecast!
От:
GvinPin
Дата: 02.06.06 11:02
Оценка:
Здравствуйте, Softwarer, Вы писали:
S>Здравствуйте, GvinPin, Вы писали:
GP>>в общем у меня есть список с указателями на записи
S>Лучше сразу сделайте объекты и подумайте, не использовать ли TObjectList. Сэкономите себе геморрой.
спасибо, наверное так и сделаю.
От:
Dimonka
Дата: 02.06.06 11:54
Оценка:
Здравствуйте, ekamaloff, Вы писали:
E>Здравствуйте, GvinPin, Вы писали:
E>GP>>type
GP>> psr = ^sr;
GP>> sr = record
GP>> dateF : TDateTime;
GP>> count : integer;
GP>> ... : ...
GP>> end ;
// Может так?
function CompareSR(Item1, Item2: Pointer): Integer;
var
I1: psr absolute Item1;
I2: psr absolute Item2;
begin
Result := CompareDateTime(I1 .dateF, I2 .dateF);
end ;
GP>>// ...
GP>>List.Sort(@CompareSR)
E>
Здравствуйте, Dimonka, Вы писали:
D>// Может так?
Не знаю, то что я привел изначально у меня в Delphi5 компилится. Вот полностью компилирующийся (но семантически неправильный) пример:
program Project1;
{$APPTYPE CONSOLE}
uses Classes;
type
psr = ^sr;
sr = record
dateF : TDateTime;
count : integer;
//... : ...
end ;
// ...
function CompareSR(Item1, Item2: Pointer): Integer;
begin
Result := Trunc(psr(Item1)^.dateF - psr(Item2)^.dateF);
end ;
// ...
var
List: TList;
begin
List.Sort(@CompareSR);
end .... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
It is always bad to give advices, but you will be never forgiven for a good one.
Oscar Wilde
От:
GvinPin
Дата: 02.06.06 13:31
Оценка:
Здравствуйте, Dimonka, Вы писали:
D>Здравствуйте, ekamaloff, Вы писали:
E>>Здравствуйте, GvinPin, Вы писали:
E>>GP>>>type
GP>>> psr = ^sr;
GP>>> sr = record
GP>>> dateF : TDateTime;
GP>>> count : integer;
GP>>> ... : ...
GP>>> end ;
D>// Может так?
D>function CompareSR(Item1, Item2: Pointer): Integer;
D>var
D> I1: psr absolute Item1;
D> I2: psr absolute Item2;
D>begin
D> Result := CompareDateTime(I1 .dateF, I2 .dateF);
D>end ;
GP>>>// ...
GP>>>List.Sort(@CompareSR)
E>>
Спасибо за идею
но заработало тока вот так:
I1: ^psr absolute Item1;
I2: ^psr absolute Item2;
От:
Dimonka
Дата: 02.06.06 14:00
Оценка:
Здравствуйте, GvinPin, Вы писали:
GP>Спасибо за идею но заработало тока вот так:
GP> I1: ^psr absolute Item1;
GP> I2: ^psr absolute Item2;
ну оч. странно
От:
Аноним
Дата: 02.06.06 14:23
Оценка:
GP>пробовал, говорит invalid typecast!
Delphi какая ? Win32 или .Net ?
Настройки компилятора какие (Ctrl+o, o в редакторе) ?
странно это... Не должно такого быть.
Боюсь, что если typecast инвалид, то и абсолют может просто бессымсленно наплодить багов.
Пока на собственное сообщение не было ответов, его можно удалить.
Удалить