Ik ben bezig met het aanpassen/uitbreiden van een applicatie die geschreven is in Delphi 7.
Heel in het kort doet de applicatie het volgende.
Elke twee seconden wordt een string door de compoort gestuurd waarop het aangesloten apparaat data terug stuurt.
Deze data wordt in een logfile opgeslagen.
Omdat het apparaat via een externe batterij van stroom wordt voorzien kan het voorkomen (en dat gebeurd in de praktijk regelmatig) dat de batterij leeg raakt. Er wordt daardoor geen data meer gestuurd door het apparaat.
De applicatie reageert daarop door de status op 'Pauze' te zetten en te pauzeren met het wegschrijven in de logfile. De timer gaat wel gewoon door en blijft vragen om data.
Een messageDlg wordt getoond met de mededeling dat er geen data meer door de poort komt.
Vervolgens kan de gebruiker de batterij verwisselen, de messageDlg wegklikken en het loggen hervatten door op de 'Hervat'-knop te klikken. De status wordt dan weer 'Loggen' en de data wordt gelogd.
Dit werkt allemaal prima, behalve het wegklikken van de messageDlg. Er dient een aantal keren op de OK-knop geklikt te worden alvorens er wordt gereageerd.
Zet ik nu een breakpunt op de messageDlg, waardoor de execution stopt en ik klik dan op OK dan verdwijnt messageDlg gelijk.
Ik heb al Application.ProcessMessages; toegevoegd maar zonder resultaat.
Hier is de code:
Wie kan mij vertellen wat ik vergeet.
Misschien wel al duidellijk, maar ik heb (nog) weinig kennis van Delphi
Alvast bedankt.
Heel in het kort doet de applicatie het volgende.
Elke twee seconden wordt een string door de compoort gestuurd waarop het aangesloten apparaat data terug stuurt.
Deze data wordt in een logfile opgeslagen.
Omdat het apparaat via een externe batterij van stroom wordt voorzien kan het voorkomen (en dat gebeurd in de praktijk regelmatig) dat de batterij leeg raakt. Er wordt daardoor geen data meer gestuurd door het apparaat.
De applicatie reageert daarop door de status op 'Pauze' te zetten en te pauzeren met het wegschrijven in de logfile. De timer gaat wel gewoon door en blijft vragen om data.
Een messageDlg wordt getoond met de mededeling dat er geen data meer door de poort komt.
Vervolgens kan de gebruiker de batterij verwisselen, de messageDlg wegklikken en het loggen hervatten door op de 'Hervat'-knop te klikken. De status wordt dan weer 'Loggen' en de data wordt gelogd.
Dit werkt allemaal prima, behalve het wegklikken van de messageDlg. Er dient een aantal keren op de OK-knop geklikt te worden alvorens er wordt gereageerd.
Zet ik nu een breakpunt op de messageDlg, waardoor de execution stopt en ik klik dan op OK dan verdwijnt messageDlg gelijk.
Ik heb al Application.ProcessMessages; toegevoegd maar zonder resultaat.
Hier is de code:
Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
| procedure TfrmMain.OnFout(Sender: TObject; Msg, Error: String); var t: textFile; var regel: String; var crlf : string; var msg2: string; begin crlf := Chr(13)+Chr(10); If not (Status = idle) and not (Status = LoggenOppauze) then Begin btnPauzeClick(nil); //Pauzeer de meting //Schrijf de fout weg in een log file. Try begin //Zet maar gewoon bij de logfiles: if not FileExists('Error.log') then begin try begin AssignFile(t, 'Error.log'); Rewrite(t); CloseFile(t); end except end; end; AssignFile(t, 'Error.log'); Append(t); regel := DateToStr(Date) + ' ' + TimeToStr(Time); regel := regel + ': ' + Msg + ': ' + Error; writeln(t, regel); Closefile(t); end except on E: Exception do begin OutputDebugString(PChar('Exception in TfrmMain.OnFout: ' + E.Message)); ShowMessage(E.Message); end; end; sndPlaySound('sirene.wav', 1); //laat sirene horen //Zet tijd erbij om te kijken of het wel om dezelfde box gaat: msg2 := TimeToStr(now) + 'OnFout! Status: ' + inttostr(ord(status)) + FError + Msg + Error; OutputDebugString(PChar(msg2)); Application.ProcessMessages; messageDlg(msg2, mtError, [mbOk], 0); Application.ProcessMessages; end; end; |
Wie kan mij vertellen wat ik vergeet.
Misschien wel al duidellijk, maar ik heb (nog) weinig kennis van Delphi
Alvast bedankt.