[Back to OOP SWAG index]  [Back to Main SWAG index]  [Original]

{
From: BRIAN RICHARDSON
Subj: Efficient Tv2
---------------------------------------------------------------------------
 On 10-08-93 FRANK DERKS wrote to ALL...

  Hello All,

  for those who have read my other message (Efficient TV, Thu 07). Maybe
  some of you can expand on the following idea. How do I create a
  'dynamic' pick list box: a box that is displayed only when I have

  Or maybe more simple : what I'm after is a sort of inputline-object
  which can be cycled through a number of predefined values. }

uses objects, app, dialogs, drivers;

type
   PRoomInputLine = ^TRoomInputLine;
   TRoomInputLine = object(TInputLine)
     StatusList : PStringCollection;
     Index      : integer;

     constructor Init(var Bounds: TRect; AMaxLen: integer;
                      AStatusList : PStringCollection);
     procedure HandleEvent(var Event : TEvent); virtual;
     procedure Up; virtual;
     procedure Down; virtual;
   end;

   PRoomDialog = ^TRoomDialog;
   TRoomDialog = object(TDialog)
      constructor Init(List : PStringCollection);
   end;

constructor TRoomInputLine.Init(var Bounds : TRect; AMaxLen: Integer;
                              AStatusList : PStringCollection);
begin
   inherited Init(Bounds, AMaxLen);
   StatusList := AStatusList;
   Index := 0;
   SetData(PString(StatusList^.At(Index))^);
end;

procedure TRoomInputLine.Up;
begin
   Index := (Index + 1) Mod StatusList^.Count;
   SetData(PString(StatusList^.At(Index))^);
end;


procedure TRoomInputLine.Down;
begin
   if Index = 0 then Index := (StatusList^.Count - 1) else
   Dec(Index);
   SetData(PString(StatusList^.At(Index))^);
end;

procedure TRoomInputLine.HandleEvent(var Event: TEvent);
begin
   if (Event.What = evKeyDown) then begin
      case Event.KeyCode of
         kbUp     : Up;
         kbDown   : Down;
      else
      inherited HandleEvent(Event);
      end; end else
   inherited HandleEvent(Event);
end;

constructor TRoomDialog.Init(List : PStringCollection);
var R: TRect;
begin
   R.Assign(20, 5, 60, 20);
   inherited Init(R, '');
   R.Assign(15, 7, 25, 8);
   Insert(New(PRoomInputLine, Init(R, 20, List)));
   R.Assign(15, 9, 25, 10);
   Insert(New(PRoomInputLine, Init(R, 20, List)));

end;

var
   RoomApp  : TApplication;
   List     : PStringCollection;
begin
   RoomApp.Init;
   List := New(PStringCollection, Init(3, 1));
   with List^ do begin
      Insert(NewStr('Vacant')); Insert(NewStr('Occupied'));
      Insert(NewStr('Cleaning'));
   end;
   Application^.ExecuteDialog(New(PRoomDialog, Init(List)), nil);
   Dispose(List, Done);
   RoomApp.Done;
end.


[Back to OOP SWAG index]  [Back to Main SWAG index]  [Original]