File: TOPOGRFY\M_TOPO.CPP
1 //## Kommentare dieser Form (mit zwei Doppelkreuzen) sind von Marlies Gollnick ~:)
2 #include "utils\u_utils.h"
3 #include "winresrc\rc_def.h" // Ressourcen-IDs
4 #pragma hdrstop
5
6 // m_topo.cpp
7 // (C) 1993,1994 by Heiko Damerow MPG AG "Röntgenbeugung"
8 // Modul Topographie
9
10 #include "swintrac\m_dlg.h" // für TCounterWindow
11 //#include "datavisa\datavisa.h"
12 #include "detecuse\detecuse.h"
13 #include "workflow\workflow.h"
14 #include "motrstrg\motrstrg.h"
15
16 #include "topogrfy\topogrfy.h"
17
18 //! neu: klier Allgemeine Einstellungen
19 #include "mespara\mespara.h"
20
21 //! neu: klier Protokollbuch
22 #include "protocol\protocol.h"
23
24 //--||--\\--||--//--||--\\--||--//--||--\\--||--//--||--\\--||--//--||--\\--||--
25
26 //## Formatierte Zeitausgabe
27 #define M_TimeString(buffer,TTicks) \
28 (sprintf( (LPSTR)buffer,"%02d:%02d:%02d", \
29 (int)(TTicks/3600000l), \
30 (int)(TTicks/60000l) % 60, \
31 (int)(TTicks/1000l) % 60));
32
33
34 /*
35 * Container-Klasse TTopographyOld für Topographie-Parameter
36 * Dialog zum Ausführen der Topographie: TTopographyExecuteDlg
37 * Dialog zum Setzen der Parameter: TTopographySetParamDlg
38 */
39
40 extern TSteering Steering;
41
42 TTopographyOld TopographyOld;
43 TMacroTag* MWorkPoint;
44
45 //***** Parameter-Repräsentation für die Topographie ***************************
46
47 //##Belegung einiger Variablen von TTopographie mit Initialwerten
48 TTopographyOld::TTopographyOld(void)
49 {
50 fMoveStep= 0.3f;
51 fMaxAngleEscape= 50; // arcsec
52 lMeasurementTime= 600; // Sekunden
53 nNumberCycle= 1; //##Anzahl der Mehrfachbelichtungen muss != 0
54 //##sein, da sonst Topographie Einstellungsfenster
55 //##nicht mit OK zu schliessen ist
56 bMultibleShot= FALSE; //##Mehrfachbelichtung
57 dStartAngle= -20.0; // arcsec
58 fAngleBetweenShots= 3.0;
59 fFailure= 0.02f; //##Messfehler des Counters wird nicht mehr
60 //##geaendert
61 bMonitorUsed= FALSE;
62 Sensor= NULL;
63 Monitor= NULL;
64 nMotor= -1;
65 };
66
67 //##Einlesen einiger Werte aus dem Ini-File
68 void TTopographyOld::Initialize(void)
69 {
70 char Ident[]= "Topography";
71 char buf[MaxString];
72
73 GetPrivateProfileString(Ident, "WorkPoint", "-60.0", buf, MaxString, GetCFile());
74 fWorkPoint= fabs(atof(buf) / 100.0);
75 bSmallAngleSide= (atof(buf) < 0);
76 GetPrivateProfileString(Ident, "ControlRange", "3.0", buf, MaxString, GetCFile());
77 fControlRange= atof(buf) / 100.0;
78 GetPrivateProfileString(Ident, "ControlStep", "0.2", buf, MaxString, GetCFile());
79 fControlStep= atof(buf);
80 GetPrivateProfileString(Ident, "ExposureTime", "10.0", buf, MaxString, GetCFile());
81 fMaxTime= atof(buf); //##Detektormesszeit
82 GetPrivateProfileString(Ident, "ExposureCounts", "10000", buf, MaxString, GetCFile());
83 dwMaxCounts= atol(buf);
84 };
85
86 //*** Benutzer-Schnittstelle für die Topographie *******************************
87 //******************************************************************************
88
89 //##Konstruktor des Topographie Ausfuehrungs Fensters
90 //##Belegung einiger Initialwerte (Zustandsvariablen, sowie Counter und
91 //##Motor, falls dies noch nicht geschehen ist)
92 TTopographyExecuteDlg::TTopographyExecuteDlg(void): TModalDlg("TopographyExecute", GetMainInstance())
93 {
94 //##Belegung einiger Zustandvariablen
95 bStarted= FALSE;
96 bSetupOk= TRUE; //##Motor und Counter sind durch Nutzer gesetzt
97 bControlActive= FALSE;
98 bTimeRunning= FALSE;
99 bExeptionOccured= FALSE;
100 bAdditionalTime= FALSE;
101 //## wird TTopographyExecuteDlg ohne vorherige Ausfuehrung von
102 //## TTopographySetParamDlg zum ersten mal aufgerufen, so werden
103 //## der Sensor auf den aktuellen Zaehler gesetzt und
104 //## nMotor auf Omega
105 if (TopographyOld.Sensor == NULL)
106 {
107 TopographyOld.Sensor= TDetectorManager::DetectorManager().GetDetector();
108 TopographyOld.Monitor= Detector;
109 TopographyOld.bMonitorUsed= FALSE;
110 bSetupOk= FALSE;
111 }
112 if (TopographyOld.nMotor == -1)
113 {
114 //## als Motorenachse Omega setzen
115 TopographyOld.nMotor= mlGetIdByName(Omega);
116 bSetupOk= FALSE;
117 }
118 };
119
120
121 //##diese Funktion wird nach Empfang der Message WM_INITDIALOG aufgerufen
122 //##siehe DialogProc in dlg_tpl.cpp
123 //##weitere Initialisierung vor Darstellung des Topographie Ausfuehren Fensters
124 //##(Counter, Motor)
125 BOOL TTopographyExecuteDlg::Dlg_OnInit(HWND hwnd, HWND hwndCtl, LPARAM lParam)
126 {
127 char buf[MaxString];
128 // Detektor initialisieren
129 Detector= TopographyOld.Sensor;
130 nMotor= TopographyOld.nMotor;
131 //##falls zum Zaehler kein Fenster angezeigt wird, neues Zaehlerfenster
132 //##oeffnen
133 if ( Detector->GetCounterWnd()==0 )
134 (new TCounterWindow(GetMainInstance(), Detector))->Show();
135 // initialize motor
136 //##setzt den aktiven Motor auf nMotor
137 mlSetAxis(nMotor);
138 //##weisst nMotor den aktiven Motor zu, nachdem zuvor der aktive Motor
139 //##auf den Wert von nMotor gesetzt wurde -> eigentlich sinnlos
140 nMotor= mlGetAxis();
141 //## Werte des aktuellen Motors in allgemeinere Settings Struktur (m_motcom.h
142 //## TMSettingS) eintragen
143 mPushSettings();
144
145 CurrentTime= StartTime= 0;
146
147 //##Festlegung von Beschriftung und darzustellenden Werten fuer das
148 //##Fenster
149 M_TimeString (buf, CurrentTime);
150 SetDlgItemText(GetHandle(), id_MeasurementTime, (LPSTR)buf);
151 sprintf(buf, "%.2f", 0.0);
152 SetDlgItemText(GetHandle(), id_Angle, (LPSTR)buf);
153 sprintf(buf, "%d", TopographyOld.nNumberCycle);
154 SetDlgItemText(GetHandle(), id_RemainderCyclus, (LPSTR)buf);
155 RestShots= TopographyOld.nNumberCycle;
156 if (TopographyOld.bMultibleShot)
157 SetDlgItemText(GetHandle(), cm_SwitchControl, "&Topographie starten");
158 else
159 SetDlgItemText(GetHandle(), cm_SwitchControl, "&Regeln starten");
160 // Ablaufsteuerung initialisieren
161 //## Reportausgabe fuer Steering wird auf true gesetzt
162 Steering.Visualising( TRUE, FALSE );
163 //## Makro zur Arbeitspunkteinstellung holen und anpassen
164 MWorkPoint= Steering.GetMacroByName("SetupTopography");
165 if (TopographyOld.bSmallAngleSide)
166 MWorkPoint->CmdList[1].P1= SmallSide;
167 else
168 MWorkPoint->CmdList[1].P1= LargeSide;
169 sprintf(MWorkPoint->CmdList[1].P3, mGetDF(), fabs(TopographyOld.fWorkPoint));
170 //##cm_Initialize und cm_ParamSet Message senden, und deren Abarbeitung
171 //##abwarten
172 SendMessage(GetHandle(), WM_COMMAND, cm_Initialize, 0);
173 SendMessage(GetHandle(), WM_COMMAND, cm_ParamSet, 0);
174 //##Zustandsvariablen setzen
175 bStartPointOk= FALSE;
176 bStarted= TRUE;
177 return TRUE;
178 };
179
180 //##Zeitueberpruefung fuer die Mehrfachbelichtung und
181 //##nach Messzeitende Ausgabe Beepton
182 void TTopographyExecuteDlg::Dlg_OnTimer(HWND hwnd, UINT id)
183 {
184 char buf[MaxString];
185
186 switch (id)
187 {
188 //## Gesamtmesszeit war abgelaufen; Ausgabe eines regelmaessigen Beeptons
189 case 99:
190 MessageBeep(0);
191 DelayTime(100);
192 MessageBeep(0);
193 return;
194
195 //##Zeitueberpruefung waehrend der Mehrfachbelichtung
196 case 88: // Timer für Mehrfach-Belichtung
197 FORWARD_WM_COMMAND(hwnd, cm_ParamSet, 0, 0, SendMessage);
198 //## Test ob noch innerhalb der Messzeit
199 if ((CurrentTime / 1000) < (DWORD) TopographyOld.lMeasurementTime)
200 return;
201 KillTimer(GetHandle(), 88);
202 RestShots--;
203 //## weitere Messzyklen
204 if (RestShots)
205 {
206 sprintf(buf, "%d", RestShots);
207 SetDlgItemText(GetHandle(), id_RemainderCyclus, (LPSTR)buf);
208 sprintf(buf, mGetDF(), TopographyOld.fAngleBetweenShots);
209 //##Weiterfuehrung der Probe, der Timer wird durch den case Zweig
210 //##cm_SteeringReady von Dlg_OnCommand (nach Ende der Steering Aktion)
211 //##neu gesetzt
212 Steering.Reset();
213 Steering.StartUp(GetHandle(), nMotor, Detector);
214 Steering.StartCmdExecution(MoveToPoint, Relative, 0, buf, GetHandle());
215 return;
216 }
217 //## alle Messzyklen beendet
218 sprintf(buf, "%d", RestShots);
219 SetDlgItemText(GetHandle(), id_RemainderCyclus, (LPSTR)buf);
220 bExeptionOccured= TRUE;
221 //## Timer fuer Beepton aktivieren
222 SetTimer(GetHandle(), 99, 2000, NULL);
223 //##Zusatzzeit; Hinweisbox anzeigen
224 bAdditionalTime= TRUE;
225 strcpy(buf, "Meß-Zeit abgelaufen ! \n\n");
226 MessageBox(buf, "Topographie - Information", MBINFO);
227 FORWARD_WM_COMMAND(hwnd, cm_SwitchControl, 0, 0, PostMessage);
228 KillTimer(GetHandle(), 99);
229 break;
230 }
231 };
232
233 //## Behandlung verschiedener Nachrichten
234 void TTopographyExecuteDlg::Dlg_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
235 {
236 TModalDlg *dlg= 0;
237 static HWND hDlgItem= NULL;
238 char buf[2*MaxString];
239 float fExpTime;
240
241 switch (id)
242 {
243 //##Aenderung des Messzustandes (Messung laeuft <-> keine Messung)
244 case cm_SwitchControl:
245 //## !!! Der Kommentar hier ist falsch an dieser Stelle !!!
246 //## Er bezieht sich auf den indirekten else Zweig der Abfrage
247 //## if(bControlActive), auch das Erfassen der Intensitaet wird
248 //## durch Steering uebernommen und erfolgt nicht hier.
249 // Starten der Regelung: Es wird zuerst die aktuelle Intensität gemessen
250 // und zum Regel-Sollwert erklärt. Dann erfolgt der Start des
251 // Regelalgorithmus.
252
253 //***** Topography was active **********************************************
254
255 //##Ende der Messzeit wurde erreicht, Benutzer hat Hinweisfenster
256 //##quittiert Timer stoppen bzw. Nachregelmechanismus anhalten
257 //##Zustandsvariablen setzen, Buttonbeschriftung von stoppen auf
258 //##starten aendern
259 if (bControlActive)
260 {
261 if (TopographyOld.bMultibleShot)
262 KillTimer(GetHandle(), 88);
263 else
264 Steering.ToggleInterrupt();
265 // Herstellen des Ausgangszustandes
266 bTimeFinish= FALSE;
267 bTimeRunning= FALSE;
268 bAdditionalTime= FALSE;
269 if (TopographyOld.bMultibleShot)
270 SetDlgItemText(GetHandle(), cm_SwitchControl, "&Topographie starten");
271 else
272 SetDlgItemText(GetHandle(), cm_SwitchControl, "&Regeln starten");
273 StartTime= CurrentTime= 0;
274 bControlActive= !bControlActive;
275 SendMessage(GetHandle(), WM_COMMAND, cm_ParamSet, 0);
276 bControlActive= FALSE;
277
278 //! neu: klier Protokollbuch geändert 01.03.2003
279 if (IsProtocolTopographyOn())
280 {
281 if (!TopographyOld.bMultibleShot)
282 SetProtocolTopographyImpsnach(Steering.GetIntensity());
283 SetProtocolTopographyDFvor( Steering.dStartPoint );
284 SetProtocolTopographyDFnach( mGetValue(Distance) );
285 SaveProtocolTopographyParameter();
286 ViewOnProtocolTopographyDlg();
287 if (IsProtocolTopographyOn())
288 SetProtocolTopographyReadOnly();
289 SetProtocolTopographyOff();
290 }
291
292 //## aktiviert Button Startpositon einstellen; anstelle von !bControlActive
293 //## sollte direkt TRUE angegeben werden
294 EnableWindow(GetDlgItem(GetHandle(), cm_GotoWorkPoint), !bControlActive);
295 break;
296 }
297 //***** Topography will be activated **************************************
298 //##Messung gestartet; Anzeigefelder und Buttonbeschriftungen anpassen,
299 //##Zeitzaehlung beginnen, bei Mehrfachbelichtung Timer starten, bei
300 //##Einfachbelichtung Steering Steuerung (fuer Nachregeln) starten
301
302 //! neu: klier Protokollbuch geändert 01.03.2003
303 if (MessageBox("Sollen die Messung im Protokollbuch gespeichert werden?",
304 "Protokollbuch - Info", MB_YESNO) == IDYES)
305 {
306 SetProtocolTopographyOn();
307 SetProtocolTopographyImpMax(Steering.fPeakIntensity);
308 int nOldTopographyMotor= mlGetAxis();
309 mlSetAxis(mlGetIdByName(Collimator));
310 SetProtocolTopographyKKruemmung(mGetValue(Distance));
311 mlSetAxis(nOldTopographyMotor);
312 SetProtocolTopographyHWB(Steering.GetHwb()); // ! neu Kullmann+Reinecker: fHwb durch Accessor-Methode GetHwb() ersetzt
313 SetProtocolTopographyEXPT(TopographyOld.lMeasurementTime);
314 SetProtocolTopographyINCDF(TopographyOld.fControlStep);
315 SetProtocolTopographyNBEXPOS(TopographyOld.nNumberCycle);
316 if (TopographyOld.bMultibleShot)
317 {
318 SetProtocolTopographyRSA(TopographyOld.dStartAngle);
319 SetProtocolTopographyABE(TopographyOld.fAngleBetweenShots);
320 }
321 else
322 {
323 SetProtocolTopographyCRT(TopographyOld.fMaxTime);
324 SetProtocolTopographySTE();
325 SetProtocolTopographyCONLIMIT();
326 if (TopographyOld.bSmallAngleSide)
327 SetProtocolTopographyCONPOINT( -TopographyOld.fWorkPoint);
328 else
329 SetProtocolTopographyCONPOINT(TopographyOld.fWorkPoint);
330 }
331 ViewOnProtocolTopographyDlg();
332 }
333 else
334 SetProtocolTopographyOff();
335
336 bExeptionOccured= FALSE;
337 CurrentTime= 0;
338 M_TimeString (buf, CurrentTime);
339 SetDlgItemText(GetHandle(), id_RemainderTime, buf);
340 StartTime= CurrentTime= GetTickCount();
341 SetDlgItemText(GetHandle(), id_Text, "");
342 bTimeRunning= TRUE;
343 if (TopographyOld.bMultibleShot)
344 {
345 // Mehrfach-Belichtung
346 // Start-Position wurde anfahren
347 RestShots= TopographyOld.nNumberCycle;
348 SetTimer(GetHandle(), 88, 500, NULL);
349 SetDlgItemText(GetHandle(), cm_SwitchControl, "&Topographie stoppen");
350 }
351 else
352 {
353 //##Steering auf Grundzustand setzen, Fenster, Motor und Counter
354 //##an Steering uebergeben, Motorschrittweite setzen
355 Steering.Reset();
356 Steering.StartUp(GetHandle(), nMotor, Detector);
357 mSetValue(Width, TopographyOld.fControlStep);
358 StartTime= CurrentTime= GetTickCount();
359 // Parameter für Regelung laden
360 //##Eintragen von Werten in die Kommandostruktur zum Nachregeln
361 //##und ausfuehren des Kommandos ControlFlank durch Steering
362 sprintf(buf, mGetDF(), TopographyOld.fControlRange);
363 if (TopographyOld.bSmallAngleSide)
364 Steering.StartCmdExecution(ControlFlank, SmallSide, 0, buf, GetHandle());
365 else
366 Steering.StartCmdExecution(ControlFlank, LargeSide, 0, buf, GetHandle());
367 SetDlgItemText(GetHandle(), cm_SwitchControl, "&Regeln stoppen");
368 }
369 bControlActive= TRUE;
370 EnableWindow(GetDlgItem(GetHandle(), cm_GotoWorkPoint), !bControlActive);
371 break;
372
373 //##Initalisierung
374 case cm_Initialize:
375 //##Counter mit Zeitintervall zum Zaehlen, maximaler Impulsrate und
376 //##Messfehlerwert (0.02) initialisieren
377 if (Detector->IsActive())
378 {
379 Detector->MeasureStop();
380 Detector->SetExposureSettings( TExposureSettings( TopographyOld.fMaxTime,
381 TopographyOld.dwMaxCounts) );
382 Detector->MeasureStart();
383 }
384 else
385 Detector->SetExposureSettings( TExposureSettings( TopographyOld.fMaxTime,
386 TopographyOld.dwMaxCounts) );
387
388 //##Eintragen von Werten in die Anzeigfelder des Topographie Ausfuehren
389 //##Fensters
390 sprintf(buf, "%.1f", TopographyOld.fMaxTime);
391 SetDlgItemText(GetHandle(), id_ExposureTime, buf);
392 RestShots= TopographyOld.nNumberCycle;
393 sprintf(buf, "%d", RestShots);
394 SetDlgItemText(GetHandle(), id_RemainderCyclus, buf);
395 mSetValue(Width, TopographyOld.fControlStep);
396 //##Ausgabe einer Warnmeldung, falls Motor oder Counter vor Aufruf
397 //##von Topographie Ausfuehren nicht gesetzt waren
398 if (!bSetupOk)
399 {
400 strcpy(buf, "Die Einstellungen für Topograpie könnten\n\r");
401 strcat(buf, "noch nicht exakt eingestellt sein !\n\r");
402 strcat(buf, " Nehmen Sie bitte Ihre Einstellungen vor.");
403 }
404 else
405 strcpy(buf, "");
406 SetDlgItemText(GetHandle(), id_Text, (LPSTR)buf);
407 break;
408
409 //##Button "Startposition einstellen" wurde ausgewaehlt
410 case cm_GotoWorkPoint:
411 // StartPosition anfahren
412 //##nachfolgende Ausgabe erfolgt auch, wenn der Arbeitspunkt
413 //##nicht angefahren wird, die Ausgabe sollte eigentlich
414 //##nach Ueberpruefung durch die if Bedingung erfolgen
415 //##alt:
416 //##strcpy(buf,"Arbeitspunkt wird angefahren.");
417 //##SetDlgItemText(GetHandle(),id_Text,(LPSTR)buf);
418 if (bStartPointOk && TopographyOld.bMultibleShot)
419 {
420 // prevents the multible relative movement
421 sprintf(buf, "Die Startposition wurde bereits angefahren !");
422 MessageBox(buf, "Topographie - Information", MBINFO);
423 break;
424 }
425 //##die naechsten zwei Zeilen sind neu hier
426 strcpy(buf, "Arbeitspunkt wird angefahren.");
427 SetDlgItemText(GetHandle(), id_Text, (LPSTR)buf);
428 //##Motorschrittweite setzen
429 mSetValue(Width, TopographyOld.fMoveStep);
430 //##Button "Startposition anfahren" und
431 //##"Regelung starten"/"Topographie starten" deaktivieren
432 EnableWindow(GetDlgItem(GetHandle(), cm_SwitchControl), FALSE);
433 EnableWindow(GetDlgItem(GetHandle(), cm_GotoWorkPoint), FALSE);
434 Steering.Reset();
435 Steering.StartUp(GetHandle(), nMotor, Detector);
436 //##Anfahren des um dStartAngle vom aktuellen Stand entfernten Punktes
437 if (TopographyOld.bMultibleShot)
438 {
439 sprintf(buf, mGetDF(), TopographyOld.dStartAngle);
440 Steering.StartCmdExecution(MoveToPoint, Relative, 0, buf, GetHandle());
441 }
442 //##Arbeitspunkt anfahren durch Makroausfuehrung
443 else
444 Steering.StartMacroExecution(MWorkPoint, GetHandle());
445 break;
446
447 // Arbeitspunkt wurde eingestellt
448 case cm_SetupPosition:
449 //##Buttons aktivieren
450 EnableWindow(GetDlgItem(GetHandle(), cm_SwitchControl), TRUE);
451 EnableWindow(GetDlgItem(GetHandle(), cm_GotoWorkPoint), TRUE);
452 //##Ausgabe Hinweistext
453 strcpy(buf, ">>>>>>>>>> X_RAY OFF <<<<<<<<<<<<\n");
454 strcat(buf, "Bitte Film-Kassette auflegen !\n");
455 strcat(buf, "Die Aufnahme kann gestartet werden !");
456 SetDlgItemText(GetHandle(), id_Text, (LPSTR)buf);
457 bStartPointOk= TRUE;
458 //##fuer die Mehrfachbelichtung setzte
459 if (TopographyOld.bMultibleShot)
460 {
461 //##Steering.dStartPoint wird auf die aktuelle Motorposition plus
462 //##Verschiebungsweite gesetzt -> Warum??? dStartPoint wird im
463 //##Topographie Zusammenhang eigentlich nicht genutzt
464 Steering.dStartPoint= mGetValue(Distance) + TopographyOld.dStartAngle;
465 SendMessage(GetHandle(), WM_COMMAND, cm_ParamSet, 0);
466 }
467 break;
468
469 //##Steering ist mit seiner Aktion fertig
470 case cm_SteeringReady:
471 //##falls die Steering Aktion sich auf einen Umsetzungsschritt
472 //##bei der Mehrfachbelichtung bezog, Timer fuer die naechste
473 //##Runde neu initialisieren
474 if (bControlActive && TopographyOld.bMultibleShot)
475 {
476 StartTime= CurrentTime= GetTickCount();
477 bTimeRunning= TRUE;
478 SetTimer(GetHandle(), 88, 500, NULL);
479 break;
480 }
481 //##Steering Aktion hat sich auf Arbeitspunkt bzw. Startposition anfahren
482 //##bezogen
483 FORWARD_WM_COMMAND(GetHandle(), cm_SetupPosition, 0, 0, PostMessage);
484 break;
485
486 //##es liegen neue Zaehlerwerte vor
487 case cm_CounterSet:
488 if (TopographyOld.bMultibleShot)
489 break;
490 // Meß-Werte speichern
491 if (TopographyOld.bMonitorUsed)
492 {
493 float norm;
494 // Meß-Signal normieren
495 TopographyOld.Monitor->GetIntegral(norm);
496 Steering.SetNorm(norm);
497 }
498 //##Anzeige des Zaehlerfensters aktualisieren
499 Detector->UpdateViews(TRUE);
500 Steering.DetectorRequest();
501 // Anzeige der Regel-Größen
502 FORWARD_WM_COMMAND(hwnd, cm_ParamSet, 0, 0, SendMessage);
503 FORWARD_WM_COMMAND(GetHandle(), cm_InquireExeption, 0, 0, PostMessage);
504 break;
505
506 //##Nutzer hat Eingabefeld Detektor-Messzeit angewaehlt
507 case id_ExposureTime:
508 if (bStarted)
509 hDlgItem= GetDlgItem(GetHandle(), id_ExposureTime);
510 break;
511
512 //##Nutzer hat Return gedrueckt
513 case IDOK:
514 //##falls das Return sich nicht auf ein Dialogfeld bezieht,
515 //##Standardbehandlung durch TModalDlg
516 if (!hDlgItem)
517 {
518 TModalDlg::Dlg_OnCommand(hwnd, id, hwndCtl, codeNotify);
519 break;
520 }
521 // Der Nutzer hat mit Return eine neue Meßzeit eingegeben
522 if (hDlgItem == GetDlgItem(GetHandle(), id_ExposureTime))
523 {
524 //##neue Zaehlermesszeit wird eingelesen und fuer den Zaehler
525 //##eingestellt, allerdings erfolgt keine Speicherung des Wertes
526 //##in fMaxTime -> Wert wird zwar fuer den Detektor geaendert und
527 //##auch im Topographie Fenster angezeigt, wird allerdings
528 //##das Topographie Einstellen Fenster aufgerufen, so steht dort
529 //##der alte Wert
530 GetDlgItemText(GetHandle(), id_ExposureTime, (LPSTR)buf, 10);
531 fExpTime= atof(buf);
532 Detector->SetExposureSettings( TExposureSettings ( fExpTime,
533 TopographyOld.dwMaxCounts) );
534 sprintf(buf, "%.1f", fExpTime);
535 SetDlgItemText(GetHandle(), id_ExposureTime, (LPSTR)buf);
536 //##NEU nachfolgende Zeile merkt sich den neuen Zaehlermesszeitwert
537 //##Topographie global -> oben beschriebener Fehler behoben
538 TopographyOld.fMaxTime= fExpTime;
539 }
540 hDlgItem= NULL;
541 SetFocus(GetDlgItem(GetHandle(), cm_SwitchControl));
542 break;
543
544 //##Button "Einstellungen" wurde betaetigt
545 case cm_TopographyParam:
546 //##Topographie Einstellungen Dialog
547 dlg= (TTopographySetParamDlg *)new TTopographySetParamDlg(TRUE);
548 if ( dlg ) dlg->ExecuteDialog(GetHandle());
549 _FREEOBJ(dlg);
550 // spezifische Parameter für einen Sensor setzen
551 Detector->MeasureStop();
552 Detector->SetExposureSettings( TExposureSettings ( TopographyOld.fMaxTime,
553 TopographyOld.dwMaxCounts) );
554 Detector->MeasureStart();
555 //##Ausgabe der neuen Detektormesszeit
556 sprintf(buf, "%.1f", TopographyOld.fMaxTime);
557 SetDlgItemText(GetHandle(), id_ExposureTime, buf);
558 //##neue Motorschrittweite an den Motor weitergeben
559 mSetValue(Width, TopographyOld.fControlStep);
560 break;
561
562 //##Anzeigen im Topographie Ausfuehren Fenster aktualisieren
563 case cm_ParamSet:
564 sprintf(buf, "%d", RestShots);
565 SetDlgItemText(GetHandle(), id_RemainderCyclus, buf);
566 if (!bControlActive)
567 break;
568 //##abgelaufende Zeit berechnen
569 if (bTimeRunning)
570 {
571
572 //! neu: klier Protokollbuch
573 if (CurrentTime == StartTime)
574 if (!TopographyOld.bMultibleShot && IsProtocolTopographyOn())
575 SetProtocolTopographyImpsvor(Steering.GetIntensity());
576
577 CurrentTime= GetTickCount();
578 CurrentTime -= StartTime;
579 }
580 //##Drift anzeigen
581 sprintf(buf, "%.2lf", mGetValue(Distance) - Steering.dStartPoint);
582 SetDlgItemText(GetHandle(), id_Angle, buf);
583 if (bAdditionalTime)
584 {
585 // Ausgabe der zusätzlichen Meßzeit
586 M_TimeString (buf, CurrentTime);
587 SetDlgItemText(GetHandle(), id_RemainderTime, buf);
588 }
589 else
590 {
591 M_TimeString (buf, CurrentTime);
592 SetDlgItemText(GetHandle(), id_MeasurementTime, buf);
593 }
594 break;
595
596 //##es ist moeglicherweise ein Abbruchfall eingetreten
597 case cm_InquireExeption:
598 if (bExeptionOccured)
599 break;
600 // Feststellen, ob eine Abbruch-Bedingung erfüllt ist
601 //##Intensitaet unter Minimumintensitaet
602 if (Steering.GetIntensity() < (0.01 * Steering.fStartIntensity))
603 {
604 bExeptionOccured= TRUE;
605 //##Beep Timer starten und Hinweisbox
606 SetTimer(GetHandle(), 99, 2000, NULL);
607 KillTimer(GetHandle(), TimerIdInformation);
608 sprintf(buf, "%s", "Intensitäts-Abfall unter 1% !");
609 MessageBox(buf, "Topographie - Information", MBINFO);
610 KillTimer(GetHandle(), 99);
611 }
612 if (TopographyOld.bMultibleShot)
613 break;
614 //##es wurde um mehr als fMaxAngleEscape vom Arbeitspunkt abgewichen
615 if (TopographyOld.fMaxAngleEscape <
616 fabs(Steering.dStartPoint - Steering.GetDistance()))
617 {
618 bExeptionOccured= TRUE;
619 //##Beep Timer starten und Hinweisbox
620 KillTimer(GetHandle(), TimerIdInformation);
621 sprintf(buf, "%s", "Regel-Bereich wurde verlassen !");
622 MessageBox(buf, "Topographie - Information", MBINFO);
623 KillTimer(GetHandle(), 99);
624 }
625 //##Messzeit ist abgelaufen
626 if ((CurrentTime / 1000) > (DWORD) TopographyOld.lMeasurementTime)
627 {
628 bTimeFinish= TRUE;
629 bExeptionOccured= TRUE;
630 //##Beep Timer starten und Hinweisbox
631 SetTimer(GetHandle(), 99, 2000, NULL);
632 bAdditionalTime= TRUE;
633 StartTime= GetTickCount();
634 strcpy(buf, "Meß-Zeit abgelaufen ! \n\n");
635 strcat(buf, "Bei Bestätigung wird Regelung gestoppt.");
636 MessageBox(buf, "Topographie - Information", MBINFO);
637 KillTimer(GetHandle(), 99);
638 FORWARD_WM_COMMAND(GetHandle(), cm_SwitchControl, 0, 0, PostMessage);
639 }
640 break;
641
642 case IDCANCEL:
643 //! neu: klier Protokollbuch
644 if (IsProtocolTopographyOn())
645 SetProtocolTopographyOff();
646 // Kullmann+Reinecker: Hier muss kein break hin, weiter bei TModalDlg::Dlg_OnCommand!
647
648 default:
649 TModalDlg::Dlg_OnCommand(hwnd, id, hwndCtl, codeNotify);
650 }
651 };
652
653 //##Beenden des Topographie Ausfuehren Fensters
654 void TTopographyExecuteDlg::LeaveDialog(void)
655 {
656 //##Wo wurde dieser Timer gesetzt? Ist er fuer die Topographie ueberhaupt
657 //##relevant?
658 KillTimer(GetHandle(), TimerIdInformation);
659 //##"BeepTimer" stoppen
660 KillTimer(GetHandle(), 99);
661 //##aktuelle Motor zuruecksetzen
662 mPopSettings(ThisPosition);
663 //##Detektor zuruecksetzen
664 Detector->MeasureStop();
665 Detector->PopSettings();
666 Detector->SetControlWnd(NULL);
667 Detector->MeasureStart();
668 if (!bSetupOk)
669 TopographyOld.Sensor= NULL;
670 };
671
672 //******************************************************************************
673 //##Konstruktor; restrictions gibt an, ob das Fenster von Topographie Ausfuehren
674 //##aus aufgerufen wurde
675 TTopographySetParamDlg::TTopographySetParamDlg(int restrictions) : TModalDlg("TopographyParam", GetMainInstance() )
676 {
677 nRestrictions= restrictions;
678 //##falls Detektor noch nicht gesetzt, auf aktuellen Detektor setzen
679 if (TopographyOld.Sensor == NULL)
680 {
681 TopographyOld.Sensor= TDetectorManager::DetectorManager().GetDetector();
682 TopographyOld.Monitor= TopographyOld.Sensor;
683 TopographyOld.bMonitorUsed= FALSE;
684 }
685 //##falls noch kein Motor gesetzt, wenn moeglich auf Omega setzen, sonst auf
686 //##den aktuellen
687 if (TopographyOld.nMotor < 0)
688 if (mlIsAxisValid(Omega))
689 TopographyOld.nMotor= mlGetIdByName(Omega);
690 else
691 TopographyOld.nMotor= mlGetAxis();
692 };
693
694
695 //##Initalisierung
696 BOOL TTopographySetParamDlg::Dlg_OnInit(HWND hwnd, HWND hwndCtl, LPARAM lParam)
697 {
698 if (nRestrictions)
699 {
700 //##Wird das Einstellungsfenster von dem Topographie Fenster aus
701 //##aufgerufen, so ist nur fuer einige Werte die Eingabe moeglich. Alle
702 //##anderen Eingabefelder werden hier deaktiviert und erscheinen dann
703 //##im Fenster ausgegraut.
704 EnableWindow(GetDlgItem(GetHandle(), id_ChooseMotor), FALSE);
705 //Datum: 02.08.2002 EnableWindow(GetDlgItem(GetHandle(),cm_RotateMotor),FALSE);
706 EnableWindow(GetDlgItem(GetHandle(), id_ChooseDetector), FALSE);
707 EnableWindow(GetDlgItem(GetHandle(), id_WorkPoint), FALSE);
708 EnableWindow(GetDlgItem(GetHandle(), id_Shots), FALSE);
709 EnableWindow(GetDlgItem(GetHandle(), id_MaxAngleEscape), FALSE);
710 EnableWindow(GetDlgItem(GetHandle(), id_StepWidth), FALSE);
711 EnableWindow(GetDlgItem(GetHandle(), id_From), FALSE);
712 EnableWindow(GetDlgItem(GetHandle(), id_MultipleShot), FALSE);
713 EnableWindow(GetDlgItem(GetHandle(), id_WorkPoint), FALSE);
714 EnableWindow(GetDlgItem(GetHandle(), id_ControlRange), FALSE);
715 EnableWindow(GetDlgItem(GetHandle(), id_MoveStep), FALSE);
716 // EnableWindow(GetDlgItem(GetHandle(),id_ControlStep),FALSE);
717 }
718 nMotor= TopographyOld.nMotor;
719 Detector= TopographyOld.Sensor;
720 Monitor= TopographyOld.Monitor;
721 //##Motoren- /Detektorenauswahlliste aufbauen
722 hDetectorList= GetDlgItem(GetHandle(), id_ChooseDetector);
723 hMotorList= GetDlgItem(GetHandle(), id_ChooseMotor);
724 TDetectorManager::DetectorManager().FillDetectorComboBox(hDetectorList, 0);
725 for (int i= 0; i < mlGetAxisNumber(); i++)
726 {
727 mlSetAxis(i);
728 ComboBox_AddString( hMotorList, mGetAxisName() );
729 }
730 mlSetAxis(nMotor);
731 FORWARD_WM_COMMAND(hwnd, cm_ParamSet, hwndCtl, 0, SendMessage);
732 return TRUE;
733 };
734
735 //##Bearbeitung verschiedener Nachrichten an das Topographie Einstellen Fenster
736 void TTopographySetParamDlg::Dlg_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
737 {
738 char buf[MaxString];
739 float valuef;
740 int idx;
741
742 switch (id)
743 {
744 //##aktualisieren der Anzeige/Eingabefelder
745 case cm_ParamSet:
746 ComboBox_SelectString(hMotorList, 0, mGetAxisName());
747 ComboBox_SelectString(hDetectorList, 0, Detector->GetCharacteristic());
748 SetDlgItemText(GetHandle(), id_Unit, mGetUnitName());
749 //##SetFocus funktioniert nicht, "verbiegt" aber handle,
750 //##so dass getHandle in Folge fehlerhaften Wert liefert
751 //##
752 //##SetFocus(GetDlgItem(GetHandle(),IDCANCEL));
753 valuef= TopographyOld.fWorkPoint * 100;
754 if (TopographyOld.bSmallAngleSide)
755 valuef *= -1.0;
756 sprintf(buf, "%.1f", valuef);
757 SetDlgItemText(GetHandle(), id_WorkPoint, buf);
758 SetDlgItemInt(GetHandle(), id_Shots, TopographyOld.nNumberCycle, FALSE);
759 sprintf(buf, "%.1f", TopographyOld.fMaxAngleEscape);
760 SetDlgItemText(GetHandle(), id_MaxAngleEscape, buf);
761 //## Schrittweite beim Regeln
762 sprintf(buf, mGetSF(), TopographyOld.fControlStep);
763 SetDlgItemText(GetHandle(), id_ControlStep, buf);
764 sprintf(buf, mGetSF(), TopographyOld.fMoveStep);
765 SetDlgItemText(GetHandle(), id_MoveStep, buf);
766 sprintf(buf, "%.1f", TopographyOld.fControlRange*100);
767 SetDlgItemText(GetHandle(), id_ControlRange, buf);
768 sprintf(buf, "%.1f", TopographyOld.fMaxTime);
769 SetDlgItemText(GetHandle(), id_MaxTime, buf);
770 //##da lMeasurementTime ein long Wert ist, darf hier nicht nach int
771 //##gecastet werden, anstelle der Formatierungsangabe %.d fuer int
772 //##muss %.ld fuer long int stehen
773 //## alt: sprintf(buf,"%.d",(int)(TopographyOld.lMeasurementTime/60l));
774 //##NEU:
775 sprintf(buf, "%.ld", (TopographyOld.lMeasurementTime / 60l));
776 SetDlgItemText(GetHandle(), id_MeasurementTime, buf);
777 sprintf(buf, "%lu", TopographyOld.dwMaxCounts);
778 SetDlgItemText(GetHandle(), id_MaxCounts, buf);
779 CheckDlgButton(GetHandle(), id_MultipleShot, TopographyOld.bMultibleShot);
780 sprintf(buf, "%.1f", TopographyOld.fAngleBetweenShots);
781 SetDlgItemText(GetHandle(), id_StepWidth, buf);
782 sprintf(buf, "%.1f", TopographyOld.dStartAngle);
783 SetDlgItemText(GetHandle(), id_From, buf);
784 //##Falls Fenster von Topographie Ausfuehren aufgerufen wird
785 //## nRestriction == true, vom Hauptmenue aus nRestriction == false
786 //##-> Einfluss auf Aktivierung von Eingabefeldern
787 if (!nRestrictions)
788 {
789 EnableWindow(GetDlgItem(GetHandle(), id_Shots), TopographyOld.bMultibleShot);
790 EnableWindow(GetDlgItem(GetHandle(), id_From), TopographyOld.bMultibleShot);
791 EnableWindow(GetDlgItem(GetHandle(), id_StepWidth), TopographyOld.bMultibleShot);
792 EnableWindow(GetDlgItem(GetHandle(), id_WorkPoint), !TopographyOld.bMultibleShot);
793 EnableWindow(GetDlgItem(GetHandle(), id_ControlRange), !TopographyOld.bMultibleShot);
794 }
795 break;
796
797 //##Motor Auswahlbox wurde angewaehlt
798 case id_ChooseMotor:
799 if (codeNotify==CBN_SELCHANGE)
800 {
801 idx= ComboBox_GetCurSel(hMotorList);
802 //##ueberprueft ob tatsaechlich ein neuer Motor gewaehlt wurde
803 if ((nMotor != idx) && (idx != CB_ERR))
804 {
805 //##initialisiert den ausgewaehlten Motor, aktualisiert die Anzeige
806 mlSetAxis(idx);
807 nMotor= mlGetAxis();
808 FORWARD_WM_COMMAND(hwnd, cm_ParamSet, 0, 0, SendMessage);
809 }
810 }
811 break;
812
813 //##Detektor Auswahlbox wurde angewaehlt
814 case id_ChooseDetector:
815 if (codeNotify==CBN_SELCHANGE)
816 {
817 idx= ComboBox_GetCurSel(hDetectorList);
818 if ((Detector != TDetectorManager::DetectorManager().GetDetector(idx)) && (idx != CB_ERR))
819 {
820 //##setzt den ausgewaehlten Detektor als aktuellen Detektor ein,
821 //##aktualisiert die Anzeige
822 Detector= TDetectorManager::DetectorManager().GetDetector(idx);
823 FORWARD_WM_COMMAND(hwnd, cm_ParamSet, 0, 0, SendMessage);
824 }
825 }
826 break;
827
828 //Datum: 02.08.2002
829 /*//##Zu Zeit nicht genutzt (ehemals gab es neben der Motorauswahl-Box
830 //##Schalter, mit dem sich die Auswahl rotieren lassen sollte)
831 case cm_RotateMotor:
832 mlSetAxis(nMotor+1);
833 nMotor= mlGetAxis();
834 FORWARD_WM_COMMAND(hwnd,cm_ParamSet,0,0,SendMessage);
835 break;*/
836
837 //##Aktivieren bzw. Deaktivieren der Mehrfachbelichtungs Checkbox
838 //##Bei Aktivierung:
839 //##Eingabefelder im Bereich Mehrfachbelichtung werden aktiviert
840 //##Arbeitspunkt Lage und Belichtungsregelung Bereich deaktiviert
841 //##Bei Deaktivierung entsprechend umgekehrte Aktivierung/Deaktivierung
842 //##der Eingabefelder
843 case id_MultipleShot:
844 TopographyOld.bMultibleShot= IsDlgButtonChecked(GetHandle(), id_MultipleShot);
845 EnableWindow(GetDlgItem(GetHandle(), id_Shots), TopographyOld.bMultibleShot);
846 EnableWindow(GetDlgItem(GetHandle(), id_From), TopographyOld.bMultibleShot);
847 EnableWindow(GetDlgItem(GetHandle(), id_StepWidth), TopographyOld.bMultibleShot);
848 EnableWindow(GetDlgItem(GetHandle(), id_WorkPoint), !TopographyOld.bMultibleShot);
849 EnableWindow(GetDlgItem(GetHandle(), id_ControlRange), !TopographyOld.bMultibleShot);
850 break;
851
852 default:
853 TModalDlg::Dlg_OnCommand(hwnd, id, hwndCtl, codeNotify);
854 }
855 };
856
857 //##Testet nacheinander fuer alle Eingabefelder, ob die Werte im
858 //##Wertebereich liegen (im Moment nur Test auf Ungleichheit mit Null,
859 //##siehe auch Fehlerprotokoll) und uebernimmt sie dabei als Variablenwerte
860 //##von TTopographie
861 //##Einzelfaelle ausfuehren
862 BOOL TTopographySetParamDlg::CanClose(void)
863 {
864 char buf[MaxString];
865 float valueF;
866 //##wird nicht mehr benoetigt siehe Aenderung zur Uebernahme von nNumberCycle
867 //##short valueI;
868 long valueL;
869
870 //##Feststellen ob Mehrfachbelichtung ausgewaehlt wurde
871 TopographyOld.bMultibleShot= IsDlgButtonChecked(GetHandle(), id_MultipleShot);
872
873 //##Regelbereich nach Intensitaet in Prozent
874 GetDlgItemText(GetHandle(), id_ControlRange, buf, 10);
875 valueF= atof(buf);
876 //##ein negativer Prozentwert macht keinen Sinn, die Werte muessen >= 0.01
877 //##sonst gibt es bei erneuter Darstellung Probleme, da maximal vier Zeichen
878 //##zur Verfuegung stehen
879 //## alt: if(0.0 != valueF)
880 //##NEU:
881 if (valueF >= 0.01)
882 {
883 TopographyOld.fControlRange= valueF / 100.0;
884 }
885 else
886 return FALSE;
887
888 //##Abstand bei Mehrfachbelichtungen
889 GetDlgItemText(GetHandle(), id_StepWidth, buf, 10);
890 valueF= atof(buf);
891 //##hier gibt es Probleme bei der erneuten Darstellung, falls der Betrag des
892 //##eingebenen Wertes < 0.001
893 //## alt: if(0.0 != valueF)
894 //##NEU:
895 if ((valueF >= 0.001) || (valueF <= -0.001))
896 {
897 TopographyOld.fAngleBetweenShots= valueF;
898 }
899 else
900 return FALSE;
901
902 //##fuer die Mehrfachbelichtung die relative Startposition zur aktuellen
903 //##Motorposition
904 GetDlgItemText(GetHandle(), id_From, buf, 10);
905 TopographyOld.dStartAngle= atof(buf);
906
907 //##Regel Schrittweite
908 GetDlgItemText(GetHandle(), id_ControlStep, buf, 10);
909 valueF= atof(buf);
910 //##negative Werte sind hier nicht sinnvoll, bei der erneuten Darstellung
911 //##gibt es Probleme, falls der Betrag des eingegebenen Wertes < 0.00001
912 //## alt: if(0.0 != valueF)
913 //##NEU:
914 if ( valueF >= 0.00001 )
915 {
916 TopographyOld.fControlStep= valueF;
917 }
918 else
919 return FALSE;
920
921 //##Schrittweite zum Anfahren des Arbeitspunktes
922 GetDlgItemText(GetHandle(), id_MoveStep, buf, 10);
923 valueF= atof(buf);
924 //##negative Werte sind hier nicht sinnvoll, bei der erneuten Darstellung
925 //##gibt es Probleme, falls der Betrag des eingegebenen Wertes < 0.0001
926 //## alt: if(0.0 != valueF)
927 //##NEU:
928 if ( valueF >= 0.0001 )
929 {
930 TopographyOld.fMoveStep= valueF;
931 }
932 else
933 return FALSE;
934
935 //##maximale Abweichung vom Arbeitspunkt
936 GetDlgItemText(GetHandle(), id_MaxAngleEscape, buf, 10);
937 valueF= atof(buf);
938 //##negative Werte sind hierfuer nicht sinnvoll, ist der eingegebene
939 //##Wert < 0.01, so wird er bei der naechsten Darstellung als 0.0 angezeigt
940 //## alt:if(0.0 != valueF)
941 //##NEU:
942 if (valueF >= 0.01 )
943 {
944 TopographyOld.fMaxAngleEscape= valueF;
945 }
946 else
947 return FALSE;
948
949 //##Belichtungszeit
950 GetDlgItemText(GetHandle(), id_MeasurementTime, buf, 10);
951 valueL= atol(buf);
952 //##eine negative Belichtungszeit macht keinen Sinn, da es sich
953 //##um einen long Wert handelt, sollte nicht mit einem double Wert
954 //##(0.0) verglichen werden
955 //## alt: if(0.0 != valueL)
956 //##NEU:
957 if ( (valueL > 0) )
958 {
959 TopographyOld.lMeasurementTime= valueL * 60l;
960 }
961 else
962 return FALSE;
963
964 //##Anzahl Zyklen fuer Mehrfachbelichtung
965 //##eigentlich wird dieser Wert nur benoetigt, falls Mehrfachbelichtung
966 //##angekreuzt ist
967 GetDlgItemText(GetHandle(), id_Shots, buf, 10);
968 //##nNumberCycle ist vom Type WORD (vorzeichenlos, max. 65535)
969 //##im Eingabefeld koennen aber auch groessere Werte und negative Werte
970 //##eingegeben werden, beides fuehrt zu Ueberlaeufen
971 //##alt: valueI= (short)atoi(buf);
972 //##alt: if(0.0 != valueI)
973 //##NEU:
974 valueL= atol(buf);
975 if ( (valueL > 0) && (valueL <= 65535L) )
976 {
977 TopographyOld.nNumberCycle= valueL;
978 }
979 else
980 return FALSE;
981
982 //##Lage des Arbeitspunktes relativ zur aktuellen Intensitaet
983 GetDlgItemText(GetHandle(), id_WorkPoint, buf, 10);
984 valueF= atof(buf);
985 //##ist der Betrag < 0.001 gibt es bei erneuter Darstellung Probleme
986 //## alt: if(0.0 != valueF)
987 //##NEU:
988 if ( (valueF >= 0.001) || (valueF <= -0.001))
989 {
990 TopographyOld.bSmallAngleSide= (valueF < 0.0);
991 TopographyOld.fWorkPoint= fabs(valueF / 100);
992 }
993 else
994 return FALSE;
995
996 //##maximale Zaehlzeit des Detektors
997 GetDlgItemText(GetHandle(), id_MaxTime, buf, 10);
998 valueF= atof(buf);
999 //##negative Werte sind nicht sinnvoll, ist der Wert < 0.0001 ist
1000 //##die Neudarstellung fehlerhaft
1001 //## alt: if(0.0 != valueF)
1002 //##NEU:
1003 if ( valueF >= 0.0001 )
1004 {
1005 TopographyOld.fMaxTime= valueF;
1006 }
1007 else
1008 return FALSE;
1009
1010 //##maximale Zaehlercounts
1011 GetDlgItemText(GetHandle(), id_MaxCounts, buf, 10);
1012 valueL= atol(buf);
1013 //##ein negativer Wert ist hier nicht sinnvoll, da es sich um einen
1014 //##long Wert handelt, sollte nicht mit einem double Wert (0.0)
1015 //##verglichen werden
1016 // alt: if(0.0 != valueL)
1017 //##NEU:
1018 if ( valueL > 0 )
1019 {
1020 TopographyOld.dwMaxCounts= valueL;
1021 }
1022 else
1023 return FALSE;
1024
1025 TopographyOld.nMotor= nMotor;
1026 TopographyOld.Sensor= Detector;
1027 TopographyOld.Monitor= Monitor;
1028 return TRUE;
1029 };
1030
1031 //##Aufraeumen beim Schliessen des Einstellungen Topographie Fenster
1032 void TTopographySetParamDlg::LeaveDialog(void)
1033 {
1034 //JP 12.08.2002
1035 // Vorher sollte da wenigstens ein vernuenftiger Wert reingeschrieben werden
1036 // mlSetAxis(nOldMotor);
1037 };
1038 //******************************************************************************
1039 // __LastLine__
1040
1041