Die Funktion StartCmdExecution( TCmdTag )

int TSteering::StartCmdExecution( TCmdTag Cmd )
{
  // Function tested; Last changes 950814
  if (TheCmd)
  {
    // eventuell vorhandenes vorhergehendes Befehls-Objekt zerstören
    // (Destruktor wird gerufen)
    delete TheCmd;
    TheCmd = NULL;
  }
  // Messtimer des Detektors stoppen (s. counters.cpp)
  Device->MeasureStop();
  // Aufruf bewirkt "hControlWnd = hControlWnd" (!?)
  Device->SetHost( hControlWnd );
  fIntensityNorm  = 0.0;
  nFailureId      = 0;
  bInterrupted    = FALSE;
  switch (Cmd.Id) 
  {
    case GotoPeak:
      // neues Objekt vom Typ TGotoPeakCmd erstellen
      // TGotoPeakCmd ist vom TCmd abgeleitet
      TheCmd = (TGotoPeakCmd*)new TGotoPeakCmd( Cmd );
      break;
    case GotoIntensity:
      // s.o.
      TheCmd = (TGotoIntensityCmd*)new TGotoIntensityCmd( Cmd );
      break;
    case ChooseAxis:
      TheCmd = (TChooseAxisCmd*)new TChooseAxisCmd( Cmd );
      break;
    case ChooseDevice:
      TheCmd = (TChooseDeviceCmd*)new TChooseDeviceCmd( Cmd );
      break;
    case SetupScan:
      TheCmd = (TSetupScanCmd*)new TSetupScanCmd( Cmd );
      break;
    case SetWidth:
      TheCmd = (TSetWidthCmd*)new TSetWidthCmd( Cmd );
      break;
    case Scan:
      TheCmd = (TScanCmd*)new TScanCmd( Cmd );
      break;
    case ControlFlank:
      TheCmd = (TControlFlankCmd*)new TControlFlankCmd( Cmd );
      break;
    case ShowValue:
      TheCmd = (TShowValueCmd*)new TShowValueCmd( Cmd );
      break;
    case SetFileName:
      TheCmd = (TSetFileNameCmd*)new TSetFileNameCmd( Cmd );
      break;
    case SaveData:
      TheCmd = (TSaveDataCmd*)new TSaveDataCmd( Cmd );
      break;
    case Calculate:
      TheCmd = (TCalculateCmd*)new TCalculateCmd( Cmd );
      break;
    case LoadPoint:
      TheCmd = (TLoadPointCmd*)new TLoadPointCmd( Cmd );
      break;
    case MoveToPoint:
      TheCmd = (TMoveToPointCmd*)new TMoveToPointCmd( Cmd );
      break;
    case AreaScan:
      TheCmd = (TAreaScanCmd*)new TAreaScanCmd( Cmd );
      break;
    default: 
      return FALSE;
  }
  if (!TheCmd->nFailureId)
  {
    // Kein Fehler passiert
    // Steuerung ist aktiv
    bSteeringActive = TRUE;
    // Wecktimer starten
    StartTimer( 0 );
    return TRUE;
  }
  return FALSE;
};

Zusätzlich existiert die folgende Funktion, die ihre Parameter in eine TCmdTag-Struktur übernimmt und danach die obige Funktion damit aufruft.

int TSteering::StartCmdExecution( TCmdId  cmdid, int p1, int p2, LPSTR p3, 
    HWND host )
{
  TCmdTag ct;

  hHostWindow = host;
  ct.Id = cmdid;
  ct.P1 = (TCParam) p1;
  ct.P2 = (TCParam) p2;
  strcpy( ct.P3, p3 );
  return StartCmdExecution( ct );
}


Zurück zu StartMacroExecution()

Zurück zu ExecuteNextCmd()

Startseite


Kay Schützler
Last modified: Tue Sep 21 14:45:22 MET DST 1999