home *** CD-ROM | disk | FTP | other *** search
- {
- 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.
-