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



              

Указатель на элемент списка


Как уже отмечалось, с помощью процедуры Draw можно выводить обычный текст и выделенный текст. Попробуем использовать это обстоятельство для того, чтобы поместить в окно просмотра указатель на текущий элемент данных. Для этого добавим в TInterior еще одно поле:

type

TInterior = object (TScroller) 

Location: Word;

.......

end;

Поле Location будет хранить номер той строки,которая отождествляется с выбранной строкой и которая на экране должна выделяться цветом.Добавьте в конце метода ReadFile строку

Location:=0;

и измените метод Draw:

Procedure TInterior.Draw; 

{Выводит данные в окно просмотра} 

var

n,k: Integer; 

В: TDrawBuffer; 

р: PString; 

Color: Byte; 

begin

if Delta.Y > Location then

Location := Delta.Y;

if Location > Delta.Y+pred(Size.Y) then

Location := Delta.Y+pred(Size.Y); 

for n := 0 to pred(Size.Y) do 

begin

k := Delta.Y+n; 

if k=Location then

Color := GetColor(2) 

else

Color := GetColor(1);

end 

end; {TInterior.Draw}

Вначале проверяется, попадает ли строка с номером, хранящимся в Location, в число выводимых строк. Если это не так, значит пользователь изменил размеры окна или сдвинул его относительно текста; в этом случае нужным образом корректируется значение Location. Такая проверка гарантирует, что в окне всегда будет выводиться текущая строка. Перед выводом очередной строки сравнивается значение ее номера с величиной Location и, если величины совпадают, строка выводится цветом 2 из палитры TScroller (темно-синими символами на сером фоне).

Создав указатель в окне, нужно предусмотреть и средства воздействия на него. Для этого нам понадобится проверять действия пользователя с мышью и клавиатурой и изменять положение указателя. Вы не забыли, что все действия программы в Turbo Vision выполняются с помощью обработчика событий? Перекроем стандартный метод HandleEvent в объекте TInterior:

type

TInterior,. = object (TScroller)

.......

Procedure HandleEvent(var Event: TEvent); Virtual; 




Содержание  Назад  Вперед