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");
292 #else 293 if (mIsCalibrated()) 294 sprintf(buf, "Manual Adjustment"); 295 else 296 sprintf(buf, "Manual Adjustment : No valid Reference Point");
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");
349 #else 350 SetWindowText(GetDlgItem(hwnd, cm_MeasureHWB), "Measure &Halfwidth");
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");
369 #else 370 371 SetWindowText(GetDlgItem(hwnd, cm_MeasureHWB), "Skip &Measurement");
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");
394 #else 395 sprintf(buf, "HWB= %.2f arcsec", Steering.GetHwb()); // ! neu Kullmann+Reinecker: fHwb durch Accessor-Methode GetHwb() ersetzt 396 SetInfo(buf); 397 SetWindowText(GetDlgItem(hwnd, cm_MeasureHWB), "Measure &Halfwidth");
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