![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Пара новых багов
Vadim Petrov © (2003-05-16 13:07:00)Вот нашел сегодня пару багов в KOL
1. Глючит Str2DateTimeFmt
При попытке вызова типа
=Str2DateTimeFmt("HH:mm:ss","12:20:00");
Как оказалось, причина в функции SystemTime2DateTime, пришлось поменять
if (wYear >= 1) and (wYear <= 9999) and (wMonth >= 1) and (wMonth <= 12) and
(wDay >= 1) and (wDay <= DayTable^[wMonth]) and
(wHour < 24) and (wMinute < 60) and (wSecond < 60) and (wMilliSeconds < 1000) then
на
if (wYear >= 0) and (wYear <= 9999) and (wMonth >= 0) and (wMonth <= 12) and
(wDay >= 0) and (wDay <= DayTable^[wMonth]) and
( wHour < 24)
Вот нашел сегодня пару багов в KOL
1. Глючит Str2DateTimeFmt
При попытке вызова типа
=Str2DateTimeFmt("HH:mm:ss","12:20:00");
Как оказалось, причина в функции SystemTime2DateTime, пришлось поменять
if (wYear >= 1) and (wYear <= 9999) and (wMonth >= 1) and (wMonth <= 12) and
(wDay >= 1) and (wDay <= DayTable^[wMonth]) and
(wHour < 24) and (wMinute < 60) and (wSecond < 60) and (wMilliSeconds < 1000) then
на
if (wYear >= 0) and (wYear <= 9999) and (wMonth >= 0) and (wMonth <= 12) and
(wDay >= 0) and (wDay <= DayTable^[wMonth]) and
(wHour < 24) and (wMinute < 60) and (wSecond < 60) and (wMilliSeconds < 1000) then
Плюс, после строки
I := wYear - 1;
добавил
if I<0 then i := 0;
2. Соответственно, сформированный таким образом DateTime неправильно отображался функцией DateTime2StrShort.
По аналогии с Time2StrFmt, первой строчкой добавил
if D < 1 then D := D + 1;
BaRToV (2003-05-18 16:54:00) [1]
2 Кладов (18.05.03 16:20)
> А еще что?
Ушло почтой...
Кладов (2003-05-18 16:20:00) [2]
> if TObj <> nil then
>
А еще что?
BaRToV (2003-05-18 11:26:00) [3]Ну тгода при удалении должна проверка стоять!!!
А то ошибка вывыливается...
{$ELSE} //Pascal
procedure TObj.Final;
var I: Integer;
Proc: TObjectMethod;
begin
if Assigned( fOnDestroy ) then
begin
fOnDestroy( @Self );
fOnDestroy := nil;
end;
if fAutoFree <> nil then
begin
for I := 0 to fAutoFree.Count div 2 - 1 do
begin
if TObj <> nil then
begin
TMethod( Proc ).Code := fAutoFree.fItems[ I * 2 ];
TMethod( Proc ).Data := fAutoFree.fItems[ I * 2 + 1 ];
Proc;
end;
end;
( fAutoFree.fItems[ I ]) [3]Ну тгода при удалении должна проверка стоять!!!
А то ошибка вывыливается...
{$ELSE} //Pascal
procedure TObj.Final;
var I: Integer;
Proc: TObjectMethod;
begin
if Assigned( fOnDestroy ) then
begin
fOnDestroy( @Self );
fOnDestroy := nil;
end;
if fAutoFree <> nil then
begin
for I := 0 to fAutoFree.Count div 2 - 1 do
begin
if TObj <> nil then
begin
TMethod( Proc ).Code := fAutoFree.fItems[ I * 2 ];
TMethod( Proc ).Data := fAutoFree.fItems[ I * 2 + 1 ];
Proc;
end;
end;
//PObj( fAutoFree.fItems[ I ] ).Free;
fAutoFree.Free;
fAutoFree := nil;
end;
end;
{$ENDIF}
Кладов (2003-05-18 08:50:00) [4]
> Когда мы используем Add2AutoFree(xxx), и вызвали TObj.Free
> - чтоб ИЗ СПИСКА fAutoFree удалялся наш объект!!!
Откуда Free должен узнать, из какого именно списка AutoFree должен удаляться объект?
BaRToV (2003-05-18 02:18:00) [5]procedure TObj.Add2AutoFree(Obj: PObj);
begin
if fAutoFree = nil then
( 0, Obj) [1]procedure TObj.Add2AutoFree(Obj: PObj);
begin
if fAutoFree = nil then
fAutoFree := NewList;
fAutoFree.Insert( 0, Obj );
fAutoFree.Insert( 0, Pointer( @TObj.Free ) );
end;
Хотелось бы добавить в TObj.Free:
Когда мы используем Add2AutoFree(xxx), и вызвали TObj.Free - чтоб ИЗ СПИСКА fAutoFreeудалялся наш объект!!!