![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Версия 2.87
MTsv DN © (2008-03-25 09:14:00)
Новости от 21марта 2008 (KOL & MCK v2.87)
[+] Добавлены функции NextPowerOf2, ToRadix, FromRadiStr,
InsertSeparators, Str2File.
[*] UNICODE_CTRLS: обновлены функции IndexOfChar, IndexOfCharsMin,
IndexOfStr (с использованием типа KOLString).
[+] Добавлены функции CrackStack_MapInResource и CrackStack_MapInFile
(могут использоваться при отладке).
[-] Исправлена функция NormalizeUnixText.
[-] Свойство TStream.Size исправлено для memory stream для случая
присваивания значения 0 пустому потоку данных.
[+] Исправлена функция TWStrList.SetText (by mdw).
Решил создать отдельную тему...
Ошибки при подключенной UNICODE_CTRLS
1. function CrackStack_MapInResource( const MapName: String; Max_length: Integer; HandleSuspiciousAddresses: Boolean ): String;
Строка:
Resource2Stream( MapStrm, hInstance, PChar( MapName ), RT_RCDATA );
2е ошибки: несоответствие типов Char и WideChar... Еще насколько я понимаю надо в функции, String на KOLString заменить...
2. function ToRadix( number: Radix_Int; radix: Integer; min_digits: Integer ): KOLString;
Ошибка: несовпадает объявление.
3. function InsertSeparators( const s: KOLString; chars_between: Integer; Separator: KOLChar ): KOLString;
Ошибка: несовпадает объявление.
4. function IndexOfChar( const S : KOLString; Chr : KOLChar ) : Integer;
Строка:
F := StrScanLen( P, Chr, Length( S ) );
Ошибка: несоответствие типов Char и WideChar...
Вообще функция IndexOfChar как то странно поддержку UNICODE осуществляет...
function IndexOfChar( const S : KOLString; Chr : KOLChar ) : Integer;
var P, F : PChar;
begin
P := PChar( S );
{$IFDEF INPACKAGE}
F := StrScan( P, Chr );
{$ELSE}
F := StrScanLen( P, Chr, Length( S ) );
{$ENDIF}
Result := -1;
if (F = nil) or (S = '') then Exit;
Result := Integer( F ) - Integer( P )
{$IFDEF INPACKAGE} + 1 {$ENDIF};
if {(Result > Length(S)) or} (S[ Result ] Chr) then
Result := -1;
end;
Кроме объявления ничего и нет. В самом начале строка S - WideString приводится к PChar...да и потом Ansi-версия StrScanLen откуда-то взялась...
Еще один вопрос.
А чем собственно результат IndexOfChar(S, Chr) отличается от Pos(Chr, S)? Или я чего-то недопонимаю?
В любом случае, в 2.87 IndexOfChar не работает с UNICODE.
mdw (2008-06-20 23:17:00) [21]
> Вот здесь исправление бага с fast tlist: http://kolmck.net/upd/to287++.
> rarПосмотрите сначала, т.к. протестировал я только на приведённом
> примере. Может, ещё где-то не работает. (Через Insert/Update
> потмому что код так короче, а скорость здесь и так выиграна
> в разы).
Я там тоже что-то накосячил, сейчас звонили с работы, валится усё... Хорошо предыдущую версию оставил доступной, а то пилить через весь город...
В понедельник попробую это обновление, и отпишусь. Хотелось бы довести до ума TLIST_FAST, т.к. прирост скорости очень даже! Один кусок кода (моего), примерно с 5 минут до 50 секунд ускоряется. А в общей совокупности минут 15 получается, а это много значит когда метро с минуты на минуту должно закрыться.:)
К слову, а на КПК, TLIST_FAST дает вообще волшебный прирост, чуть ли не на порядок! Ещё бы объеденить две ветки KOL, официальную и Юрия Сидорова, вообще счастье будет. Но тут, я понял, идеологические противоречия. Ладно, если в основной ветке TLIST_FAST заработает, то там тоже не сложно будет исправить.
ЗЫ. Я сморел код для PWStrList, там примерно тоже, что и я написал.:)
Vladimir Kladov (2008-06-20 21:27:00) [22]Вот здесь исправление бага с fast tlist: http://kolmck.net/upd/to287++.rar
Посмотрите сначала, т.к. протестировал я только на приведённом примере. Может, ещё где-то не работает. (Через Insert/Update потмому что код так короче, а скорость здесь и так выиграна в разы).
Vladimir Kladov (2008-06-20 20:25:00) [23]Копию я не получил, но я так взял. Попробую слить со своими изменениями.
MTsv DN (2008-06-20 18:35:00) [24]Затянувшееся, но состоявшееся обновление на http://www.kolnmck.ru.
Неофициальный апдейт для KOL&MCK версии 2.87:
http://www.kolnmck.ru/upd/kolmck287to287+.7z
Если честно "ломает" создавать список исправлений...в общем-то, все что упоминалось в этой ветке (за исключением [18])
З.Ы. Копия Кладову...
MTsv DN (2008-06-20 17:20:00) [25]Получил...
mdw (2008-06-20 16:06:00) [26]2 MTsv DN
Отправил. Но исправления, так, чтоб работало. Глубже неохота копать....
mdw (2008-06-20 15:58:00) [27]
> после Delete, Insert сбивается что-то. До Delete TList.fBlockList.
> fCount = 4, после уже TList.fBlockList.fCount = 2, а Insert
> работает как будто все еще 4. Дальше не разбирался, в чужом
> коде сложновато...
Только сейчас сообразил. Получается, баг будет проявляться в такой связке всегда.
TList.Delete( Idx );
TList.Insert( Idx, Value );
При Idx=256;
Это плохо, пока, наверное, TLIST_FAST - нафиг. Подождем до исправления.
mdw (2008-06-20 15:53:00) [28]Еще один баг в TLIST_FAST. Переодически пытаюсь прикрутить, так как выигрышь получается приличный, но каждый раз натыкаюсь на баги.:(
Сперва, как получить. Вот простейший пример.
var SL: PStrListEx;
i: Integer;
begin
SL:= NewStrListEx;
for i:= 0 to 257 do begin
SL.AddObject('', (i));
SL.Items[i]:= '1111';
end;
SL.Free;
end;
При i = 257 зацикливается в TStrList.AddObject, вернее в fList.Insert();
Сама ошибка происходит еще при i = 256, на SL.Items[i]:= '1111';
В методе:
procedure TStrList.Put(Idx: integer; const Value: string);
begin
Delete( Idx );
Insert( Idx, Value );
end;
после Delete, Insert сбивается что-то. До Delete TList.fBlockList.fCount = 4, после уже TList.fBlockList.fCount = 2, а Insert работает как будто все еще 4.
Дальше не разбирался, в чужом коде сложновато...
К слову. А зачем вообще через Delete, Insert делать? Я вот переделал малях, думаю, побыстрее будет работать...
procedure TStrList.Put(Idx: integer; const Value: string);
var P: DWORD;
El:Pointer;
Mem: PChar;
L: Integer;
begin
P := DWORD( fList.Items[ Idx ] );
if (fTextBuf <> nil) and ( P >= DWORD( fTextBuf )) and
( P < DWORD( fTextBuf ) + fTextSiz ) then
else
begin
El := FList.Items[ Idx ];
FreeMem( El );
end;
L := Length( Value ) + 1;
GetMem( Mem, L );
Mem[0] := #0;
if L > 1 then System.Move( Value[1], Mem[0], L );
fList.Items[ Idx ]:= Mem;
end;
D[u]fa (2008-06-20 15:51:00) [29]Юзал PFastStrListEx для увеличения скорости, но на каком этапе все начало падать... пришлось вернуться на обычный лист.. Возможно как раз из-за количества элементов...
MTsv DN (2008-06-20 15:50:00) [30]mdw, скинь пока мне, я как просили в [17] все баги объединил в один апдейт. Сделаю вывешу здесь и скину Кладову...
mdw (2008-06-20 12:12:00) [31]Что-то Владимир пропал, с марта тишина...:( Ау!!!
Нашел еще баг. В KOLAdd.pas с опцией TLIST_FAST.
Наткнулся в PTree, но и в PBits и, кажется в PFastStrListEx, то же самое. Заключается в следующем. Там (в KOLAdd.pas) активно используется приведение:
PCrackList( fList ).fXXXX или PCrackList( fChildren ).fXXXX
Что и приводит к краху, если элементов списка больше 256. Нужно или обращаться к свойствам списка и PCrackList вообще убирать, или при создании списка ставить:
{$IFDEF TLIST_FAST}fList.UseBlocks:= False;{$ENDIF}
Пока поправил у себя так, а как лучше сделать Владимир пусть принимает решение...
Barloggg (2008-05-08 10:47:00) [32]столкнулся с неприятным эффектом.
на клиентской машине не влезший в чекбокс текст (из-за другой ширины текста судя по скриншоту) сделал этот самый чекбокс многострочным.
Однако у меня четко указано, что wordwrap:=false. в редакторе свойств, а не в коде конечно же.
я так полагаю это следствие политики "невмешательства" активно используемой в KOL? и глюк вышел из того факта, что умолчания у двух систем разные. Мне делать wordwrap:=false принудительно своим кодом? раз уж МСК ленится.
=BuckLr= (2008-05-02 15:00:00) [33]Кажется, "официального" исправления этих ошибок не будет.
MTsv DN, может быть стоит пофиксить это всё и прикрутить к версии KOL, той, что на сайте?
azsd (2008-05-02 00:34:00) [34]I am sorry, first line should be {$IFNDEF UNICODE_CTRLS}
azsd (2008-05-02 00:31:00) [35]to MTsv DN
replace repne scasb in StrScanLen to
{$IFDEF UNICODE_CTRLS}
REPNE SCASB
{$ELSE}
REPNE SCASW
{$ENDIF}
would be a lesser dirty workaround.
sure make the Char in defination changed to KOLChar first.
Дмитрий К (2008-04-07 17:53:00) [36]
> Интересно и где же это его сайт?
В интернете.
http://kolmck.net/rindex.htm
misha_shar (2008-04-07 17:40:00) [37]Интересно и где же это его сайт?
vampir_infernal (2008-04-04 08:09:00) [38]KOL.pas (2.87)
строка 39975
procedure TTrayIcon.SetTrayIcon(const Value: DWORD);
//---
Move( FTooltip[1], NID.szTip[0], Min( 63, L ) );
//---
почему-то не корректно работает при UNICODE_CTRLS, копирует только половину символов строки с текстом подсказки.
=BuckLr= (2008-03-28 19:28:00) [39]На сайте Кладова лежит обновление...
misha_shar (2008-03-28 17:31:00) [40]Где новая версия? Что то не нашел.