Иллюстрированный самоучитель по Turbo Pascal

Просмотр списка файлов

{$Х+}
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.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.