File: MANJUST\MJ_OLD.CPP
1 //#############################################################################
2 // //
3 // MJ_OLD.CPP //
4 // //
5 // Subsystem : alte Manuelle Justage / Oberfläche //
6 // Benutung durch andere Subsysteme erforderlich: JA //
7 //---------------------------------------------------------------------------//
8 // Quelle: verschoben aus M_DLG.CPP //
9 // Stand : 11.01.2003 //
10 // //
11 //#############################################################################
12
13 #include "internls\evrythng.h" // GermanVersion
14 #include "winresrc\rc_def.h" // Ressourcen-IDs
15 #include "help\help_def.h" // Help-IDs
16
17 #include "manjust\mj_old.h" // SCHNITTSTELLE für diese Datei
18
19 #include "workflow\workflow.h" // extern Steering
20
21 //--||--\\--||--//--||--\\--||--//--||--\\--||--//--||--\\--||--//--||--\\--||--
22
23 extern TSteering Steering; // aus M_STEERG.CPP
24 extern BOOL bManualMovesCorrected; // aus MAIN.CPP
25
26 //#############################################################################
27 // TAngleControlDlg
28 //#############################################################################
29
30 TAngleControlDlg::TAngleControlDlg(void): TModalDlg( "ANGLECONTROL", GetMainInstance() )
31 {
32 bMoveActive= FALSE; // Alle Motoren befinden sich im Stillstand
33 AskTime= 100; // Zeit für den Timer (msec)
34 bLongMove= FALSE; // Fahrbetrieb "aus" bei Initialisierung
35 bMeasureHwb= FALSE; // Halbwertsbreite noch nicht gemessen
36 bStepMode= TRUE; // Schrittbetrieb "ein" bei Initialisierung
37 // Liste der Geschwindigkeiten: Länge=Anzahl der Motoren
38 MoveSpeed= new double [mlGetAxisNumber()];
39 };
40
41 //! neu Kullmann+Reinecker
42 BOOL TAngleControlDlg::Dlg_OnInit(HWND hwnd, HWND hwndCtl, LPARAM lParam)
43 {
44 int cnt;
45
46 //Datum: 27.07.2002 TModalDlg::Dlg_OnInit(hwnd,hwndCtl,lParam);
47 nMotor= mlGetAxis(); // nMotor= Anzahl der Motoren bzw. Achsen
48 Sensor= TDetectorManager::DetectorManager().GetDetector(); // Pointer auf den akt. Sensor
49 BarHandle= GetDlgItem(hwnd, id_Bar); // Handle auf die Scrollbar
50 // Handle auf die Motorenliste, nicht zu verwechseln mit der Motorenliste
51 // MPlist, hier geht es um die Liste die in der Combobox erscheint
52 // Ist also nur Dialogbezogen
53 hMotorList= GetDlgItem(hwnd, id_ChooseMotor);
54 // Eingabetextfeld für Schrittbetrieb einblenden (d.h.Eingabe ist möglich)
55 EnableWindow(GetDlgItem(hwnd, id_AngleWidth), bStepMode);
56 // Eingabetextfeld für Geschwindigkeitsangabe eingrauen (keine Eingabe möglich)
57 EnableWindow(GetDlgItem(hwnd, id_SpeedValue), !bStepMode);
58 if (!mlIsAxisValid(Omega)) // Wenn Omega nicht da,
59 {
60 // dann blende die Schnellauswahl-Schaltelemente Beugung fein
61 // bzw. Omega(eng.) und "Halbwertsbreite messen" aus(eingrauen)
62 EnableWindow(GetDlgItem(hwnd, cm_SetFine), FALSE);
63 EnableWindow(GetDlgItem(hwnd, cm_MeasureHWB), FALSE);
64 }
65 if (!mlIsAxisValid(Psi)) // Wenn Psi nicht da,
66 // dann Schnellauswahlschalter Tilt ausblenden (eingrauen)
67 EnableWindow(GetDlgItem(hwnd, cm_SetTilt), FALSE);
68 if (!Steering.GetMacroById(InquireHwb)) // Wenn das Makro InquireHWB nicht
69 //verfügbar, dann "Halbwertsbreite messen" ausblenden (eingrauen)
70 EnableWindow(GetDlgItem(hwnd, cm_MeasureHWB), FALSE);
71 if (!mlIsAxisValid(Collimator)) // Wenn Achse Collimator nicht verfügbar ist,
72 // dann blende "Collimator" aus der Schnellauswahl aus (eingrauen)
73 EnableWindow(GetDlgItem(hwnd, cm_SetCollimator), FALSE);
74 // Den Checkbutton "Fahren" als nichtgedrückt(Schalter aus) kennzeichnen
75 CheckDlgButton(hwnd, id_LongMoveMode, !bStepMode);
76 cnt= 0;
77 while (cnt < mlGetAxisNumber()) // alle Achsen durchgehen
78 {
79 mlSetAxis(cnt++); // alle Achsen durchgehen und jede Achse in die
80 ComboBox_AddString(hMotorList, mGetAxisName()); // Motorenliste eintragen
81 }
82 // Timer setzen für Multitasking bei Windows 3.1 (unechtes MT)
83 SetTimer(hwnd, TimerIdInformation, AskTime, NULL);
84 // Sichern der Motor-Einstellungen
85 for (cnt= 0; cnt < mlGetAxisNumber(); cnt++)
86 {
87 mlSetAxis(cnt);
88 mPushSettings();
89 //Geschwindigkeiten für die einzelnen Motoren eintragen
90 MoveSpeed[cnt]= mGetValue(Speed);
91 }
92 mlSetAxis(nMotor);
93 FORWARD_WM_COMMAND(hwnd, cm_MotorInit, hwndCtl, 0, SendMessage);
94 FORWARD_WM_COMMAND(hwnd, cm_ParamSet, hwndCtl, 0, SendMessage);
95
96 bMoveActive= TRUE;
97 SetTimer(hwnd, TimerIdInformation, AskTime, NULL);
98
99 // HotKey's Hilfe laden (nur Win32)
100 LoadHotKeys( LoadAccelerators(GetMainInstance(), MAKEINTRESOURCE(ACC_AngleControl)) ); // Accelerator aus Ressourcen laden
101
102 return TRUE;
103 };
104
105 // Wurde vom Programierer höchstwahrscheinlich für Testzwecke verwendet
106 #define TestCall KillTimer(GetHandle(),TimerIdInformation); \
107 if(Motor->IsMoveFinish()) \
108 { \
109 if(!Motor->GetAngle(1)) \
110 { \
111 SetDefaultCursor( IDC_WAIT );\
112 SetTimer(GetHandle(),TimerIdInformation,AskTime,NULL);\
113 return TRUE; \
114 } \
115 bLongMove= FALSE; \
116 Motor->dAngleNew= Motor->dAngle; \
117 sprintf(buf,Motor->pOFmt(),Motor->dAngleNew); \
118 SetDlgItemText(GetHandle(),id_NewAngle,(LPSTR)buf); \
119 sprintf(buf,Motor->pOFmt(),Motor->dAngle); \
120 SetDlgItemText(GetHandle(),id_Angle,(LPSTR)buf); \
121 SetScrollPos(BarHandle,SB_CTL,GetBarPos(),TRUE); \
122 bMoveActive= FALSE; \
123 SetDefaultCursor( IDC_ARROW );\
124 } \
125 else \
126 { \
127 if(bLongMove) \
128 { \
129 Motor->GetAngle(0); \
130 sprintf(buf,Motor->pOFmt(),Motor->dAngle); \
131 SetDlgItemText(GetHandle(),id_Angle,(LPSTR)buf); \
132 SetScrollPos(BarHandle,SB_CTL,GetBarPos(),TRUE); \
133 } \
134 SetDefaultCursor( IDC_WAIT );\
135 } \
136
137
138 void TAngleControlDlg::Dlg_OnTimer(HWND hwnd,UINT id)
139 {
140 char buf[MaxString];
141 double dDistance;
142
143 SCROLLINFO scrInfo;
144 scrInfo.cbSize= sizeof(SCROLLINFO);
145 scrInfo.fMask= SIF_POS;
146
147 switch (id)
148 {
149 case TimerIdInformation:
150 KillTimer(hwnd, TimerIdInformation);
151 if (mIsMoveFinish())
152 {
153 if (!mGetDistance(dDistance))
154 {
155 SetDefaultCursor( IDC_WAIT );
156 SetTimer(hwnd, TimerIdInformation, AskTime, NULL);
157 return;
158 }
159 bLongMove= FALSE;
160 sprintf(buf, mGetDF(), dDistance);
161 SetDlgItemText(hwnd, id_NewAngle, (LPSTR)buf);
162 SetDlgItemText(hwnd, id_Angle, (LPSTR)buf);
163 scrInfo.nPos= GetBarPos();
164 SetScrollInfo(BarHandle,SB_CTL,&scrInfo,TRUE);
165 bMoveActive= FALSE;
166 SetFocus(BarHandle);
167 SetDefaultCursor( IDC_ARROW );
168 }
169 else
170 {
171 if (bLongMove)
172 {
173 sprintf(buf, mGetDF(), mGetDistanceProcess());
174 SetDlgItemText(hwnd, id_Angle, buf);
175 }
176 SetDefaultCursor( IDC_WAIT );
177 SetTimer(hwnd, TimerIdInformation, AskTime, NULL);
178 }
179 }
180 };
181
182 void TAngleControlDlg::Dlg_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
183 {
184 static HWND hDlgItem;
185 long varl= 0;
186 int idx;
187 char buf[MaxString];
188
189 SCROLLINFO scrInfo;
190 scrInfo.cbSize= sizeof(SCROLLINFO);
191 switch (id)
192 {
193 case cm_Help:
194 WinHelp(GetHandle(), GetHelpFile(), HELP_CONTEXT, Help_AngleControlDlg);
195 break;
196
197 case cm_ParamSet:
198 // Wird mit relativen Positionen gearbeitet ?
199 if (mIsDistanceRelative())
200 // Wenn ja, dann aktiviere Schalter "Relative Null aufheben" (ausgrauen)
201 EnableWindow(GetDlgItem(hwnd, cm_CancelRelativeZero), TRUE);
202 else
203 // Ansonsten wird Schalter eingegraut
204 EnableWindow(GetDlgItem(hwnd, cm_CancelRelativeZero), FALSE);
205 sprintf(buf, mGetDF(), mGetValue(Distance));
206 // Position bei Textfeld "Winkel:" unter der Scrollbar eintragen
207 SetDlgItemText(hwnd, id_Angle, (LPSTR)buf);
208 // Textfeld "Neuer Winkel" bekommt erstmal den selben Wert
209 SetDlgItemText(hwnd, id_NewAngle, (LPSTR)buf);
210 // Aktuellen Antrieb in der Combobox anzeigen
211 ComboBox_SelectString(hMotorList, 0, mGetAxisName());
212 // Einheit vom aktuellen Antrieb hinter "Neuer Winkel" eintragen
213 SetDlgItemText(hwnd, id_Unit, mGetUnitName());
214 // Einheit vom akt. Antrieb hinter Schrittbetrieb eintragen
215 SetDlgItemText(hwnd, id_StepUnit, mGetUnitName());
216 // Initialisieren des Motor-Scroll-Bar´s
217 scrInfo.fMask= SIF_RANGE;
218 scrInfo.nMin= GetBarEgde(sbsLeft);
219 scrInfo.nMax= GetBarEgde(sbsRight);
220 SetScrollInfo(BarHandle,SB_CTL,&scrInfo,TRUE);
221 // Focus auf die Scrollbar setzen
222 SetFocus(BarHandle);
223 break;
224
225 case cm_SetAngleZero: // Relative Null setzen
226 // Wenn Motor aktiv, dann gleich wieder raus
227 if (bMoveActive)
228 break;
229 // Ansonsten rel. Null setzen
230 mSetRelativeZero(TRUE, mGetValue(Distance));
231 // entsprechend die Schalter ein- bzw. ausblenden
232 if (mIsDistanceRelative())
233 EnableWindow(GetDlgItem(hwnd, cm_CancelRelativeZero), TRUE);
234 else
235 EnableWindow(GetDlgItem(hwnd, cm_CancelRelativeZero), FALSE);
236 // Motor aktivieren
237 bMoveActive= bLongMove= TRUE;
238 // Motoreinstellungen sichern
239 mPushSettings();
240 SetTimer(hwnd, TimerIdInformation, AskTime, NULL);
241 SetFocus(BarHandle);
242 break;
243
244 case cm_CancelRelativeZero: // Relative Null aufheben
245 // Wenn der Motor in Benutzung, dann gleich abbrechen
246 if (bMoveActive)
247 break;
248 // relative Null für akt. Motor aufheben
249 mSetRelativeZero(FALSE, 0.0);
250 // Motor aktivieren
251 bMoveActive= bLongMove= TRUE;
252 SetTimer(hwnd, TimerIdInformation, AskTime, NULL);
253 // Schalter "Relative Null aufheben" ausblenden
254 EnableWindow(GetDlgItem(hwnd, cm_CancelRelativeZero), FALSE);
255 SetFocus(BarHandle);
256 break;
257
258 case cm_MotorInit:
259 // Moduswechsel, Shortcuts und Motorwechsel
260 // Textfeld für Schrittbetrieb ausgrauen oder auch nicht ("bStepMode")
261 EnableWindow(GetDlgItem(hwnd, id_AngleWidth), bStepMode);
262 // Wechselseitiger Ausschluß der Textfelder von Schrittbetrieb und
263 // Fahrbetrieb, je nachdem wie die bStepMode gesetzt ist
264 EnableWindow(GetDlgItem(hwnd, id_SpeedValue), !bStepMode);
265 // Checkbutton entsprechend von bStepMode setzen
266 CheckDlgButton(hwnd, id_StepMode, bStepMode);
267 if (bStepMode)
268 // Wenn Schrittbetrieb, dann Geschwindigkeit auf 10000 (akt. Motor)
269 mSetValue(Speed, 10000.0);
270 else
271 // Ansonsten setze den Speed so wie er in der "MoveSpeed"-Liste steht
272 mSetValue(Speed, MoveSpeed[nMotor]);
273 sprintf(buf, mGetSF(), mGetValue(Width));
274 // Schrittweite und Geschwindigkeit in den Textfelder eintragen
275 SetDlgItemText(hwnd, id_AngleWidth, (LPSTR)buf);
276 sprintf(buf, mGetDF(), (float)mGetValue(Speed));
277 SetDlgItemText(hwnd, id_SpeedValue, (LPSTR)buf);
278 // Aktiviere den Motor
279 mActivateDrive();
280 if (bManualMovesCorrected)
281 mSetCorrectionState(TRUE);
282 //####################################################################
283 // Überprüfung der Kalibrierungskurven Correction aktivieren
284 //####################################################################
285 // Initialisieren des Positions-Eingabefenster's
286 bMoveActive= TRUE;
287 #ifdef GermanVersion
288 if (mIsCalibrated())
289 sprintf(buf, "Manuelle Justage");
290 else
291 sprintf(buf, "Manuelle Justage : Kein gültiger Referenzpunktlauf");
297 #endif
298
299 SetWindowText(hwnd, (LPCSTR)buf);
300 SetTimer(hwnd, TimerIdInformation, AskTime, NULL);
301 break;
302
303 case id_StepMode: // Schrittbetrieb aktivieren
304 // Wenn Motor aktiviert, dann gleich wieder raus
305 if (bMoveActive)
306 break;
307 // wenn noch nicht in Schrittbetrieb
308 if (!bStepMode)
309 {
310 bStepMode= TRUE; // Flag setzen
311 // cm_MotorInit auslösen
312 SendMessage(hwnd, WM_COMMAND, cm_MotorInit, 0);
313 SetFocus(BarHandle);
314 }
315 else
316 {
317 // ansonsten Focus auf Eingabefeld setzen
318 SetFocus(GetDlgItem(hwnd, id_AngleWidth));
319 hDlgItem= GetDlgItem(hwnd, id_AngleWidth);
320 }
321 break;
322
323 case id_LongMoveMode: // Fahrbetrieb aktivieren
324 // wenn in Schrittbetrieb
325 if (bStepMode)
326 {
327 bStepMode= FALSE; // dann Flag auf false setzen
328 // cm_MotorInit ausführen
329 FORWARD_WM_COMMAND(hwnd, cm_MotorInit, 0, 0, SendMessage);
330 SetFocus(BarHandle);
331 }
332 else
333 {
334 // ansonsten Focus auf Eingabefeld setzen
335 hDlgItem= GetDlgItem(hwnd, id_SpeedValue);
336 ReplyMessage(varl);
337 SetFocus(GetDlgItem(hwnd, id_SpeedValue));
338 }
339 break;
340
341 case cm_MeasureHWB: // Halbwertsbreite messen
342 if (bMeasureHwb)
343 {
344 // Messung abbrechen
345 bMeasureHwb= FALSE;
346 Steering.ToggleInterrupt();
347 #ifdef GermanVersion
348 SetWindowText(GetDlgItem(hwnd, cm_MeasureHWB), "&Halbwertsbreite messen");
351 #endif
352 mlSetAxis(nMotor);
353 SendMessage(hwnd, WM_COMMAND, cm_MotorInit, 0);
354 SendMessage(hwnd, WM_COMMAND, cm_ParamSet, 0);
355 bMoveActive= TRUE;
356 SetTimer(hwnd, TimerIdInformation, AskTime, NULL);
357 break;
358 }
359 if (bMoveActive)
360 break;
361 bMeasureHwb= TRUE;
362 bMoveActive= TRUE;
363 Steering.Reset();
364 Steering.StartUp(hwnd, nMotor, Sensor);
365 Steering.Visualising( TRUE, FALSE );
366 #ifdef GermanVersion
367
368 SetWindowText(GetDlgItem(hwnd, cm_MeasureHWB), "&Messung abbrechen");
372 #endif
373 // Makro Inquire Hwb ausführen
374 Steering.StartMacroExecution(Steering.GetMacroById(InquireHwb), hwnd);
375 break;
376
377 case cm_CounterSet:
378 Sensor->UpdateViews(TRUE);
379 Steering.DetectorRequest();
380 break;
381
382 case cm_SteeringReady:
383 mlSetAxis(nMotor);
384 FORWARD_WM_COMMAND(hwnd, cm_MotorInit, 0, 0, SendMessage);
385 FORWARD_WM_COMMAND(hwnd, cm_ParamSet, 0, 0, SendMessage);
386 bMoveActive= TRUE;
387 SetTimer(hwnd, TimerIdInformation, AskTime, NULL);
388 MessageBeep(0);
389 bMeasureHwb= FALSE;
390 #ifdef GermanVersion
391 sprintf(buf, "HWB= %.2f Sekunden", Steering.GetHwb()); // ! neu Kullmann+Reinecker: fHwb durch Accessor-Methode GetHwb() ersetzt
392 SetInfo(buf);
393 SetWindowText(GetDlgItem(hwnd, cm_MeasureHWB), "&Halbwertsbreite messen");
398 #endif
399 break;
400
401 case id_ChooseMotor: // Motor aus der Combobox auswählen
402 if (codeNotify==CBN_SELCHANGE) {
403 idx= ComboBox_GetCurSel(hMotorList);
404 if ((idx != CB_ERR) && (nMotor != idx))
405 {
406 nMotor= idx;
407 mlSetAxis(nMotor);
408 FORWARD_WM_COMMAND(hwnd, cm_ParamSet, 0, 0, SendMessage);
409 FORWARD_WM_COMMAND(hwnd, cm_MotorInit, 0, 0, PostMessage);
410 }
411 }
412 break;
413
414 //Datum: 02.08.2002
415 /*case cm_RotateMotor: // Die Motoren in der Combobox rotieren
416 // der Schalter ist aber ausgeblendet im Dialog
417 if (bMoveActive) break;
418 if (!hDlgItem) break;
419 mlSetAxis(++nMotor); // einen Motor weiterschalten
420 nMotor= mlGetAxis(); // merken, welcher aktiv ist
421 FORWARD_WM_COMMAND(hwnd,cm_ParamSet,0,0,SendMessage);
422 FORWARD_WM_COMMAND(hwnd,cm_MotorInit,0,0,PostMessage);
423 break;*/
424
425 case cm_SetFine: // in Schnellauswahl "Beugung Fein" auswählen
426 if (bMoveActive)
427 break;
428 // Welche ID hat "Beugung Fein" ? Die Achse mit dieser ID aktivieren
429 mlSetAxis(mlGetIdByName(Omega));
430 nMotor= mlGetAxis(); // merken welcher Antrieb aktiviert ist
431 FORWARD_WM_COMMAND(hwnd, cm_ParamSet, 0, 0, SendMessage);
432 FORWARD_WM_COMMAND(hwnd, cm_MotorInit, 0, 0, PostMessage);
433 break;
434
435 case cm_SetTilt: // Tilt in Schnellauswahl auswählen
436 if (bMoveActive)
437 break;
438 // Analog wie oben
439 mlSetAxis(mlGetIdByName(Psi));
440 nMotor= mlGetAxis();
441 FORWARD_WM_COMMAND(hwnd, cm_ParamSet, 0, 0, SendMessage);
442 FORWARD_WM_COMMAND(hwnd, cm_MotorInit, 0, 0, PostMessage);
443 break;
444
445 case cm_SetCollimator: // Kollimator in Schnellauswahl auswählen
446 if (bMoveActive)
447 break;
448 // analog wie oben
449 mlSetAxis(mlGetIdByName(Collimator));
450 nMotor= mlGetAxis();
451 FORWARD_WM_COMMAND(hwnd, cm_ParamSet, 0, 0, SendMessage);
452 FORWARD_WM_COMMAND(hwnd, cm_MotorInit, 0, 0, PostMessage);
453 break;
454
455 case id_AngleWidth:
456 hDlgItem= GetDlgItem(hwnd, id_AngleWidth);
457 break;
458
459 case id_SpeedValue:
460 hDlgItem= GetDlgItem(hwnd, id_SpeedValue);
461 break;
462
463 case id_NewAngle:
464 hDlgItem= GetDlgItem(hwnd, id_NewAngle);
465 break;
466
467 case IDOK:
468 if (!hDlgItem)
469 {
470 TModalDlg::Dlg_OnCommand(hwnd, id, hwndCtl, codeNotify);
471 break;
472 }
473 // Der Nutzer hat mit Return eine neue Position, eine neue Geschwindigkeit
474 // oder eine neue Schrittweite eingegeben
475 for (;;)
476 {
477 if (hDlgItem == GetDlgItem(hwnd, id_AngleWidth))
478 {
479 GetDlgItemText(hwnd, id_AngleWidth, (LPSTR)buf, 10);
480 mSetValue(Width, atof(buf));
481 sprintf(buf, mGetSF(), mGetValue(Width));
482 SetDlgItemText(hwnd, id_AngleWidth, (LPSTR)buf);
483 scrInfo.fMask= SIF_RANGE | SIF_POS;
484 scrInfo.nMin= GetBarEgde(sbsLeft);
485 scrInfo.nMax= GetBarEgde(sbsRight);
486 scrInfo.nPos= GetBarPos();
487 SetScrollInfo(BarHandle,SB_CTL,&scrInfo,TRUE);
488 break;
489 }
490 if (hDlgItem == GetDlgItem(hwnd, id_NewAngle))
491 {
492 if (!bMoveActive)
493 {
494 GetDlgItemText(hwnd, id_NewAngle, (LPSTR)buf, 10);
495 bMoveActive= TRUE;
496 bLongMove= TRUE;
497 mMoveToDistance(atof(buf));
498 FORWARD_WM_COMMAND(hwnd, cm_MoveButton, 0, 0, PostMessage);
499 }
500 break;
501 }
502 if (hDlgItem == GetDlgItem(hwnd, id_SpeedValue))
503 {
504 GetDlgItemText(hwnd, id_SpeedValue, (LPSTR)buf, 10);
505 mSetValue(Speed, atof(buf));
506 MoveSpeed[nMotor]= mGetValue(Speed);
507 sprintf(buf, mGetSF(), (float)MoveSpeed[nMotor]);
508 SetDlgItemText(hwnd, id_SpeedValue, (LPSTR)buf);
509 break;
510 }
511 }
512 hDlgItem= NULL;
513 SetFocus(BarHandle);
514 break;
515
516 case cm_MoveButton:
517 bMoveActive= TRUE;
518 SetDefaultCursor( IDC_WAIT );
519 SetTimer(hwnd, TimerIdInformation, AskTime, NULL);
520 break;
521
522 default:
523 TModalDlg::Dlg_OnCommand(hwnd, id, hwndCtl, codeNotify);
524 }
525 };
526
527 void TAngleControlDlg::Interrupt(void)
528 {
529 mStopDrive(TRUE);
530 DelayTime(5);
531 };
532
533
534 void TAngleControlDlg::Dlg_OnHScrollBar(HWND hwnd, HWND hwndCtl, UINT code, int pos)
535 {
536 if (bMeasureHwb)
537 return;
538 switch (code)
539 {
540 case SB_LINEUP:
541 if (bMoveActive)
542 return;
543 if (bStepMode)
544 mMoveToDistance(mGetValue(Distance) - mGetValue(Width));
545 else
546 {
547 mMoveToDistance(mGetValue(MinDistance));
548 bLongMove= TRUE;
549 }
550 FORWARD_WM_COMMAND(hwnd, cm_MoveButton, 0, 0, SendMessage);
551 break;
552
553 case SB_LINEDOWN:
554 if (bMoveActive)
555 return;
556 if (bStepMode)
557 mMoveToDistance(mGetValue(Distance) + mGetValue(Width));
558 else
559 {
560 mMoveToDistance(mGetValue(MaxDistance));
561 bLongMove= TRUE;
562 }
563 FORWARD_WM_COMMAND(hwnd, cm_MoveButton, 0, 0, SendMessage);
564 break;
565
566 case SB_ENDSCROLL:
567 // Bewegung stoppen, wenn länger gefahren wurde
568 if (bLongMove)
569 Interrupt();
570 break;
571 }
572 };
573
574 int TAngleControlDlg::GetBarEgde(EScrollBarSide side)
575 {
576 long steps;
577 int ret;
578
579 if (side == sbsLeft)
580 {
581 steps= (long)((mGetValue(MaxDistance) - mGetValue(MinDistance)) / mGetValue(Width));
582 BarFactor= (int)(steps / 20000l) + 1;
583 ret= (int)(mGetValue(MinDistance) / (mGetValue(Width) * BarFactor));
584 }
585 else
586 {
587 ret= (int)(mGetValue(MaxDistance) / (mGetValue(Width) * BarFactor));
588 }
589 return ret;
590 };
591
592 int TAngleControlDlg::GetBarPos()
593 {
594 int ret;
595
596 ret= (int)(mGetValue(Distance) / (mGetValue(Width) * BarFactor));
597 return ret;
598 };
599
600 void TAngleControlDlg::LeaveDialog(void)
601 {
602 int cnt;
603
604 cnt= KillTimer(GetHandle(), TimerIdInformation);
605 if (Sensor != TDetectorManager::DetectorManager().GetDetector(0, 1))
606 {
607 Sensor->MeasureStop();
608 Sensor->PopSettings();
609 Sensor->MeasureStart();
610 }
611 mStopDrive(TRUE);
612 for (cnt= 0; cnt < mlGetAxisNumber(); cnt++)
613 {
614 mlSetAxis(cnt);
615 mPopSettings(ThisPosition);
616 mSetCorrectionState(FALSE);
617 }
618 mlSetAxis(nMotor);
619 };
620