![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Замечания и предложения (KOLnMCK v.2.57)
MTsv DN © (2007-04-14 09:16:00)Прислушиваясь к пожеланию В.Кладова:
> Кстати, было бы неплохо, если бы сообщения о багах с форума как-то в одном месте концентрировались.
открываю эту тему.
В теме, предлагается сообщать о замечаниях (желательно с предложенными исправлениями) и пожеланиях (также с реализацией)!!!
MTsv DN (2007-04-14 09:23:00) [1]1. Файл KOL.PAS, процедура ScanDirectory:
procedure TDirList.ScanDirectory(const DirPath, Filter: KOLString;
Attr: DWord);
var FindData : TFindFileData;
E : PFindFileData;
Action: TDirItemAction;
s: String;
begin
Clear;
FList := NewList;
FPath := DirPath;
if FPath = '' then Exit;
s := IncludeTrailingPathDelimiter( FPath );
FPath := s;
if fFilters = nil then
begin
fFilters := {$IFDEF UNICODE_CTRLS} NewWStrList {$ELSE} NewStrList {$ENDIF};
if Filter = '*.*' then
fFilters.Add( '*' )
else
fFilters.Add( Filter );
end;
if not Find_First( PKOLChar( FPath + FindFilter( Filter ) ), FindData ) then
Exit;
while True do
begin
(*)
if SatisfyFilter( PKOLChar(@FindData.cFileName[0]),
FindData.dwFileAttributes, Attr ) then
а. Избавиться от переменной s.
б. Предлагаю на место (*)вставить следующий или похожий код:
{$IFDEF UNICODE_CTRLS}
i := $F000;
IsUnicode := FindData.cFileName;
if (IsUnicode <> '.') and (IsUnicode <> '..') then
begin
if not IsTextUnicode(@IsUnicode[1], Length(IsUnicode), @i) then
if FindData.cAlternateFileName <> '' then
CopyMemory(@FindData.cFileName, @FindData.cAlternateFileName, SizeOf(FindData.cAlternateFileName));
end;
{$ENDIF}
Поскольку, как оказалось на практике, красивое отображение иероглифов или арабской вязи, это всего лишь отображение, а вообще-то, программы не работают с именами WideString, а переходят на альтернативные имена...
З.Ы. Почему написал "или похожий код", поскольку не получилось правильной фильрации символов ANSI-16для всех языков...
2. Файл KOL.PAS.
Для функций Trim, TrimLeft и TrimRight надо бы заменить string -> KOLString.
3. Файл KOLadd.PAS.
function TActionList.Add(const ACaption, AHint: string; OnExecute: TOnEvent): PAction;
Нужна замена string -> KOLString.