![]() |
| ||
|
|
Новости |
Поиск |
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.
(2009-04-01 14:17:00) [1]Удалено модератором
MTsv DN (2008-09-19 12:10:00) [2]2 Dimaxx
Исправил...насколько хватило знаний асма :)
Dimaxx (2008-09-18 23:48:00) [3]
> Скиньте минимальный нерабочий проект. Так и не смог добиться ошибки...
Пожалуйста... http://dimaxx.fatal.ru/scanline_nil.zip
Версия 2.87. Пока не поставишь принудительно pixelformat после изенения размера - любое изменение высоты картинки дает nil. С шириной все в порядке.
MTsv DN (2008-09-17 20:13:00) [4]2 Dimaxx © (11.08.08 17:00) [39]
Скиньте минимальный нерабочий проект. Так и не смог добиться ошибки...
MTsv DN (2008-09-17 19:59:00) [5]L`Autour © (08.09.08 06:01) [41]
Да простит меня КодГир за "стыренный" код.
MTsv DN (2008-09-17 19:40:00) [6]Разобрался. Разный TColor.
Подправлена асм-версия...
MTsv DN (2008-09-17 19:35:00) [7]Кстати, интересный вопрос поднял Hallif...и дело даже не в АСМ версии.
Дельфи:
function ColorToRGB(Color: TColor): Longint;
begin
if Color < 0 then
Result := GetSysColor(Color and $000000FF) else
Result := Color;
end;
KOL:
function Color2RGB( Color: TColor ): TColor;
begin
if Color < 0 then
Result := GetSysColor(Color and $7F) else
Result := Color;
end;
Кому верить?
Hallif (2008-09-08 23:07:00) [8]Модуль: KOL_ASM
Функция: Color2RGB
Описание: Очевидно, что если не SMALLEST_CODE Цвет некоторых контролов будет иметь черный цвет.
function Color2RGB( Color: TColor ): TColor;
asm
BTR EAX, 31
JNC @@exit
AND EAX , $7F // <- a Fix
PUSH EAX
CALL GetSysColor
@@exit:
end;
P.S Проверить немогу, но и без этого очевидно.
L`Autour (2008-09-08 06:01:00) [9]в процедуре:
function _WStrComp(S1, S2: PWideChar): Integer;
var Buf0: array[ 0..0 ] of WideChar;
begin
Buf0[ 0 ] := #0;
if S1 = nil then S1 := @ Buf0[ 0 ];
if S2 = nil then S2 := @ Buf0[ 0 ];
while TRUE do
begin
Result := Ord( S1^ ) - Ord( S2^ );
if Result <> 0 then Exit;
if S1^ = #0 then Exit;
end;
end;
нехватает инкремента указателей сравниваемых строк
L`Autour (2008-08-19 06:34:00) [10]Никто работу ToolBar под Win98se не проверял? У меня при включенном для ToolBar ToolTip прога стабильно вылетает с ошибкой при их всплывании над кнопками ToolBar. Win98se у меня стоит под VMWare.
Dimaxx (2008-08-11 17:00:00) [11]Спасибо, буду знать. Установка PixelFormat после изменения размеров решила проблему. А мб это "сунуть" в FormatChanged, чтоб не писать каждый раз.
Vladimir Kladov (2008-08-11 15:38:00) [12]PixelFormat присвоить, или есть ещё свойство HandleType. В общем, после изменения размера надо снова превратить его в DIB.
Dimaxx (2008-08-11 02:35:00) [13]Владимир, проблема у Bitmap при доступе через ScanLine. При создании битмапа с фиксированными размерами все ок. Но стоит изменить высоту (с шириной все в порядке), как ScanLine возвращает nil. Пробовал и DIB-битмап. Тоже самое - nil выдается и в ScanLine, и в DIBBits. Придется изворачиваться, но это не есть гуд. Если кто знает способ решения проблемы - подскажите.
L`Autour (2008-07-31 06:07:00) [14]И по 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++)
MTsv DN (2008-07-29 09:02:00) [15]2 L`Autour
Пардон. Это мне понадобилось, забыл убрать... Просто подправьте mirror.pas и пересоберите все...
L`Autour (2008-07-29 07:53:00) [16]А зачем генерация констант в 2.87++ для Menu и PopupMenu стала типизированной?
Теперь Case Item of с ними не проходит.
MTsv DN (2008-06-23 16:31:00) [17]> KOL_Asm не изменялся ни в одном из обновлений + или ++. Или в + всё-таки изменялся?
С версии 2.86 на 2.87 изменялся же или нет? Вы же обновления выложили:
2.86 -> 2.87++ (непонятно зачем?)
и
2.87+ -> 2.87++
Vladimir Kladov (2008-06-23 15:46:00) [18]KOL_Asm не изменялся ни в одном из обновлений + или ++. Или в + всё-таки изменялся? Win Merge разницы не показывает.
Правильно именно Items использовать, тогда TLIST_FAST должен включаться в работу.
mdw (2008-06-23 14:49:00) [19]
> Вот здесь исправление бага с 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;
Yury Sidorov (2008-06-21 10:31:00) [20]Официально объеденить две ветки вряд ли получится, но я скоро сделаю синхронизацию с последней версией KOL и получится как раз та объединенная версия.
До этого не делал синхронизацию, т. к. боялся занести новых багов :)