UI2.PAS 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477
  1. Uses Core,Win2K2,CoolKey,ccontr;
  2. { ˆá¯®«ì§ã¥¬ë¥ ¬®¤ã«¨ -
  3. Core - Žá­®¢­®© ¬®¤ã«ì ªãàᮢ¨ª , á ¬® ¬®¤¥«¨à®¢ ­¨¥. (C) IE 2002
  4. Win2K2 - ƒà ä¨ç¥áª¨© ¬®¤ã«ì, ¯® ¢®§¬®¦­®áâ¨,  ­ «®£¨ï ¨¤¥«®«®£¨¨
  5. Win32 API (C) Microsoft. Win2k2 (C) IE
  6. CoolKey - Œ®¤ã«ì ­¨§ª®ãªà®¢­¥¢®© à ¡®âë á ª« ¢¨ âãன, ¨á¯®«ì§ã¥âáï ¢ Win2k2,
  7. ¢ £®«®¢­®© ¯à®£à ¬¬¥ ­¥®¡å®¤¨¬ ¤«ï ª« ¢¨ âãà­ëå ª®­áâ ­â
  8. CContr - Œ®¤ã«ì ¤«ï à ¡®âë á Win2k2, ¢ ­¥¬ ॠ«¨§®¢ ­ë ®á­®¢­ë¥ í«¥¬¥­âë
  9. ¨­â¥àä¥©á  (EditBox, CheckBox, Button, XYPlot)}
  10. TYPE
  11. {‘®áâ®ï­¨¨ï á¨á⥬ë}
  12. EStatus = (ST_WAITING, {‘¨á⥬  ®¦¨¤ ¥â áâ àâ }
  13. ST_RUNNING, {‘¨á⥬  ¢ á®áâ. à ¡®âë}
  14. ST_FINISHED) {‘¨á«¥¬  § ¢¥à訫  ¬®¤¥«¨à®¢ ­¨¥};
  15. const
  16. AStatus : array [EStatus] of string[15] = ('Waiting','Running', 'Finished');
  17. {‘®®¡é¥­¨ï ® á®áâ®ï­¨¨ á¨á⥬ë}
  18. var
  19. TextOut : Text; {” ©«®¢ë© ¤¥áªà¨¯â®à ⥪á⮢®£® ¢ë¢®¤  १ã«ìâ â®¢}
  20. RunNum : Integer; {�®¬¥à § ¯ã᪠ á¨á⥬ë (¯® ­¥¬ã à §«¨ç îâáï ä ©«ë ¢ë¢®¤ }
  21. RunMode : boolean; {�¥¦¨¬ à ¡®âë (à ¡®ç¨©/®â« ¤®ç­ë©)}
  22. Parent : hWNd; {Handle ®á­®¢­®£® ®ª­  ¯à®£à ¬¬ë}
  23. Stat : EStatus; {’¥ªã饥 à ¡®ç¥¥ á®áâ®ï­¨¥}
  24. OCButtons : Array [1..2] of hWnd; {Handl'ë ª­®¯®ª [1] - OK, [2] - Stop}
  25. Edits : array [1..9] of hWnd; {Handl'ë ¯®«¥© ¢¢®¤ }
  26. Checks : array [0..5] of hWnd; {Handl'ë ¢ë¡¨à ¥¬ëå ª­®¢®¯}
  27. Mode : hWnd; {Handle ᥫ¥ªâ®à  ०¨¬ }
  28. Limits : array [1..2] of hWnd; {Handl'ë ⥪á⮢ëå ¯®«¥© £à ­¨æ £à ä¨ª }
  29. Realiz : hWnd; {Handle ¯®«ï ¢¢®¤  ç¨á«  ॠ«¨§ æ¨©}
  30. RealNum : UINT32; {‘ ¬® ç¨á«® ॠ«¨§ æ¨©}
  31. CurReal : UINT32; {’¥ªã騩 ­®¬¥à à ¥«¨§ æ¨¨, ¨á¯®«ì§¥ãâáï
  32. ¨á«îç¨â¥«ì­® ¤«ï à ¢­®¬¥à­®£® à á¯à¥¤¥«¥­¨ï
  33. â®ç¥ª ¢ ०¨¬¥ ®â« ¤ª¨}
  34. Plot : hWnd; {Handle £à ä¨ª }
  35. {„¨­ ¬¨ç¥áª¨¥ ®¡ê¥ªâë - í«¥¬¥­âë á¨áâ¥¬ë ¬ áᮢ®£® ®¡á«ã¦¨¢ ­¨ï}
  36. { ޝ¨á ­¨¥ - á¬. § £®«®¢®ª ¬®¤ã«ï Core.pas}
  37. Model : ^CModel;
  38. Buffer : PBuffer;
  39. Device : PDevice;
  40. Srcs1, Srcs2,Srcs3 : PSource;
  41. BegVal, {� ç «ì­ë¥/ª®­¥ç­ë¥ §­-ï ᪮à®á⨠¯à¨¡®à }
  42. LastVal : Real;
  43. Steps : integer; {—¨á«® è £®¢ ®â ­ ç «ì­®£® ª ª®­¥ç­®¬ã §­-î ¯à¨¡®à 
  44. (ç¨á«® â®ç¥ª ­  £à ä¨ª¥)}
  45. CurStep : integer; {’¥ªã騩 è £}
  46. BufferSize : integer; {…¬ª®áâì ¡ãä¥à  ¬®¤¥«¨}
  47. S1,S2,S3 : Real; {‘ª®à®á⨠¨áâ®ç­¨ª®¢}
  48. Delta, DovInt : real; {� áâனª¨ ¢¥à®ïâ­®á⥩}
  49. {----------------------------------------------------------------}
  50. Function GetFloat(aH:hWND):real; {”ã­ªæ¨ï áç¨â뢠¥â ¢¥é¥á⢥­­®¥ §­-¥ ¨§ ¯®«ï
  51. ¢¢®¤ }
  52. var
  53. st : string;
  54. ret : real;
  55. i : integer;
  56. begin
  57. GetWindowText(AH,@st,255);
  58. Val(st,ret,i);
  59. GetFloat := ret;
  60. end;
  61. {----------------------------------------------------------------}
  62. Procedure GetParams; {‘ç¨â뢠­¨¥ ¢á¥å §­-­¨© ¨§ ¯®«¥© ¢¢®¤ }
  63. var
  64. st : string[50];
  65. i : integer;
  66. v : real;
  67. begin
  68. BegVal := GetFloat(Edits[3]);
  69. LastVal := GetFloat(Edits[4]);
  70. DovInt := GetFloat(Edits[2]);
  71. DovInt := DovInt*DovInt;
  72. Steps := Round(GetFloat(Edits[5]));
  73. BufferSize := Round(GetFloat(Edits[6]));
  74. S1 := Getfloat(Edits[7]);
  75. S2 := Getfloat(Edits[8]);
  76. S3 := Getfloat(Edits[9]);
  77. GetWindowText(Edits[1],@st,50);
  78. if st[ord(st[0])] = '%' then
  79. begin
  80. Val(copy(st,1,ord(st[0])-1),v,i);
  81. Delta := v/100.0;
  82. end
  83. else
  84. Val(st,Delta,i);
  85. end;
  86. Procedure InitModel; {� ç «ì­ ï ¨­¨æ¨ «¨§ æ¨ï §­ ç¥­¨© ¬®¤¥«¨ ¨
  87. ¨­¨æ¨ «¨§ æ¨ï ¤¨­ ¬¨ç¥áª¨å ®¡ê¥ªâ®¢}
  88. begin
  89. Delta := 0.1;
  90. DovInt := 1.64;
  91. BegVal := 1.0;
  92. LastVal := 5.0;
  93. Steps := 20;
  94. BufferSize := 5;
  95. S1 := 2.0;
  96. S2 := 1.0;
  97. S3 := 5.0;
  98. New(Buffer, Init(BufferSize));
  99. New(Device, Init(BegVal));
  100. New(Model, Init(3,Device,Buffer,Delta,DovInt));
  101. New(Srcs1,Init(0,S1));
  102. Model^.AddNewSource(Srcs1);
  103. New(Srcs2,Init(1,S2));
  104. Model^.AddNewSource(Srcs2);
  105. New(Srcs3,Init(2,S3));
  106. Model^.AddNewSource(Srcs3);
  107. end;
  108. Procedure StartModel; {�à®æ¥¤ãà  ¯®¤£®â®¢ª¨ ¨ áâ àâ  ¬®¤¥«¨à®¢ ­¨ï ¯à¨
  109. 㪠§ ­­ëå §­ ç¥­¨ïå}
  110. var
  111. XY : TRPoint;
  112. nm : string;
  113. i : UINT8;
  114. begin
  115. Buffer^.SetBufferSize(BufferSize);
  116. Device^.Lambda := BegVal;
  117. Model^.Delta := Delta;
  118. Model^.DovInt := DovInt;
  119. Srcs1^.Lambda := S1;
  120. Srcs2^.Lambda := S2;
  121. Srcs3^.Lambda := S3;
  122. Model^.Start;
  123. for i := 0 to 5 do
  124. SendMessage(Plot,WM_SETVISIBLE,i,SendMessage(Checks[i],CB_GETCHECK,0,0));
  125. S1 := GetFloat(Realiz);
  126. RealNum := round(S1);
  127. Model^.RealizSteps := RealNum;
  128. if RunMode then
  129. begin
  130. Model^.CalcVer := true;
  131. XY.X:=0;
  132. XY.Y:=Steps;
  133. for i := 0 to 5 do
  134. begin
  135. SendMessage(Plot,XP_DELALLPOINTS,i,0);
  136. SendMessage(Plot,XP_SETXRANGE,i,UINT32(@XY));
  137. end;
  138. str(Steps,nm);
  139. SetWindowText(Limits[2],@nm);
  140. str(RunNum,nm);
  141. Inc(RunNum);
  142. nm := 'result.'+nm;
  143. Assign(TextOut,nm);
  144. Rewrite(TextOut);
  145. end
  146. else
  147. begin
  148. Model^.CalcVer := false;
  149. Str(RealNum,nm);
  150. SetWindowText(Limits[2],@nm);
  151. XY.X:=1;
  152. XY.Y:=RealNum;
  153. CurReal:=0;
  154. for i := 0 to 2 do
  155. begin
  156. SendMessage(Plot,XP_DELALLPOINTS,i,0);
  157. SendMessage(Plot,XP_SETXRANGE,i,UINT32(@XY));
  158. SendMessage(Plot,WM_SETVISIBLE,i,SendMessage(Checks[i],CB_GETCHECK,0,0));
  159. end;
  160. for i := 3 to 5 do
  161. begin
  162. SendMessage(Plot,XP_DELALLPOINTS,i,0);
  163. SendMessage(Plot,WM_SETVISIBLE,i,0);
  164. end;
  165. end;
  166. CurStep := 0;
  167. end;
  168. {Žá­®¢­®© ®¡à ¡®â稪 á®®¡é¥­¨© (messages) ®â á¨á⥬ë (£à ä¨ç¥áª®£® ¬®¤ã«ï).
  169. �® ¨¤¥®«®£¨¨ Win32 API (C) Microsoft - ®á­®¢­ ï ¯à®æ¥¤ãà  ¢á¥© ¯à®£à ¬¬ë,
  170. ¢ ­¥© § ¤ ¥âáï ¢áï ॠªæ¨ï ­  ¤¥©áâ¢¨ï ¯®«ì§®¢ â¥«ï, ­ à ¢­¥ á ¢­ãâ७­¥©
  171. «®£¨ª®© ¯à®£à ¬¬ë}
  172. Function WindowProc(ahWnd:HWND;aMsg,wParam,lParam:UINT32):UINT32;far;
  173. var
  174. ps : LPPAINTSTRUCT;
  175. XY,Max : TRPoint;
  176. st : string;
  177. i : UINT8;
  178. rt : RECT;
  179. begin
  180. case aMsg of
  181. WM_CREATE: {�¥à¢®¥ á®®¡é¥­¨¥ ¯®á«¥ á®§¤ ­¨ï ®ª­ , ¢ ­¥¬ - ¨­¨æ¨ «¨§ æ¨ï
  182. ¨ á®§¤ ­¨¥ ¢á¥å ¤®ç¥à­¨å ®ª®­ (¯®«¥© ¢¢®¤ , ¨ ¯à®ç.)}
  183. begin
  184. OCButtons[1] := CreateWindow('OK','BUTTON',WS_CHILD,
  185. 66,350,50,30,ahWnd,NULL);
  186. PostMessage(OCButtons[1],CB_SETID,1,0);
  187. OCButtons[2] := CreateWindow('Exit','BUTTON',WS_CHILD,
  188. 152,350,60,30,ahWnd,NULL);
  189. PostMessage(OCButtons[2],CB_SETID,2,0);
  190. CreateWindow('Veroyatn','LABEL',WS_CHILD,
  191. 10,10,140,15,ahWnd,NULL);
  192. Edits[1]:=CreateWindow('10%','EDIT',WS_CHILD,
  193. 150,10,140,15,ahWnd,NULL);
  194. CreateWindow('Dov. Int','LABEL',WS_CHILD,
  195. 10,30,140,15,ahWnd,NULL);
  196. Edits[2]:=CreateWindow('0.82','EDIT',WS_CHILD,
  197. 150,30,140,15,ahWnd,NULL);
  198. CreateWindow('Beg. Lam prib','LABEL',WS_CHILD,
  199. 10,50,140,15,ahWnd,NULL);
  200. Edits[3]:=CreateWindow('1.0','EDIT',WS_CHILD,
  201. 150,50,140,15,ahWnd,NULL);
  202. CreateWindow('End Lam prib','LABEL',WS_CHILD,
  203. 10,70,140,15,ahWnd,NULL);
  204. Edits[4]:=CreateWindow('5.0','EDIT',WS_CHILD,
  205. 150,70,140,15,ahWnd,NULL);
  206. CreateWindow('Steps','LABEL',WS_CHILD,
  207. 10,90,140,15,ahWnd,NULL);
  208. Edits[5]:=CreateWindow('20','EDIT',WS_CHILD,
  209. 150,90,140,15,ahWnd,NULL);
  210. CreateWindow('Buf size','LABEL',WS_CHILD,
  211. 10,110,140,15,ahWnd,NULL);
  212. Edits[6]:=CreateWindow('5','EDIT',WS_CHILD,
  213. 150,110,140,15,ahWnd,NULL);
  214. CreateWindow('Lambda 1','LABEL',WS_CHILD,
  215. 10,130,140,15,ahWnd,NULL);
  216. Edits[7]:=CreateWindow('2.0','EDIT',WS_CHILD,
  217. 150,130,140,15,ahWnd,NULL);
  218. CreateWindow('Lambda 2','LABEL',WS_CHILD,
  219. 10,150,140,15,ahWnd,NULL);
  220. Edits[8]:=CreateWindow('1.0','EDIT',WS_CHILD,
  221. 150,150,140,15,ahWnd,NULL);
  222. CreateWindow('Lambda 3','LABEL',WS_CHILD,
  223. 10,170,140,15,ahWnd,NULL);
  224. Edits[9]:=CreateWindow('5.0','EDIT',WS_CHILD,
  225. 150,170,140,15,ahWnd,NULL);
  226. Plot := CreateWindow('Test plot','XYPLOT',WS_CHILD,310,10,300,300,ahWnd,NULL);
  227. SendMessage(Plot,XP_SETPLOTCOUNT,6,0);
  228. SendMessage(Plot,XP_SETCOLOR,0,Red);
  229. SendMessage(Plot,XP_SETCOLOR,1,Green);
  230. SendMessage(Plot,XP_SETCOLOR,2,Blue);
  231. SendMessage(Plot,XP_SETCOLOR,3,Magenta);
  232. SendMessage(Plot,XP_SETCOLOR,4,Yellow);
  233. SendMessage(Plot,XP_SETCOLOR,5,White);
  234. XY.X:=0;
  235. XY.Y:=100;
  236. SendMessage(Plot,XP_SETYRANGE,0,UINT32(@XY));
  237. SendMessage(Plot,XP_SETYRANGE,1,UINT32(@XY));
  238. SendMessage(Plot,XP_SETYRANGE,2,UINT32(@XY));
  239. Limits[1] := CreateWindow('0','LABEL',WS_CHILD,310,320,20,15,ahWnd,NULL);
  240. Limits[2] := CreateWindow('20','LABEL',WS_CHILD,560,320,50,15,ahWnd,NULL);
  241. Checks[0] := CreateWindow('Ist1 Potk (Red)','CHECKBOX',WS_CHILD,
  242. 10,200,200,15,ahWnd,NULL);
  243. SendMessage(Checks[0],CB_SETCHECK,0,0);
  244. Checks[1] := CreateWindow('Ist2 Potk (Green)','CHECKBOX',WS_CHILD,
  245. 10,220,200,15,ahWnd,NULL);
  246. SendMessage(Checks[1],CB_SETCHECK,1,0);
  247. Checks[2] := CreateWindow('Ist3 Potk (Blue)','CHECKBOX',WS_CHILD,
  248. 10,240,200,15,ahWnd,NULL);
  249. SendMessage(Checks[2],CB_SETCHECK,0,0);
  250. Checks[3] := CreateWindow('Ist1 MatO (Magenta)','CHECKBOX',WS_CHILD,
  251. 10,260,200,15,ahWnd,NULL);
  252. SendMessage(Checks[3],CB_SETCHECK,0,0);
  253. Checks[4] := CreateWindow('Ist2 MatO (Yellow)','CHECKBOX',WS_CHILD,
  254. 10,280,200,15,ahWnd,NULL);
  255. SendMessage(Checks[4],CB_SETCHECK,1,0);
  256. Checks[5] := CreateWindow('Ist3 MatO (White)','CHECKBOX',WS_CHILD,
  257. 10,300,200,15,ahWnd,NULL);
  258. SendMessage(Checks[5],CB_SETCHECK,0,0);
  259. Mode := CreateWindow('Test mode','CHECKBOX', WS_CHILD,
  260. 210,200,100,15, ahWnd, NULL);
  261. CreateWindow('KMIN','LABEL',WS_CHILD,210,220,50,15,ahWnd,NULL);
  262. Realiz := CreateWindow('1000','EDIT',WS_CHILD,210,240,70,15,ahWnd,NULL);
  263. SendMessage(Mode,CB_SETCHECK,0,0);
  264. RunMode := true;
  265. SendMessage(Mode,CB_SETID,90,0);
  266. Randomize;
  267. Stat := ST_WAITING;
  268. for i := 0 to 5 do SendMessage(Checks[i],CB_SETID,i+100,0);
  269. InitModel;
  270. RunNum := 0;
  271. PostMessage(ahWnd,WM_PAINT,0,0);
  272. AddOnFrameMessage(ahWnd);
  273. end;
  274. WM_COMMAND:
  275. {Ž¡à ¡®â稪 ª®¬ ­¤ ®â ª®­à®«®¢ (ª­®¯®ª, ¯®«¥© ¢¢®¤ , ª­®¯®ª ¢ë¡®à )}
  276. begin
  277. case wParam of
  278. 1: if (lParam = 0) and (Stat <> ST_RUNNING) then begin {OK button pressed}
  279. GetParams;
  280. StartModel;
  281. Stat := ST_RUNNING;
  282. St := 'STOP';
  283. SetWindowText(OCButtons[2],@St);
  284. PostMessage(ahWnd,WM_PAINT,0,0);
  285. PostMessage(OCButtons[2],WM_PAINT,0,0);
  286. end;
  287. 2: if lParam = 0 then {­ ¦ â  ª­®¯ª  STOP}
  288. begin
  289. if Stat = ST_RUNNING then
  290. begin
  291. if RunMode then Close(TextOut);
  292. Stat := ST_WAITING;
  293. St := 'Exit';
  294. SetWindowText(OCButtons[2],@St);
  295. PostMessage(OCButtons[2],WM_PAINT,0,0);
  296. PostMessage(ahWnd,WM_PAINT,0,0);
  297. end
  298. else
  299. PostMessage(ahWnd,WM_DESTROY,0,0);
  300. end;
  301. 90: if lParam = 0 then begin {‚ª«/¢ëª« ०¨¬ ®â« ¤ª¨}
  302. RunMode := not RunMode;
  303. for i := 3 to 5 do
  304. SendMessage(Checks[i],WM_SETVISIBLE,UINT32(RunMode),0);
  305. end;
  306. end;
  307. if (wParam >= 100) and (wParam <=105) and (lParam = 0) then
  308. begin
  309. SendMessage(Plot,WM_SETVISIBLE,wParam-100,SendMessage(Checks[wParam-100],CB_GETCHECK,0,0));
  310. end;
  311. end;
  312. WM_ONFRAME:
  313. {Žá­®¢­®© ®¡à ¡®â稪 ¢á¥© ¯à®£à ¬¬ë, §¤¥áì - ¢­ãâ७ïï «®£¨ª . ‚ë§ë¢ îâáï
  314. ¬¥â®¤ë ®¡ê¥ªâ®¢ ¬®¤¥«¨ ¤«ï ®áãé¥á⢫¥­¨ï ¬®¤¥«¨à®¢ ­¨ï. ’ ª¦¥ ¯à®¨á室¨â
  315. ¤®¡ ¢«¥­¨¥ â®ç¥ª ­  £à ä¨ª, ¢ë¢®¤ ⥪á⮢®© ¨­ä®à¬ æ¨¨ ¢ ä ©«.}
  316. begin
  317. if Stat = ST_RUNNING then
  318. begin
  319. if Not Model^.Step then
  320. begin
  321. if Runmode then begin
  322. XY.X := CurStep;
  323. XY.Y := 100*Srcs1^.RefusedReq/Srcs1^.TotalReq;
  324. SendMessage(Plot,XP_ADDPOINT,0,UINT32(@XY));
  325. XY.Y := 100*Srcs2^.RefusedReq/Srcs2^.TotalReq;
  326. SendMessage(Plot,XP_ADDPOINT,1,UINT32(@XY));
  327. XY.Y := 100*Srcs3^.RefusedReq/Srcs3^.TotalReq;
  328. SendMessage(Plot,XP_ADDPOINT,2,UINT32(@XY));
  329. if (Srcs1^.DoneReq <> 0) then
  330. begin
  331. XY.Y := Srcs1^.MatWait/Srcs1^.DoneReq;
  332. SendMessage(Plot,XP_ADDPOINT,3,UINT32(@XY));
  333. end;
  334. if (Srcs2^.DoneReq <> 0) then
  335. begin
  336. XY.Y := Srcs2^.MatWait/Srcs2^.DoneReq;
  337. SendMessage(Plot,XP_ADDPOINT,4,UINT32(@XY));
  338. end;
  339. if (Srcs3^.DoneReq <> 0) then
  340. begin
  341. XY.Y := Srcs3^.MatWait/Srcs3^.DoneReq;
  342. SendMessage(Plot,XP_ADDPOINT,5,UINT32(@XY));
  343. end;
  344. Max.X := 0;
  345. Max.Y := 0;
  346. for i := 3 to 5 do
  347. begin
  348. SendMessage(Plot,XP_GETYRANGE,i,UINT32(@XY));
  349. if XY.Y > Max.Y then Max.Y := XY.Y;
  350. end;
  351. for i := 3 to 5 do
  352. SendMessage(Plot,XP_SETYRANGE,i,UINT32(@Max));
  353. PostMessage(Plot,WM_PAINT,0,0);
  354. Model^.PrintValues(TextOut);
  355. inc(CurStep);
  356. Device^.Lambda := BegVal + (LAstVal-BegVal)/Steps*Curstep;
  357. if CurStep = Steps+1 then
  358. begin
  359. Stat := ST_FINISHED;
  360. Close(TextOut);
  361. St := 'Exit';
  362. SetWindowText(OCButtons[2],@St);
  363. PostMessage(OCButtons[2],WM_PAINT,0,0);
  364. PostMessage(ahWnd,WM_PAINT,0,0);
  365. end
  366. else
  367. Model^.Start;
  368. end else
  369. begin
  370. Stat := ST_FINISHED;
  371. St := 'Exit';
  372. SetWindowText(OCButtons[2],@St);
  373. PostMessage(ahWnd,WM_PAINT,0,0);
  374. end;
  375. end
  376. else if not runmode then
  377. begin
  378. if CurReal = (RealNum div 100) then
  379. begin
  380. XY.X := Model^.CurStep;
  381. XY.Y := 100*Srcs1^.RefusedReq/Srcs1^.TotalReq;
  382. SendMessage(Plot,XP_ADDPOINT,0,UINT32(@XY));
  383. XY.Y := 100*Srcs2^.RefusedReq/Srcs2^.TotalReq;
  384. SendMessage(Plot,XP_ADDPOINT,1,UINT32(@XY));
  385. XY.Y := 100*Srcs3^.RefusedReq/Srcs3^.TotalReq;
  386. SendMessage(Plot,XP_ADDPOINT,2,UINT32(@XY));
  387. CurReal := -1;
  388. PostMessage(Plot,WM_PAINT,0,0);
  389. end;
  390. Inc(CurReal);
  391. end;
  392. end;
  393. end;
  394. WM_DESTROY:
  395. {‘®®¡é¥­¨¥, ¯à¨å®¤ï饥 ¯¥à¥¤ § ¢¥à襭¨¥¬ à ¡®âë ¯à®£à ¬¬ë,
  396. §¤¥áì ¯à®¨á室¨â ®á¢®¡®¦¤¥­¨¥ ¯ ¬ï⨠¨ ã­¨ç⮦¥­¨¥ ®¡ê¥ªâ®¢ ¬®¤¥«¨}
  397. begin
  398. if Stat <> ST_WAITING then begin
  399. Dispose(Model,Done);
  400. Dispose(Buffer,Done);
  401. Dispose(Device,Done);
  402. end;
  403. DelOnFrameMessage(ahWnd);
  404. PostQuitMessage(ahwnd);
  405. end;
  406. WM_KEYDOWN:
  407. {�¥ ªæ¨ï ­  ­ ¦ â¨¥ ª« ¢¨è¨ ª« ¢¨ âãàë}
  408. if wParam = ord(SC_ESCAPE) then PostMessage(ahWnd,WM_DESTROY,0,0);
  409. WM_PAINT:
  410. {Ž¡à ¡®â稪 ¯à®à¨á®¢ª¨ ®ª­ . ‚뢮¤¨â ⮫쪮 áâ âãá ¬®¤¥«¨à®¢ ­¨ï, ¢áï
  411. ®áâ «ì­ ï ¯à®à¨á®¢ª  ¢ë¯®«­ï¥âáï ¤®ç¥à­¨¬¨ ®ª­ ¬¨ á ¬®áâ®ï⥫쭮}
  412. begin
  413. ps := BeginPaint(ahWNd);
  414. wSetColor(ps,GlobalPalette.WindowFontColor);
  415. wSetBgColor(ps,GlobalPalette.ThreeDColor1);
  416. wSetStyle(ps,SolidFill);
  417. wSetFontJustify(ps,CenterText,BottomText);
  418. GetClientRect(ahWnd,@rt);
  419. wBar(ps,0,rt.b.y - 20, rt.b.x,rt.b.y);
  420. wTextOut(ps,rt.b.x shr 1, rt.b.y-1, @AStatus[Stat]);
  421. EndPaint(ps);
  422. end;
  423. end;
  424. end;
  425. {ƒŽ‹Ž‚€.}
  426. begin
  427. if InitWin2K2 = ERR_OK then {ˆ­¨æ. £à ä¨ç¥áª®© ¯®¤á¨á⥬ë}
  428. if RegisterClass('MSMO',WindowProc) = ERR_OK then
  429. {�¥£¨áâà æ¨ï ª« áá , á â ª¨¬ ®¡à ¡®â稪®¬ ᮡë⨩}
  430. begin
  431. InitCommonControls; {ˆ­¨æ¨ «¨§ æ¨ï áâ ­¤ àâ­ëå ª« áᮢ}
  432. Parent:=CreateWindow('Configuration','MSMO',
  433. WS_TITLE OR WS_SIZEABLE OR WS_MINMAX,
  434. 10,10,620,420,
  435. NULL,NULL);
  436. {‘®§¤ ­¨¥ ®á­®¢­®£® ®ª­ }
  437. MainRunLoop; {Žá­®¢­®© 横« ¯à®£à ¬¬ë}
  438. end;
  439. DoneWin2K2; {‡ ¢¥à襭¨¥ à ¡®âë £à ä¨ç¥áª®© ¯®¤á¨á⥬ë}
  440. end.