demostatuses.pas 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. program demostatuses;
  2. {$codepage utf8}
  3. uses
  4. {$ifdef UNIX}cwstring,{$endif}
  5. //Objects, Drivers, Views, Menus, Dialogs, App, Gadgets, Statuses, Time, fvconsts, FVCommon; { for legacy uncomment this line and comment next line }
  6. Objects, UDrivers, uViews, uMenus, uDialogs, uApp, uGadgets, uStatuses, Time, fvconsts, UFVCommon; { for unicode support uncomment this line and comment previous line }
  7. const cmOpenGaugeWindow =22351;
  8. cmOpenArrowGaugeWindow =22352;
  9. cmOpenArrowBackGaugeWindow =22353;
  10. cmOpenSpinnerGaugeWindow =22354;
  11. cmOpenPercentGaugeWindow =22355;
  12. cmOpenBarGaugeWindow =22356;
  13. cmStatusUp = 19883;
  14. type
  15. PClockViewCount= ^TClockViewCount;
  16. TClockViewCount = object(TClockView)
  17. PROCEDURE Update; Virtual;
  18. end;
  19. PStatusesApp = ^TStatusesApp;
  20. TStatusesApp = object(TApplication)
  21. Clock: PClockViewCount;
  22. Heap: PHeapView;
  23. constructor Init;
  24. procedure Idle; virtual;
  25. procedure HandleEvent(var Event: TEvent); virtual;
  26. procedure InitMenuBar; virtual;
  27. end;
  28. PROCEDURE TClockViewCount.Update;
  29. VAR Hour, Min, Sec, Sec100: Word;
  30. begin
  31. GetTime(Hour, Min, Sec, Sec100); { Get current time }
  32. If (Abs(Sec - LastTime) >= Refresh) Then Begin { Refresh time elapsed }
  33. inherited;
  34. Message(Owner,evStatus,cmStatusUpdate, pointer(ptruint(cmStatusUp))); { tell the world that second has passed }
  35. end;
  36. end;
  37. constructor TStatusesApp.Init;
  38. var
  39. R: TRect;
  40. begin
  41. Inherited Init;
  42. { Initialize demo Statuses }
  43. GetExtent(R);
  44. R.A.X := R.B.X - 9; R.B.Y := R.A.Y + 1;
  45. Clock := New(PClockViewCount, Init(R));
  46. Clock^.GrowMode:=gfGrowLoX+gfGrowHiX;
  47. Insert(Clock);
  48. GetExtent(R);
  49. Dec(R.B.X);
  50. R.A.X := R.B.X - 9; R.A.Y := R.B.Y - 1;
  51. Heap := New(PHeapView, Init(R));
  52. Heap^.GrowMode:=gfGrowAll;
  53. Insert(Heap);
  54. end;
  55. procedure TStatusesApp.Idle;
  56. begin
  57. TApplication.Idle;
  58. Clock^.Update;
  59. Heap^.Update;
  60. end;
  61. procedure TStatusesApp.InitMenuBar;
  62. var
  63. R: TRect;
  64. begin
  65. GetExtent(R);
  66. R.B.Y := R.A.Y + 1;
  67. MenuBar := New(PMenubar, Init(R, NewMenu(NewSubMenu('~M~enu', hcNoContext,
  68. NewMenu(
  69. NewItem('~G~auge', 'F2', kbF2, cmOpenGaugeWindow, hcNoContext,
  70. NewItem('~A~rrow gauge', 'F3', kbF3, cmOpenArrowGaugeWindow, hcNoContext,
  71. NewItem('Back a~r~row gauge', 'F4', kbF4, cmOpenArrowBackGaugeWindow, hcNoContext,
  72. NewItem('~S~pinner gauge', 'F5', kbF5, cmOpenSpinnerGaugeWindow, hcNoContext,
  73. NewItem('~P~ercente gauge', 'F6', kbF6, cmOpenPercentGaugeWindow, hcNoContext,
  74. NewItem('~B~ar gauge', 'F7', kbF7, cmOpenBarGaugeWindow, hcNoContext,
  75. nil)))))))
  76. ,
  77. nil))));
  78. end;
  79. procedure TStatusesApp.HandleEvent(var Event: TEvent);
  80. procedure StatusesDlg( aChoice : byte);
  81. var
  82. D: PDialog;
  83. G: PStatus;
  84. R : TRect;
  85. Title: Sw_String;
  86. begin
  87. R.Assign(13, 7, 55, 8);
  88. case aChoice of
  89. 1: G := new(PGauge,Init(R,cmStatusUp,1,12));
  90. 2: G := new(PArrowGauge,Init(R,cmStatusUp,1,12,true));
  91. 3: G := new(PArrowGauge,Init(R,cmStatusUp,1,12,false));
  92. 4: G := new(PSpinnerGauge,Init(13,7,cmStatusUp));
  93. 5: G := new(PPercentGauge,Init(R,cmStatusUp,1,12));
  94. 6: G := new(PBarGauge,Init(R,cmStatusUp,1,12));
  95. else
  96. exit; { none chosen }
  97. end;
  98. Title:='12 seconds to pass';
  99. if aChoice = 4 then
  100. Title:='Infinite seconds to pass';
  101. {$if sizeof(sw_string)<=8}
  102. D := New(PStatusMessageDlg,Init(Title, G , sdPauseButton or sdCancelButton,#3'Unicode symbols ◀ ◌ ◂ ◃ ◄ ◅ ◆ ◇ ◈ ◉ ◊'));
  103. {$else}
  104. D := New(PStatusMessageDlg,Init(Title, G , sdPauseButton or sdCancelButton,#3'Legacy gauge'));
  105. {$endif}
  106. if ExecuteDialog(D, nil) <> cmCancel then
  107. begin
  108. { task complete }
  109. end;
  110. end;
  111. begin
  112. inherited HandleEvent(Event);
  113. case Event.What of
  114. evCommand:
  115. begin
  116. case Event.Command of
  117. cmOpenGaugeWindow : StatusesDlg(1);
  118. cmOpenArrowGaugeWindow : StatusesDlg(2);
  119. cmOpenArrowBackGaugeWindow : StatusesDlg(3);
  120. cmOpenSpinnerGaugeWindow : StatusesDlg(4);
  121. cmOpenPercentGaugeWindow : StatusesDlg(5);
  122. cmOpenBarGaugeWindow : StatusesDlg(6);
  123. else
  124. Exit;
  125. end;
  126. ClearEvent(Event);
  127. end;
  128. end;
  129. end;
  130. var
  131. StatusesApp: TStatusesApp;
  132. begin
  133. StatusesApp.Init;
  134. StatusesApp.Run;
  135. StatusesApp.Done;
  136. end.