![]() |
| ||
|
|
Новости |
Поиск |
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.
MTsv DN (2008-03-28 09:06:00) [41]Ну, т.е. результат один и тот же... Да, работает с подстрокой, и медленнее, поэтому по совету 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;
GMax (2008-03-27 23:10:00) [42]Pos ведь с подстрокой работает ?
или в дельфях есть оптимизация на Pos(char...) ???
значит IndexOf должен быстрее работать.
D[u]fa (2008-03-27 17:23:00) [43]Не уловил суть вопроса.. я так понял обновление кол у тебя есть, а почему бы не проверить?) лично я не обновлялся
MTsv DN (2008-03-27 17:21:00) [44]Перемена параметров тут не при чем. Вопрос в другом. Результат IndexOfChar(S, Chr)и Pos(Chr, S)чем-нибудь отличается?
D[u]fa (2008-03-27 15:41:00) [45]либо что б не юзать встроенную функцию Pos, либо для поддержки уникода, либо чтоб параметры местами поменять, либо я хз =)
MTsv DN (2008-03-27 11:20:00) [46]А меня все так и интересует вопрос:
А чем собственно результат IndexOfChar(S, Chr) отличается от Pos(Chr, S)? Или я чего-то недопонимаю?
=BuckLr= (2008-03-27 10:37:00) [47]
> скинул б сюда исправление
Всё есть по ссылке. Это очень небольшой фикс, но лично для меня очень важный.
D[u]fa (2008-03-26 12:28:00) [48]скинул б сюда исправление, видимо у Владимира времени нету просто...
=BuckLr= (2008-03-26 11:01:00) [49]Владимиру Кладову:
Будет ли официальное исправление того, о чём я писал здесь http://www.delphimaster.ru/cgi-bin/forum.pl?id=1201946463&n=10
Я исправил свой KOL.pas, но хотелось бы видеть это исправление и в будущих версиях...