Информационный сервер для программистов: Исходники со всего света. Паскальные исходники со всего света
  Powered by Поисковый сервер Яndex: Найдется ВСЁ!
На Главную Pascal Форум Информер Страны мира

   Авторские страницы  >>   Программы Дмитрия Белошистова

  StrmView - Модуль для работы с потоками в Turbo Vision       Dmitry Beloshistov 28.03.2001

Модуль StrmView предназначен для работы с пользовательскими базами данных
(типизированными файлами) - просмотр/редактирование и т.п.
В отличие от большинства остальных модулей компилируетс с использованием только стандартных модулей TV.

  5k
 

>VV> А для StrmView желательно бы компилирующий примерчик, >VV> с приложенной небольшой базейкой, >VV> или с созданием оной :) DB> Значит так.. Делаем по шагам. DB> Пишем любую базу данных File of ...... Забиваем ее несколькими записями... DB> Пишем наследника от TStreamViewer где переопределяем GetText. DB> function TStreamViewer.GetText(Item: LongInt; MaxLen: Integer): String; DB> var Rec: ..... user record ....... DB> S:String; DB> begin DB> S.Seek(Item*RecSize); DB> S.Read(Rec,SizeOf(.... user record ....)); DB> S:= ... переводим поля записи в строку ....... DB> if Length(S)>MaxLen then S[0]:=Char(Lo(MaxLen)); {это не обязательно, но DB> для чистоты эксперимента ;))) } DB> GetText:=S; DB> end; DB> Затем в основной программе: DB> var SV:TStreamViewer; DB> ....... DB> R.Assign(1,1,50,20); DB> SV.Init(R,1,SizeOf( .... user record ....),nil,'MyFile.Dat',True,$FFFE); - DB> проинициализировали обьект DB> Далее вставляем в приложение и наслаждаемся жизнью ;))))) ------------------------------------------------------------------------------ Модуль TStreamIndicator ------------------------------------------------------------------------------ Модуль написан для организации работы с пользовательскими базами данных (те же самые типизированные файлы данных) с использованием Turbo Vision. Содержит 2 обьекта - TStreamIndicator и TStreamViewer. TStreamIndicator - обьект для отображения позиции в потоке. TStreamViewer - обьект по работе с потоком. Поля и методы обьектов. -------------------------- PStreamIndicator=^TStreamIndicator; TStreamIndicator=object(TView) Cur,Max:Longint; Constructor Init(var Bounds:TRect; AMax:longint); Procedure Draw; virtual; Procedure SetCurValue(ACur:Longint); Procedure SetMaxValue(AMax:Longint); end; Cur, текущая запись в потоке Max:Longint; общее число записей в потоке Constructor Init(var Bounds:TRect; AMax:longint); - конструктор. Параметры - область отображения и число записей. Procedure Draw; virtual; - процедура рисовани Procedure SetCurValue(ACur:Longint); установка текущей позиции Procedure SetMaxValue(AMax:Longint); установка максимального кол-ва записей PStreamViewer = ^TStreamViewer; TStreamViewer = object(TView) VScrollBar: PScrollBar; NumCols: Integer; TopItem: longint; Focused: longint; Range: longint; RecSize:Word; NumRecs:Longint; Status:integer; Modify:boolean; S:TBufStream; constructor Init(var Bounds:TRect; ANumCols,ARecSize:Word; AVScrollBar:PScrollBar; FileName:String; AModify:boolean; BufSize:Word); Destructor Done; virtual; procedure ChangeBounds(var Bounds: TRect); virtual; procedure Draw; virtual; procedure FocusItem(Item: LongInt); virtual; function GetPalette: PPalette; virtual; function GetText(Item:Longint; MaxLen: Integer): String; virtual; function IsSelected(Item:Longint): Boolean; virtual; procedure HandleEvent(var Event: TEvent); virtual; procedure SelectItem(Item: Longint); virtual; procedure SetRange(ARange: longint); procedure SetState(AState: Word; Enable: Boolean); virtual; procedure PutRec(RecNumber:Longint; var Rec); procedure GetRec(RecNumber:longint; var Rec); Procedure AppendRec(var Rec); private procedure FocusItemNum(Item: longint); virtual; end; VScrollBar: PScrollBar; - обьект полосы скроллинга. NumCols: Integer; - число колонок TopItem: longint; - верхний элемент (индекс) в окне Focused: longint; - выбранный элемент (индекс) Range: longint; - диапазон RecSize:Word; - размер записи NumRecs:Longint; - число записей Status:integer; - состояние для потока Modify:boolean; - флаг модификации S:TBufStream; - рабочий поток constructor Init(var Bounds:TRect; ANumCols,ARecSize:Word; AVScrollBar:PScrollBar; FileName:String; AModify:boolean; BufSize:Word); - конструктор. Параметры: Bounds:TRect; - границы для отображени ANumCols, - число колонок ARecSize:Word; - размер записи AVScrollBar:PScrollBar; - полоса скроллинга FileName:String; - имя файла базы данных AModify:boolean; - может ли модифицироватьс BufSize:Word - размер буфера для потока Destructor Done; virtual; - деструктор procedure ChangeBounds(var Bounds: TRect); - изменение границ отображени procedure Draw; - процедура рисовани procedure FocusItem(Item: LongInt); - выбрать элемент с заданным индексом function GetPalette: PPalette; - получить палитру для отображени function GetText(Item:Longint; MaxLen: Integer): String; получить текст дл отображени function IsSelected(Item:Longint): Boolean; - проверка на то, что элемент выбран procedure HandleEvent(var Event: TEvent); - обработка сообщений procedure SelectItem(Item: Longint); - выбрать элемент procedure SetRange(ARange: longint); - установить диапазон procedure SetState(AState: Word; Enable: Boolean); - состояние окна procedure PutRec(RecNumber:Longint; var Rec); - изменить запись procedure GetRec(RecNumber:longint; var Rec); - получить запись Procedure AppendRec(var Rec); - добавить запись в конец procedure FocusItemNum(Item: longint); - выбрать элемент WBR Dmitry Beloshistov AKA [-=BDS=-] e-mail: torin@scm.com.ua