Форум: "KOL";
Текущий архив: 2011.10.30;
Скачать: [xml.tar.bz2];
ВнизВерсия 2.87 Найти похожие ветки
← →
MTsv DN (2008-03-25 09:14) [0]
Новости от 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.
← →
=BuckLr= © (2008-03-26 11:01) [1]Владимиру Кладову:
Будет ли официальное исправление того, о чём я писал здесь http://delphimaster.net/view/11-1201946463/
Я исправил свой KOL.pas, но хотелось бы видеть это исправление и в будущих версиях...
← →
D[u]fa (2008-03-26 12:28) [2]скинул б сюда исправление, видимо у Владимира времени нету просто...
← →
=BuckLr= © (2008-03-27 10:37) [3]
> скинул б сюда исправление
Всё есть по ссылке. Это очень небольшой фикс, но лично для меня очень важный.
← →
MTsv DN (2008-03-27 11:20) [4]А меня все так и интересует вопрос:
А чем собственно результат IndexOfChar(S, Chr) отличается от Pos(Chr, S)? Или я чего-то недопонимаю?
← →
D[u]fa (2008-03-27 15:41) [5]либо что б не юзать встроенную функцию Pos, либо для поддержки уникода, либо чтоб параметры местами поменять, либо я хз =)
← →
MTsv DN (2008-03-27 17:21) [6]Перемена параметров тут не при чем. Вопрос в другом. Результат IndexOfChar(S, Chr) и Pos(Chr, S) чем-нибудь отличается?
← →
D[u]fa (2008-03-27 17:23) [7]Не уловил суть вопроса.. я так понял обновление кол у тебя есть, а почему бы не проверить?) лично я не обновлялся
← →
GMax (2008-03-27 23:10) [8]Pos ведь с подстрокой работает ?
или в дельфях есть оптимизация на Pos(char...) ???
значит IndexOf должен быстрее работать.
← →
MTsv DN (2008-03-28 09:06) [9]Ну, т.е. результат один и тот же... Да, работает с подстрокой, и медленнее, поэтому по совету mdw, заменил код в IndexOfChar на:
Result := -1;
if S = "" then exit;
for I := 1 to Length(S) do
begin
if S[I] = Chr then
begin
Result := I;
break;
end;
end;
← →
misha_shar © (2008-03-28 17:31) [10]Где новая версия? Что то не нашел.
← →
=BuckLr= © (2008-03-28 19:28) [11]На сайте Кладова лежит обновление...
← →
vampir_infernal (2008-04-04 08:09) [12]KOL.pas (2.87)
строка 39975procedure TTrayIcon.SetTrayIcon(const Value: DWORD);
//---
Move( FTooltip[1], NID.szTip[0], Min( 63, L ) );
//---
почему-то не корректно работает при UNICODE_CTRLS, копирует только половину символов строки с текстом подсказки.
← →
misha_shar © (2008-04-07 17:40) [13]Интересно и где же это его сайт?
← →
Дмитрий К © (2008-04-07 17:53) [14]
> Интересно и где же это его сайт?
В интернете.
http://kolmck.net/rindex.htm
← →
azsd (2008-05-02 00:31) [15]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.
← →
azsd (2008-05-02 00:34) [16]I am sorry, first line should be {$IFNDEF UNICODE_CTRLS}
← →
=BuckLr= © (2008-05-02 15:00) [17]Кажется, "официального" исправления этих ошибок не будет.
MTsv DN, может быть стоит пофиксить это всё и прикрутить к версии KOL, той, что на сайте?
← →
Barloggg (2008-05-08 10:47) [18]столкнулся с неприятным эффектом.
на клиентской машине не влезший в чекбокс текст (из-за другой ширины текста судя по скриншоту) сделал этот самый чекбокс многострочным.
Однако у меня четко указано, что wordwrap:=false. в редакторе свойств, а не в коде конечно же.
я так полагаю это следствие политики "невмешательства" активно используемой в KOL? и глюк вышел из того факта, что умолчания у двух систем разные. Мне делать wordwrap:=false принудительно своим кодом? раз уж МСК ленится.
← →
mdw © (2008-06-20 12:12) [19]Что-то Владимир пропал, с марта тишина...:( Ау!!!
Нашел еще баг. В KOLAdd.pas с опцией TLIST_FAST.
Наткнулся в PTree, но и в PBits и, кажется в PFastStrListEx, то же самое. Заключается в следующем. Там (в KOLAdd.pas) активно используется приведение:
PCrackList( fList ).fXXXX или PCrackList( fChildren ).fXXXX
Что и приводит к краху, если элементов списка больше 256. Нужно или обращаться к свойствам списка и PCrackList вообще убирать, или при создании списка ставить:
{$IFDEF TLIST_FAST}fList.UseBlocks:= False;{$ENDIF}
Пока поправил у себя так, а как лучше сделать Владимир пусть принимает решение...
← →
MTsv DN (2008-06-20 15:50) [20]mdw, скинь пока мне, я как просили в [17] все баги объединил в один апдейт. Сделаю вывешу здесь и скину Кладову...
← →
D[u]fa (2008-06-20 15:51) [21]Юзал PFastStrListEx для увеличения скорости, но на каком этапе все начало падать... пришлось вернуться на обычный лист.. Возможно как раз из-за количества элементов...
← →
mdw © (2008-06-20 15:53) [22]Еще один баг в 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;
← →
mdw © (2008-06-20 15:58) [23]
> после 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 16:06) [24]2 MTsv DN
Отправил. Но исправления, так, чтоб работало. Глубже неохота копать....
← →
MTsv DN (2008-06-20 17:20) [25]Получил...
← →
MTsv DN (2008-06-20 18:35) [26]Затянувшееся, но состоявшееся обновление на http://www.kolnmck.ru.
Неофициальный апдейт для KOL&MCK версии 2.87:
http://www.kolnmck.ru/upd/kolmck287to287+.7z
Если честно "ломает" создавать список исправлений...в общем-то, все что упоминалось в этой ветке (за исключением [18])
З.Ы. Копия Кладову...
← →
Vladimir Kladov (2008-06-20 20:25) [27]Копию я не получил, но я так взял. Попробую слить со своими изменениями.
← →
Vladimir Kladov (2008-06-20 21:27) [28]Вот здесь исправление бага с fast tlist: http://kolmck.net/upd/to287++.rar
Посмотрите сначала, т.к. протестировал я только на приведённом примере. Может, ещё где-то не работает. (Через Insert/Update потмому что код так короче, а скорость здесь и так выиграна в разы).
← →
mdw © (2008-06-20 23:17) [29]
> Вот здесь исправление бага с fast tlist: http://kolmck.net/upd/to287++.
> rarПосмотрите сначала, т.к. протестировал я только на приведённом
> примере. Может, ещё где-то не работает. (Через Insert/Update
> потмому что код так короче, а скорость здесь и так выиграна
> в разы).
Я там тоже что-то накосячил, сейчас звонили с работы, валится усё... Хорошо предыдущую версию оставил доступной, а то пилить через весь город...
В понедельник попробую это обновление, и отпишусь. Хотелось бы довести до ума TLIST_FAST, т.к. прирост скорости очень даже! Один кусок кода (моего), примерно с 5 минут до 50 секунд ускоряется. А в общей совокупности минут 15 получается, а это много значит когда метро с минуты на минуту должно закрыться.:)
К слову, а на КПК, TLIST_FAST дает вообще волшебный прирост, чуть ли не на порядок! Ещё бы объеденить две ветки KOL, официальную и Юрия Сидорова, вообще счастье будет. Но тут, я понял, идеологические противоречия. Ладно, если в основной ветке TLIST_FAST заработает, то там тоже не сложно будет исправить.
ЗЫ. Я сморел код для PWStrList, там примерно тоже, что и я написал.:)
← →
Yury Sidorov (2008-06-21 10:31) [30]Официально объеденить две ветки вряд ли получится, но я скоро сделаю синхронизацию с последней версией KOL и получится как раз та объединенная версия.
До этого не делал синхронизацию, т. к. боялся занести новых багов :)
← →
mdw © (2008-06-23 14:49) [31]
> Вот здесь исправление бага с fast tlist: http://kolmck.net/upd/to287++.
> rar
Попробовал. Вроде работает.
Возникло пару неясностей.
1. В результате апдейтов kolmck286to287++.upd и kolmck287+to287++.upd получаются разные KOL_ASM.inc. Я тестировал то, что получается с помощью kolmck287+to287++.upd. Какой правильный?
2. Я посмотрел KOLadd.pas. Вы вернули все как было до kolmck287to287+.upd.
Хотя ошибка и не возникает сейчас, но сдается мне, что все же там ошибка присутствует. Посмотрите сами, например:
procedure TTree.Add(Node: PTree);
var Previous: PTree;
begin
Node.Unlink;
if fChildren = nil then
fChildren := NewList;
Previous := nil;
if PCrackList( fChildren ).fCount > 0 then
Previous := PCrackList( fChildren ).fItems[ PCrackList( fChildren ).fCount - 1 ];
//Вот здесь идет обращение к fItems, но если элементов больше 256, при
//TLIST_FAST то fItems будет nil. Или я что-то не понимаю?
if Previous <> nil then
begin
Previous.fNext := Node;
Node.fPrev := Previous;
end;
fChildren.Add( Node );
Node.fParent := @Self;
end;
← →
Vladimir Kladov (2008-06-23 15:46) [32]KOL_Asm не изменялся ни в одном из обновлений + или ++. Или в + всё-таки изменялся? Win Merge разницы не показывает.
Правильно именно Items использовать, тогда TLIST_FAST должен включаться в работу.
← →
MTsv DN (2008-06-23 16:31) [33]> KOL_Asm не изменялся ни в одном из обновлений + или ++. Или в + всё-таки изменялся?
С версии 2.86 на 2.87 изменялся же или нет? Вы же обновления выложили:
2.86 -> 2.87++ (непонятно зачем?)
и
2.87+ -> 2.87++
← →
L`Autour © (2008-07-29 07:53) [34]А зачем генерация констант в 2.87++ для Menu и PopupMenu стала типизированной?
Теперь Case Item of с ними не проходит.
← →
MTsv DN (2008-07-29 09:02) [35]2 L`Autour
Пардон. Это мне понадобилось, забыл убрать... Просто подправьте mirror.pas и пересоберите все...
← →
L`Autour © (2008-07-31 06:07) [36]И по 2.86 -> 2.87++, там действительно KOL_ASM.inc не меняется хотя
для 2.86 -> 2.87 он менялся (матюгов нет). Без изменения KOL_ASM.inc - идут матюги при компиляции прог.
(на работе делал 2.86 -> 2.87 -> 2.87+ -> 2.87++, а дома решил попробовать 2.86 -> 2.87++)
← →
Dimaxx © (2008-08-11 02:35) [37]Владимир, проблема у Bitmap при доступе через ScanLine. При создании битмапа с фиксированными размерами все ок. Но стоит изменить высоту (с шириной все в порядке), как ScanLine возвращает nil. Пробовал и DIB-битмап. Тоже самое - nil выдается и в ScanLine, и в DIBBits. Придется изворачиваться, но это не есть гуд. Если кто знает способ решения проблемы - подскажите.
← →
Vladimir Kladov © (2008-08-11 15:38) [38]PixelFormat присвоить, или есть ещё свойство HandleType. В общем, после изменения размера надо снова превратить его в DIB.
← →
Dimaxx © (2008-08-11 17:00) [39]Спасибо, буду знать. Установка PixelFormat после изменения размеров решила проблему. А мб это "сунуть" в FormatChanged, чтоб не писать каждый раз.
← →
L`Autour © (2008-08-19 06:34) [40]Никто работу ToolBar под Win98se не проверял? У меня при включенном для ToolBar ToolTip прога стабильно вылетает с ошибкой при их всплывании над кнопками ToolBar. Win98se у меня стоит под VMWare.
Страницы: 1 2 вся ветка
Форум: "KOL";
Текущий архив: 2011.10.30;
Скачать: [xml.tar.bz2];
Память: 0.56 MB
Время: 0.005 c