Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Boolean-Problem


colaka - Sa 24.09.11 11:12
Titel: Boolean-Problem
Hallo,

egal, ob ich die Dialogabfrage mit ja oder mit nein beantworte, erscheint immer ShowMessage('Weitermachen'). Ich will aber nur weitermachen, wenn Update false ist.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
var
  Update : Boolean;
  DatumUpdateFTP, DatumUpdate : TDateTime;
begin
  Update := false;
  if (DatumUpdateFTP - DatumUpdate) > 0.001 then // kann ProgrammUpdate durchgeführt werden
    if MessageDlg('Es gibt eine verbesserte Programmversion.' + #10#13
      + 'Möchten Sie das Programm jetzt aktualisieren?', mtConfirmation, [mbYes, mbNo], 0)
      = mrYes then
    begin
      ShowMessage('Update');
      Update := true;
    end
  if not Update then
  begin
    ShowMessage('Weitermachen');
  end;


Entweder habe ich immer noch ein Problem mit den Boolean-Werten oder mit MessageDlg, jedenfalls kann ich den Fehler einfach nicht finden und wäre für jeden Hinweis dankbar.

Danke Ebi


Narses - Sa 24.09.11 11:30

Moin!

Warum rechnest du mit den Datumswerten? :nixweiss:

Ich würde das so machen:

Delphi-Quelltext
1:
  if (DatumUpdateFTP > DatumUpdate) then // kann ProgrammUpdate durchgeführt werden                    
cu
Narses


colaka - Sa 24.09.11 11:35

Hallo,

weil durch den Programmablauf manchmal kleine Zeitdifferenzen an der 5. Stelle oder noch später auftreten.


Narses - Sa 24.09.11 11:39

Moin!

user profile iconcolaka hat folgendes geschrieben Zum zitierten Posting springen:
weil durch den Programmablauf manchmal kleine Zeitdifferenzen an der 5. Stelle oder noch später auftreten.
Das ist beim Datentyp TDateTime "normal". :nixweiss: Zeig mal den Code, in dem du die Inhalte dieser Variablen bestimmst. Oder anders: was sollte denn drin stehen?

An den Boolean liegt´s jedenfalls nicht, da kann man doch kaum was falsch machen. Sobald du den Hinweis kriegst "Update", wird auch das zweite Showmessage unterdrückt. Wenn nicht, ist deine CPU kaputt. ;)

cu
Narses


colaka - Sa 24.09.11 11:50

Hallo,

DaumUpdate hol ich mir aus der Ini-Datei:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
  IniDat := TIniFile.Create(FHaupt.Datenpfad+'Quantall.ini');
  try
    DatumUpdate := IniDat.ReadFloat('Aktuell''Update'1);
    finally
      IniDat.Free;
  end;


und DatumUpdateFTP hol ich mir vom Server:

Delphi-Quelltext
1:
    DatumUpdateFTP := IdFTP.FileDate('update.dat');                    


Wenn ich die Dialogabfrage mit "nein" beantworte, erscheint korrekterweise ShowMessage('weitermachen').
Aber wenn ich sie mit "ja" beantworte, erscheint zuerst ShowMessage('Update') und dann auch noch ShowMessage('weitermachen'). Und da muß doch irgendwo ein Fehler sein.

Danke Ebi


Narses - Sa 24.09.11 11:55

Moin!

user profile iconcolaka hat folgendes geschrieben Zum zitierten Posting springen:
Wenn ich die Dialogabfrage mit "nein" beantworte, erscheint korrekterweise ShowMessage('weitermachen').
OK.

user profile iconcolaka hat folgendes geschrieben Zum zitierten Posting springen:
Aber wenn ich sie mit "ja" beantworte, erscheint zuerst ShowMessage('Update') und dann auch noch ShowMessage('weitermachen'). Und da muß doch irgendwo ein Fehler sein.
Hmm... :gruebel: Benenne mal die Variable um, nicht dass das da mit irgendwelchen Formulareigenschaften oder globalen Variablen kollidiert oder so. :?

Delphi-Quelltext
1:
2:
var
  MyUpdate : Boolean;
cu
Narses


colaka - Sa 24.09.11 12:01

Hallo,

das war wohl das Problem. Jetzt funktioniert alles so, wie es soll.

Tausend Dank.


Narses - Sa 24.09.11 12:09

Moin!

user profile iconcolaka hat folgendes geschrieben Zum zitierten Posting springen:
das war wohl das Problem. Jetzt funktioniert alles so, wie es soll.
:beer:

Einen Tipp habe ich aber noch:
user profile iconcolaka hat folgendes geschrieben Zum zitierten Posting springen:

Delphi-Quelltext
1:
2:
3:
  IniDat := TIniFile.Create(FHaupt.Datenpfad+'Quantall.ini');
  try
    DatumUpdate := IniDat.ReadFloat('Aktuell''Update'1);
Es gibt auch eine Methode .ReadDateTime(), das würde ich nicht explizit auf einen Float zwingen. :idea:

cu
Narses