Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.03.2008, 01:43   #21
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Цитата:
Винвовая прога просмотра картинок как раз так и делает
ну еще бы, она как никак родственница эксплорера

Вот кусок из моей программы в к-рой есть функция листания файлов, сортировка по алфавиту, все нормально работает.
Принцип такой: при открытии файла, если это первое открытие или поменялась директория, запускается процедура поиска в этой директории и перезаписывается список файлов. Обновления текущей директории ни авто ни ручного нет. Процедуры NextFile и PrevFile запускаются по нажатию стрелок на клаве.
Код:
const
Ext: array[0..2] of string = ('.bmp','.jpg','.jpeg');

var
  AllFiles: TStringList;
  OpenedDir: string;
  FileNum: integer;
  AutoFileName, LastSaveDir: string;

procedure AddFromFolder(Path, Exte: string; var aStrings: TStringList);
var
  SR: TSearchRec;
  fe: string;
  j: integer;
begin
if FindFirst(Path + Exte, faAnyFile, SR) = 0 then
  begin
    repeat
    if SR.Attr <> faDirectory then
      begin
      fe:=ExtractFileExt(SR.Name);
      for j:=0 to length(Ext)-1 do
        if AnsiLowerCase(fe) = Ext[j] then
          begin
          aStrings.Add(Path+SR.Name);
          Break;
          end;
      end;
    until FindNext(SR) <> 0;
    FindClose(SR);
  end;
end;

procedure LoadFile(fn: TFileName);
begin
//я проверку if сделал, так как два формата только
//если форматов больше, то лучше в цикле проверять
  if AnsiLowerCase(ExtractFileExt(fn)) = '.jpg' then
    begin
    jp.LoadFromFile(fn);
    buffer.Assign(jp);
    source.Assign(jp);
    end
  else
    if AnsiLowerCase(ExtractFileExt(fn)) = '.bmp' then
      begin
      source.LoadFromFile(fn);
      buffer.Assign(source);
      end
    else
      begin
      MessageBox(0,'На данный момент этот формат не поддерживается.',
        'Неподдерживаемый формат',MB_ICONINFORMATION);
      Exit;
      end;

  //тут был код открытия файла и всякий другой код

  if ExtractFilePath(fn) <> OpenedDir then //если директория поменялась, то обновим список файлов
    begin
    AllFiles.Clear;
    OpenedDir:=ExtractFilePath(fn);
    AddFromFolder(OpenedDir,'*.*',AllFiles);
    AllFiles.Sort;
    end;
  FileNum:=AllFiles.IndexOf(fn);
end;

procedure NextFile;
begin
if OpenedDir <> 'none' then
  begin
  if FileNum >= AllFiles.Count-1 then FileNum:=0
  else Inc(FileNum);
  LoadFile(AllFiles.Strings[FileNum]);
  end;
end;

procedure PrevFile;
begin
if OpenedDir <> 'none' then
  begin
  if FileNum <= 0 then FileNum:=AllFiles.Count-1
  else Dec(FileNum);
  LoadFile(AllFiles.Strings[FileNum]);
  end;
end;
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск *.csv и *.xls файлов Len@ Microsoft Office Excel 18 28.07.2008 22:31
Поиск min/max данных с несколькими условиями - нужна помощь! /nort/ Microsoft Office Excel 3 16.03.2008 00:13
Поиск файлов student_63 Общие вопросы Delphi 6 07.03.2008 19:00
поиск файлов KORN Компоненты Delphi 3 12.10.2007 05:42
Поиск файлов necky Общие вопросы Delphi 10 31.08.2007 00:27