{ A fragment to save a help context to disk/printer, in Turbo Vision 2.0: In HelpFile.PAS: } Uses ... , ... , Print; Type TSetup = Record HFIleName : String[80]; OutTxt, Paper : Word; end; PHelpViewer = ^THelpViewer; THelpViewer = object(TScroller) HFile: PHelpFile; Topic: PHelpTopic; Selected: Integer; constructor Init(var Bounds: TRect; AHScrollBar, AVScrollBar: PScrollBar; AHelpFile: PHelpFile; Context: Word); destructor Done; virtual; procedure ChangeBounds(var Bounds: TRect); virtual; procedure Draw; virtual; function GetPalette: PPalette; virtual; procedure HandleEvent(var Event: TEvent); virtual; Procedure Print; {++++++ NEW +++++} end; Var Setup : TSetup; {--------Procedure THelpViewer.Print--------} procedure THelpViewer.Print; var I : Integer; F : Text; Dialog : PDialog; R : TRect; Control: PView; Ctrl, Modulo : Word; begin R.Assign(00, 00, 35, 15); Dialog := New(PDialog, Init(R, 'Save Help Context')); With Dialog^ do begin Options := Options or ofFramed or ofCentered; Setup.HFileName := 'HelpCtx.txt'; R.Assign(3, 3, 32, 4); Control := New(PInputLine, Init(R, 80)); Control^.Options := Control^.Options or ofFramed; Dialog^.Insert(Control); R.Assign(29, 3, 32, 4); Control := New(PHistory, Init(R, PInputline(Control), 3)); Dialog^.Insert(Control); R.Assign(3, 2, 20, 3); Control := New(PLabel, Init(R, 'File Name:',Control)); Dialog^.Insert(Control); Setup.OutTxt := $0; R.Assign(3, 6, 32, 7); Control := New(PRadioButtons, Init(R, NewSItem('Disk', NewSItem('Printer', Nil)))); Control^.Options := Control^.Options or ofFramed; Dialog^.Insert(Control); R.Assign(3, 5, 13, 6); Control := New(PLabel, Init(R, 'Save to:', Control)); Dialog^.Insert(Control); Setup.Paper := $00; R.Assign(3, 9, 32, 10); Control := New(PRadioButtons, Init(R, NewSItem('66 lines', NewSItem('72 lines', Nil)))); Control^.Options := Control^.Options or ofFramed; Dialog^.Insert(Control); R.Assign(3, 8, 21, 9); Control := New(PLabel, Init(R, 'Paper:',Control)); Dialog^.Insert(Control); R.Assign(3, 12, 13, 14); Control := New(PButton, Init(R, 'O~k~', cmOK, bfDefault)); Dialog^.Insert(Control); R.Assign(21, 12, 31, 14); Control := New(PButton, Init(R, '~C~ancel', cmCancel, bfNormal)); Dialog^.Insert(Control); Dialog^.SelectNext(False); end; Dialog^.SetData(Setup); Ctrl := Application^.ExecView(Dialog); If Ctrl <> cmCancel Then Begin Dialog^. GetData (Setup); Case Setup.OutTxt of $00 : Begin If Setup.HFileName = '' then Setup.HFileName := 'HlpCtx.txt'; Assign(F, Setup.HFileName); Rewrite(F); For I := 1 to Topic^.NumLines do Writeln(F,Topic^.GetLine(I)); Close(F); end; $01 : begin Case Setup.Paper of $00 : begin Modulo := 60; Write (Lst,Chr(27)+'C'+chr(66)) end; $01 : begin Modulo := 66; Write (Lst,Chr(27)+'C'+chr(72)) end; end; For I := 1 to Topic^.NumLines do begin Writeln(Lst,Topic^.GetLine(I)); If I Mod Modulo = 0 then Write(Lst,#12); end; Write(Lst,#12); end end; end; end; {--------Procedure THelpViewer.HandleEvent---------} ........ fragment kbEnter:if Selected <= Topic^.GetNumCrossRefs then begin Topic^.GetCrossRef(Selected, KeyPoint, KeyLength, KeyRef); SwitchToTopic(KeyRef); end; kbAltSpace: +++ New +++ begin +++ New +++ Print; +++ New +++ end +++ New +++ else Exit; end; DrawView; ClearEvent(Event); .......... fragment