*/
Want to see what people are talking about? See the latest forum posts.
*/

View \LISTBX.PAS

Turbo Vision: ListBox of directory with double click.

Submitted By: WEBMASTER
Rating: (Not rated) (Rate It)


{
The following example will demonstrate how to create a listbox
of file items and enable the user to double click on any item and
produce a Message Box with the listbox item selected.
}

{$X+}
Program Simple_ListBox;

Uses
  Objects, Drivers, Views, Menus, Dialogs, App, Crt, Dos, MsgBox;

Const
 cmNewCollect = 102;
 DisableNewcollect: TCommandSet = [102];

Type

 Tmyapp = object(Tapplication)
     Constructor Init;
     Procedure Initstatusline; Virtual;
     Procedure Initmenubar; Virtual;
     Procedure NewCollect; Virtual;
     Procedure HandleEvent(var Event: TEvent); Virtual;
   End;

  PListBox = ^RListBox;
  RListBox = object(TlistBox)
    Constructor Init(var Bounds:TRect; ANumCols:Word; AScrollBar:
                         PScrollBar);
    Procedure Process;
    Destructor Done; Virtual;
  End;

  PMyDialog = ^MyDialog;
  Mydialog = object(Tdialog)
    Constructor Init(var bounds:trect; MyTitle:ttitlestr);
    Destructor done; Virtual;
    Procedure HandleEvent(var Event: TEvent); Virtual;
  End;

Var
  NameList: PstringCollection;
  Plist: ^Rlistbox;
  MyApp: Tmyapp;

Constructor Mydialog.Init(var Bounds:TRect; MyTitle: TTitleStr);
Begin
  TDialog.Init(Bounds, MyTitle);
End;

Destructor Mydialog.Done;
Begin
  TDialog.done;
  Dispose(NameList, Done);
  EnableCommands(DisableNewCollect);
End;

Procedure MyDialog.HandleEvent(var Event:TEvent);
var
  Index: integer;
Begin
  TDialog.HandleEvent(Event);
  if (Event.Double = true) and (Event.What = evNothing) then
    begin
      sound(100);
      delay(100);
      nosound;
      Index:=(Plist^.Focused);
      Messagebox(Plist^.GetText(Index,20) ,nil,mfOkButton);
    end;
  ClearEvent(Event);
End;

Constructor TMyapp.Init;
Begin
  TApplication.Init;
End;

Constructor RListBox.Init(var Bounds:TRect; ANumCols:Word;AScrollBar:
                          PScrollBar);
Begin
  TListBox.Init(Bounds, ANumCols, AScrollBar);
End;

Destructor RListBox.Done;
Begin
  Tlistbox.Done;
End;

Procedure TMyApp.InitStatusLine;
Var
  R:Trect;
Begin
  GetExtent(R);
  R.A.Y := R.B.Y -1;
  Statusline :=new(Pstatusline, init(R,
  NewStatusDef(0,$FFFF,
  NewStatusKey('~Alt-X~ Exit',kbAltX, cmQuit,
  NewStatusKey('~F10~ Menu',kbF10,cmMenu,
  Nil)),Nil)
  ));
End;

Procedure Rlistbox.Process;
var
  DirInfo: SearchRec;
Begin
  NameList:=New(Pstringcollection,Init(50,10));
  With NameList^ do
  Begin
    FindFirst('*.*', Archive, DirInfo);
    while DosError = 0 do
      Begin
        Insert(Newstr(Dirinfo.Name));
        FindNext(DirInfo);
      End;
  End;
End;

Procedure TMyApp.NewCollect;
Var
  MyBox: PMyDialog;
  R : TRect;
  pBor : ^TScrollBar;
  Col: word;
Begin
  Plist^.Process;
  R.Assign(10,10,60,20);
  MyBox := New(PmyDialog, Init(R, 'Scroll Collection'));
  Col:=1;
  R.Assign(40, 1, 41, 9);
  PBor:= New(Pscrollbar, Init(R));
  R.Assign(9, 1, 40, 9);
  Plist:=New(PListbox, Init(R,Col,PBor));
  Plist^.Newlist(Namelist);
  MyBox^.Insert(PBor);
  MyBox^.Insert(PList);
  Desktop^.insert(myBox);
End;

Procedure TMyApp.HandleEvent(var Event: TEvent);
Begin
  TApplication.HandleEvent(Event);
  if Event.What = evCommand then
    Begin
      case Event.Command of
        cmNewCollect: Begin
                        DisableCommands(DisableNewCollect);
                        Newcollect;
                      End
      else
        ClearEvent(Event);
        Exit;
      End;
      ClearEvent(Event);
    End;
End;

Procedure TMyApp.InitMenubar;
var
  R:Trect;
Begin
  GetExtent(R);
  R.B.Y := R.A.Y +1;
  MenuBar :=new(PMenubar, init(R, Newmenu(
  NewSubMenu('~L~istbox Menu',hcnocontext, Newmenu(
  NewItem('~B~ox','',kbF9,cmnewcollect,hcnocontext,
  NewLine(
  NewItem('~E~xit','',kbf10,cmquit,hcnocontext,
  Nil)))), Nil))));
End;

Begin
  MyApp.Init;
  MyApp.Run;
  MyApp.Done;
End.

corner
© 1996-2008 CommunityHeaven LLC. All rights reserved. Reproduction in whole or in part, in any form or medium without express written permission is prohibited.
Violators of this policy may be subject to legal action. Please read our Terms Of Use and Privacy Statement for more information.
North American business development: Nicolai Wadstrom. Publisher: Lars Hagelin.