Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Замечания и предложения (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.


Наверх

Титульная страница Поиск, карта сайта Написать письмо