Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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)
строка 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 вся ветка

Форум: "KOL";
Текущий архив: 2011.10.30;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.56 MB
Время: 0.005 c
15-1309984198
Юрий
2011-07-07 00:29
2011.10.30
С днем рождения ! 7 июля 2011 четверг


3-1265218398
ther
2010-02-03 20:33
2011.10.30
как получить код исключения в запросе? ADO+sql sever


15-1309440076
SQLEXPRESS
2011-06-30 17:21
2011.10.30
Сортировка


15-1309608613
снусмумрик
2011-07-02 16:10
2011.10.30
Комментарии для закачки uTorrent


15-1309781468
Kerk
2011-07-04 16:11
2011.10.30
База данных по документам министерства обороны за 1941-1945





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский