Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.10.30;
Скачать: CL | DM;

Вниз

Версия 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)
строка 39975
procedure 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 вся ветка

Текущий архив: 2011.10.30;
Скачать: CL | DM;

Наверх




Память: 0.58 MB
Время: 0.011 c
6-1245013139
dmitryfrisky
2009-06-15 00:58
2011.10.30
Компонент TIdMappedPortTCP


15-1309364654
Baks
2011-06-29 20:24
2011.10.30
CR2 Converter


6-1245087660
ther
2009-06-15 21:41
2011.10.30
нет коннекта через проксик


2-1310367651
Gu
2011-07-11 11:00
2011.10.30
перемешать стринглист


15-1309126862
Nic
2011-06-27 02:21
2011.10.30
ipod touch 4 - поиск по документу word