home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* XGADGETS.PAS *)
- (* *)
- (* Ein Turbo Vision Wecker *)
- (* (C) 1992 by Christian Ohr & DMV-Verlag *)
- (* ------------------------------------------------------ *)
- {$R-,S-,I-,B-,D-,L-,V-,A+,F+,O+,X+}
-
- UNIT XGadgets;
-
-
- INTERFACE
-
-
- USES Dos, Objects, Drivers, Views, Dialogs, Gadgets, App;
-
-
- TYPE
- tTimeStr = STRING[8];
- tMsgStr = STRING[45];
-
- tTimeDlgRec = RECORD
- _LastTime: tTimeStr;
- _BuzzTime: tTimeStr;
- _AlarmMsg: tMsgStr;
- _BuzzMode: WORD;
- END;
-
-
- (* tBuzzer stellt einen Wecker zur Verfügung, der auf das *)
- (* tClockView-Objekt aufbaut. Zeitangaben sollten immer *)
- (* im Format hh:mm:ss eingegeben werden. Fehlende Minuten *)
- (* oder Sekunden entsprechen der Eingabe ':00' *)
-
- pBuzzer = ^tBuzzer;
- tBuzzer = OBJECT(tClockView)
- BuzzTime: DateTime;
- AlarmMsg: tMsgStr;
- BuzzMode: BOOLEAN;
- Buzzing : BOOLEAN;
-
- CONSTRUCTOR Init (VAR Bounds: tRect);
- PROCEDURE AddSnoozeTime;
- PROCEDURE Buzz; VIRTUAL;
- PROCEDURE Draw; VIRTUAL;
- PROCEDURE FormatDateTime (S: tTimeStr; VAR D: DateTime);
- VIRTUAL;
- PROCEDURE HandleEvent (VAR Event: tEvent); VIRTUAL;
- PROCEDURE Update; VIRTUAL;
- END;
-
-
- IMPLEMENTATION
-
-
- USES CRT, XDialogs;
-
-
- FUNCTION CreateBuzzDlg (VAR Msg: tMsgStr): pDialog;
- VAR
- R: tRect;
- C: pView;
- D: pDialog;
- M: tTitleStr;
- BEGIN
- R.Assign(0, 0, 50, 8);
- D := New(pDialog, Init(R, 'Alarm!'));
- WITH D^ DO BEGIN
- Options := Options OR ofCentered;
- R.Assign(2, 2, 48, 3);
- Insert(New(pStaticText, Init(R, #3 + Msg)));
-
- R.Assign(20, 5, 34, 7);
- Insert(New(pButton, Init(R, '~S~chlummer', cmYes,
- bfDefault)));
- R.Assign(36, 5, 46, 7);
- Insert(New(pButton, Init(R, '~A~us!', cmNo,
- bfNormal)));
-
- SelectNext(FALSE);
- END;
- CreateBuzzDlg := D;
- END;
-
-
- FUNCTION CreateTimeDlg: pDialog;
- VAR
- R: tRect;
- C: pView;
- D: pDialog;
- BEGIN
- R.Assign(0, 0, 31, 14);
- D := New(pDialog, Init(R, 'Zeit einstellen'));
- IF D <> NIL THEN
- WITH D^ DO BEGIN
- Options := Options OR ofCentered;
-
- R.Assign(18, 2, 28, 3);
- C := New(pInputLine, Init(R, 8));
- Insert(C);
- R.Assign(2, 2, 17, 3);
- Insert(New(pLabel, Init(R, '~S~ystem-Zeit', C)));
-
- R.Assign(18, 4, 28, 5);
- C := New(pInputLine, Init(R, 8));
- Insert(C);
- R.Assign(2, 4, 17, 5);
- Insert(New(pLabel, Init(R, '~A~larm-Zeit', C)));
-
- R.Assign(3, 7, 28, 8);
- C := New(pInputLine, Init(R, 45));
- Insert(C);
- R.Assign(2, 6, 18, 7);
- Insert(New(pLabel, Init(R, 'Alarm-~N~achricht', C)));
-
- R.Assign(9, 9, 28, 10);
- C := New(pRadioButtons, Init(R,
- NewSItem('A~n~',
- NewSItem('A~u~s', NIL))));
- Insert(C);
-
- R.Assign(6, 11, 16, 13);
- Insert(New(pButton, Init(R, 'O~k~', cmOk,
- bfDefault)));
- R.Move(12, 0); Inc(R.B.X);
- Insert(New(pButton, Init(R, 'Abbruch', cmCancel,
- bfNormal)));
- SelectNext(FALSE);
- END;
- CreateTimeDlg := D;
- END;
-
-
-
- (* ------------------------------------------------------ *)
- (* tBuzzer *)
- (* ------------------------------------------------------ *)
-
-
- CONSTRUCTOR tBuzzer.Init (VAR Bounds: tRect);
- BEGIN
- tClockView.Init(Bounds);
- FillChar(BuzzTime, SizeOf(BuzzTime), $00);
- BuzzMode := FALSE;
- AlarmMsg := '';
- END;
-
-
- PROCEDURE tBuzzer.AddSnoozeTime;
- BEGIN
- BuzzTime := LastTime;
- WITH BuzzTime DO BEGIN
- Inc(Min, 5);
- IF Min > 59 THEN BEGIN
- Dec(Min, 60);
- Inc(Hour);
- IF Hour > 23 THEN Hour := 0;
- END;
- END;
- END;
-
-
- PROCEDURE tBuzzer.Buzz;
- BEGIN
- Sound(1650); Delay(10); NoSound; Delay(30);
- END;
- PROCEDURE tBuzzer.Draw;
- BEGIN
- tClockView.Draw;
- IF BuzzMode THEN
- WriteChar(8, 0, #14, 4, 1) ELSE
- WriteChar(8, 0, #32, 4, 1);
- END;
-
-
- PROCEDURE tBuzzer.FormatDateTime (S: tTimeStr;
- VAR D: DateTime);
- VAR
- I: INTEGER;
- BEGIN
- Val(Copy(S, 1, 2), D.Hour, I);
- Val(Copy(S, 4, 2), D.Min, I);
- Val(Copy(S, 7, 2), D.Sec, I);
- END;
-
-
- PROCEDURE tBuzzer.HandleEvent (VAR Event: tEvent);
-
- PROCEDURE HandleDialog;
- VAR
- Rec: tTimeDlgRec;
- _Time: tTimeStr;
- BEGIN
- WITH Rec DO BEGIN
- WITH LastTime DO
- _LastTime := FormatTimeStr(Hour, Min, Sec);
- WITH BuzzTime DO
- _BuzzTime := FormatTimeStr(Hour, Min, Sec);
- _AlarmMsg := AlarmMsg;
- _BuzzMode := 1 - Ord(BuzzMode);
- _Time := _LastTime;
- IF ExecDialog(CreateTimeDlg, @Rec) <> cmCancel THEN
- BEGIN
- AlarmMsg := _AlarmMsg;
- BuzzMode := (_BuzzMode = 0);
- FormatDateTime(_BuzzTime, BuzzTime);
- IF _LastTime <> _Time THEN BEGIN
- FormatDateTime(_LastTime, LastTime);
- WITH LastTime DO SetTime(Hour, Min, Sec, 0);
- END;
- END;
- END;
- END;
-
- BEGIN
- IF Event.What = evMouseDown THEN BEGIN
- IF Event.Buttons = mbRightButton THEN
- BuzzMode := NOT BuzzMode ELSE HandleDialog;
- ClearEvent(Event);
- END;
- tClockView.HandleEvent(Event);
- END;
-
-
- PROCEDURE tBuzzer.Update;
- VAR
- P: pDialog;
- BEGIN
- tClockView.Update;
- IF BuzzMode THEN
- IF LastTime.Hour * 3600 + LastTime.Min * 60 +
- LastTime.Sec >= BuzzTime.Hour * 3600 + BuzzTime.Min *
- 60 + BuzzTime.Sec THEN BEGIN
- Buzz;
- IF NOT Buzzing THEN BEGIN
- Buzzing := TRUE;
- CASE ExecDialog(CreateBuzzDlg(AlarmMsg), NIL) OF
- cmYes : AddSnoozeTime;
- cmNo : BuzzMode := FALSE;
- END;
- Buzzing := FALSE;
- END;
- END;
- END;
-
- END.
-
-
- (* ------------------------------------------------------ *)
- (* Ende von XGADGETS.PAS *)
-