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

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

Версия 2.87


Страницы:   1 2 3

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]

Где новая версия? Что то не нашел.


Страницы:   1 2 3

Наверх

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