Просмотр списка файлов
{$Х+} Uses DOS,Objects,App,Views,Dialogs,Drivers,MsgBox; var L: PStringCollection; {Коллекция имен файлов} Foc: String; {Выбранный файл} type ТМуАрр = object (TApplication) Procedure Run; Virtual; Destructor Done; Virtual; end; PMyListBox =^TMyListBox; TMyListBox = object (TListBox) Function Valid(Command: Word): Boolean; Virtual; end; {------------------} Procedure TMyApp.Run; {Создает диалоговое окно с TListBox} var R,RR: TRect; W: PDialog; S: SearchRec; B: PScrollBar; P: PListBox; begin {Создаем коллекцию имен файлов:} L: = New(PStringCollection, Init(50.10)); FindFirst('\games\fl9\*.*',Archive,S); While DosError = 0 do with S,L^ do begin Insert(NewStr(Name)); FindNext(S) end; {Создаем окно:} R.Assign (17, 4.63, 14); W: = New(PDialog, Init (R, 'Текущий каталог:')); {Вставляем в окно TListBox:} with W do begin RR.Assign(44.1.45.9); В: = New(PScrollBar, Init(RR)); Insert (B); R.Assign (1, 1.44.9); P: = New(PMyListBox, Init (R, 3,B)); P.NewList(L); Insert (P) end; DeskTop. Insert (W); {Помещаем окно на экран} Inherited Run {Ждем команду ALT + X} end; {TMyApp.Run} {-------------------} Function TMyListBox. Valid; {Помещает в Foc имя выбранного файла} begin Foc: = PString(L.At (Focused)); Valid: = True end; {TMyL stBox.Valid} Destructor TMyApp.Done; {Выводит имя выбранного файла} var R: TRect; begin R.Assign(20, 15, 60.22); MessageBoxRect(R,#3' Выбран файл '+Foc, NIL, $402); Inherited Done end {TMyApp.Done}; {-----------------} var P: TMyApp; begin P. Init; P. Run; P. Done end.
Окно TListBox управляется мышью и клавишами. В частности, клавишами смещения курсора можно выбрать нужный файл, клавишами PgUp, PgDn листать окно со списком. Работают также клавиши End, Home, CTRL + PgUp, CTRL + PgDn.
В момент обращения к методу TMyApp.Done вызывается функция TMyListBox.Valid, которая определяет номер выделенного файла (этот номер хранится в поле TListBox.Focused) и переписывает имя этого файла из коллекции в глобальную переменную Foc.