{ Well, here goes...a directory viewer, sorry it has no box but the command that i used to create the box was from a Unit. Weel, the Program is very "raw" but i think it's enough to give you an idea... } Program ListBox; Uses Crt, Dos; Const S = ' '; Var List : Array[1..150] of String[12]; AttrList : Array[1..150] of String[15]; Pos, First : Integer; C : Char; Cont : Integer; DirInfo : SearchRec; NumFiles : Integer; begin TextBackground(Black); TextColor(LightGray); ClrScr; For Cont := 1 to 15 do begin List[Cont] := ''; AttrList[Cont] := ''; end; NumFiles := 0; FindFirst('C:\*.*', AnyFile, DirInfo); While DosError = 0 do begin Inc(NumFiles, 1); List[NumFiles] := Concat(DirInfo.Name, Copy(S, 1, 12 - Length(DirInfo.Name))); If (DirInfo.Attr = $10) Then AttrList[NumFiles] := '' Else Str(DirInfo.Size, AttrList[NumFiles]); AttrList[NumFiles] := Concat(AttrList[NumFiles], Copy(S, 1, 9 - Length(AttrList[NumFiles]))); FindNext(DirInfo); end; First := 1; Pos := 1; Repeat For Cont := First To First + 15 do begin If (Cont - First + 1 = Pos) Then begin TextBackground(Blue); TextColor(Yellow); end Else begin TextBackGround(Black); TextColor(LightGray); end; GotoXY(30, Cont - First + 3); Write(' ', List[Cont], ' ', AttrList[Cont]); end; C := ReadKey; If (C = #72) Then If (Pos > 1) Then Dec(Pos, 1) Else If (First > 1) Then Dec(First,1); If (C = #80) Then If (Pos < 15) Then Inc(Pos, 1) Else If (First + 15 < NumFiles) Then Inc(First,1); Until (Ord(c) = 13); end.