Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Fehlermeldung wenn keine Showmessage? (https://www.delphipraxis.net/169023-fehlermeldung-wenn-keine-showmessage.html)

loirad 24. Jun 2012 20:06

Fehlermeldung wenn keine Showmessage?
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo liebe Community,

ich habe (mal wieder) ein Problem. Ich arbeite an einem Kalender, in den man Termine eintragen kann. Soweit so schön. Jedoch erhalte ich eine Fehlermeldung (siehe Anhang). Diese Fehlermeldung tritt in folgendem Abschnitt auf:
Delphi-Quellcode:
if (length(VonDatum.Text)>=8) and (length(VonZeit.Text)>=3) and
    (Beschreibung.Text<>'') and (((Geburtstag.Checked=true) and
    (length(Geburtsjahr.Text)=4)) or (Geburtstag.Checked=false)) then
  begin
   Form3.Hide;
   vDatum:=VonDatum.Text;
   bDatum:=BisDatum.Text;
   vZeit:=VonZeit.Text;
   bZeit:=BisZeit.Text;
   //showmessage('');
   setlength(Form1.Termine,length(Form1.Termine)+1);
   with Form1.Termine[length(Form1.Termine)] do
    begin
     VonTag:=T(vDatum);
     VonMonat:=M(vDatum);
     VonJahr:=J(vDatum);
     if bDatum<>'' then
      begin
       BisTag:=T(bDatum);
       BisMonat:=M(bDatum);
       BisJahr:=J(bDatum);
      end;
     Wiederholung:=Form3.Wiederholung.ItemIndex;
     Beschreibung:=Form3.Beschreibung.Text;
    end;
   Beschreibung.Clear;
   BisDatum.Clear;
   BisZeit.Clear;
   Geburtsjahr.Text:='Geburtsjahr';
   Geburtsjahr.Font.Color:=clGray;
   Geburtstag.Checked:=false;
   VonDatum.Clear;
   VonZeit.Clear;
   Wiederholung.ItemIndex:=-1;
   Form1.Show;
  end
 else
  showmessage('Fehler! Bitte alle Felder korrekt ausfüllen!');
Das Kuriose daran: Der Fahler tritt nur auf, wenn ich die showmessage rausnehme!

Woran liegt das? Kann mir da jemand helfen? Application.ProcessMessages oder sleep hilft nichts.

Liebe Grüße
loirad

PS.: Anbei das Projekt für besseres Verständnis.

jaenicke 24. Jun 2012 21:02

AW: Fehlermeldung wenn keine Showmessage?
 
Das kann ich weder mit aktuellen Delphiversionen noch mit Delphi 7 nachvollziehen. Was genau machst du im Programm, damit der Fehler passiert?

Und am besten häng die Exe, bei der der Fehler passiert, auch an (wenn ich das richtig verstehe, muss ja das ShowMessage raus, das in deinem Anhang noch drin ist).

Zudem kannst du FastMM4 im FullDebugMode einbinden. Dann siehst du vielleicht wo der Fehler auftritt.

himitsu 24. Jun 2012 21:23

AW: Fehlermeldung wenn keine Showmessage?
 
Zitat:

Diese Fehlermeldung tritt in folgendem Abschnitt auf:
Und wo tritt nun der Fehler auf?
Welche Codezeile?


[add]
Tipp: Geh in die Projektoptionen und aktiviere die Bereichprüfung.
Du hast dir einen Pufferüberlauf (Buffer Overrun) gebaut.

Oder im Quellcode.
Delphi-Quellcode:
{$R+} aka {$RANGECHECKS ON}
(alt / neu)

und eventuell auch mal die
Delphi-Quellcode:
{$Q+} aka {$OVERFLOWCHECKS ON}




Zitat:

Delphi-Quellcode:
Form1.Termine[length(Form1.Termine)]


Popov 24. Jun 2012 22:30

AW: Fehlermeldung wenn keine Showmessage?
 
Gibt es davor evtl. eine if-else abfrage?

Bjoerk 24. Jun 2012 23:22

AW: Fehlermeldung wenn keine Showmessage?
 
Die Tage brauchst du nicht freizugeben, das übernimmt Kalender. Wenn ich das richtig sehe, gehört das setlength(Termine, 0) nur nach TForm1.FormDestroy. So ist es bei mir durchgelaufen. Deinen Fehler konnte ich nicht reproduzieren, weil er immer sagt, es seien nicht alle Felder ausgefüllt.

himitsu 25. Jun 2012 01:22

AW: Fehlermeldung wenn keine Showmessage?
 
[Hinweis]
Einen Buffer-Overrun bemerkt man nicht immer sofort, es kommt immer darauf an ob zufällig Speicher an der Stelle vorhanden ist und ob und mit was er sonst noch belegt ist also ob/was dort überschrieben wird.
Drum bemerkt auch nicht jeder sofort den Fehler .... außer man schaltet entsprechende Prüfcodes ein, bzw. baut selber ordentliche Prüfungen ein.




Das mit dem nicht richtig ausgefüllt ...

Die GUI ist schon sehr unintuitiv, da wäre es besser gewesen du hättest alles einzeln geprüft und dem Benutzer ordentliche/aussagefähige Fehlermeldungen rausgegeben.
Man kann mit Delphi-Referenz durchsuchenTComponent.SetFocus oder Delphi-Referenz durchsuchenTForm.ActiveControl auch noch die erste Fehlerstelle angeben, bzw rote Fehlermarkierungen kommen auch immer gut an.
Da ich bei Geburtstag das Alter eintragen wollte, denn wenn schon was drin steht, sieht man deinen "Hinweis" nicht mehr, bin ich erst beim Debuggen, also dem Prüfen was dein IF von mir will, auf die 4-Stellingkeit gekommen. :oops:

Tipp: Es gibt einen TDateTimePicker, welchen man Datums- und Zeitangaben verwenden kann.

knochen 25. Jun 2012 08:27

AW: Fehlermeldung wenn keine Showmessage?
 
with Form1.Termine[length(Form1.Termine)] do -->
with Form1.Termine[High(Form1.Termine)] do

loirad 25. Jun 2012 09:23

AW: Fehlermeldung wenn keine Showmessage?
 
Hallo!
Erstmal ein großes Dankeschön an Alle, die geantwortet haben!
@jaenicke: Ich habe Delphi 6 und es läuft nicht durch, wenn ich ein neuen Termin anlegen will!
@Popov: Nein!
@Bjoerk: Hat nichts gebracht aber trotzdem Danke!
@himitsu: Das mit dem TDateTimePicker werde ich mir mal ansehen und die roten Umrandungen auch mal überlegen!
@knochen: Vielen Dank! Das war tatsächlich der Fehler :thumb:

Ja vielen Dank nochmal! Nach wie Vor die beste Community die ich kennne!

Liebe Grüße
loirad

DeddyH 25. Jun 2012 09:27

AW: Fehlermeldung wenn keine Showmessage?
 
Zitat:

Zitat von loirad (Beitrag 1172275)
Vielen Dank! Das war tatsächlich der Fehler :thumb:

Anscheinend hast Du #3 nicht gelesen, sonst hättest Du das schon gestern Abend gewusst :zwinker:

loirad 25. Jun 2012 09:41

AW: Fehlermeldung wenn keine Showmessage?
 
@DeddyH: Ich habe mir die Zuschriften heute früh von unten nach oben durchgelesen -> als erstes von knochen und siehe da: Lösung gefunden!


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:36 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz