Entwickler-Ecke

Sonstiges (Delphi) - "Falscher Parameter" Meldung abschalten


fuggaz - Fr 20.03.09 21:53
Titel: "Falscher Parameter" Meldung abschalten
Hallo,

Ich habe das Problem, dass Delphi nicht meine except-Anweisung ausführt:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
bmp.width:=-1;
try
str_uebersicht.Canvas.CopyRect(RectBmp,Bmp.Canvas,rect(0,0,Bmp.Width-1,Bmp.Height-1));
except
ShowMessage('fehlermeldung');
end;


Es gibt seine eigene Fehlermeldung aus:
"Falscher Parameter"
Wie kann ich das unterbinden?
(Es passiert auch unabhängig von der IDE)


jaenicke - Fr 20.03.09 22:09

Eine Fehlermeldung zu unterbinden ist ja wohl kaum der richtige Weg...
Finde doch lieber heraus warum an der Stelle überhaupt ein Fehler kommt. Bist du sicher, dass das da passiert? Der Quelltext sieht soweit eigentlich normal aus.

Mögliche Fehlerquellen gibt es viele:Und noch viele mehr. Aber das lässt sich durch Debugging ja herausfinden.


Delete - Fr 20.03.09 22:31


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
bmp.width:=-1;
try
  str_uebersicht.Canvas.CopyRect(RectBmp,Bmp.Canvas,rect(0,0,Bmp.Width-1,Bmp.Height-1));
except
  on E:Exception do
    ShowMessage(E.Message);
end;


Eine nichts sagende Fehlermeldung ist sowieso meinst wenig hilfreich. Daher hat dir die Fehlermeldung von Delphi wesentlich weitergeholfen als dein "Fehlermeldung".


Flamefire - Sa 21.03.09 11:20

das was ich sehe ist:bmp.width:=-1;
du setzt also seine bitmap auf eine negative breite???
wenn dort noch kein fehler kommt, dann spätestens beim versuch ein rechteck, dass von 0 bis -2 geht aus der bmp zu kopieren
andre mögliche stelle: der fehler kommt schon beim versuch der typconvertierung in ein rechteck:

Delphi-Quelltext
1:
rect(0,0,Bmp.Width-1,Bmp.Height-1)                    


jaenicke - Sa 21.03.09 15:17

Das hatte ich auch gedacht, aber ich hatte es ausprobiert. Der Code ist bei mir mit Delphi 2006 ohne Fehler durchgelaufen. :nixweiss:
Sinn macht es natürlich trotzdem keinen.


ffgorcky - Sa 21.03.09 21:52

Dort steht doch keine Zuweisung in Form von bmp.width:=-1
sondern er kopiert doch (fast) das gesamte Bitmap - nur ohne die äußerst rechten und unteren Pixel.

Oder verstehe ich das jetzt gerade verkehrt?


jaenicke - Sa 21.03.09 21:55

user profile iconffgorcky hat folgendes geschrieben Zum zitierten Posting springen:
Dort steht doch keine Zuweisung in Form von bmp.width:=-1
:gruebel:
user profile iconfuggaz hat folgendes geschrieben Zum zitierten Posting springen:
Ich habe das Problem, dass Delphi nicht meine except-Anweisung ausführt:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
bmp.width:=-1;
try
str_uebersicht.Canvas.CopyRect(RectBmp,Bmp.Canvas,rect(0,0,Bmp.Width-1,Bmp.Height-1));
except
ShowMessage('fehlermeldung');
end;


ffgorcky - Sa 21.03.09 21:59

Ach ja! Stimmt ja!
Das habe ich doch glatt übersprungen beim lesen und mich nur um das CopyRect gekümmert... :-(


fuggaz - So 22.03.09 11:09

Also, es ist so:
Eben weil die Delphi-Fehlermeldung relativ nichtssagend ist, wollte ich mir eine Fehlermeldung einbauen:
"In Prozedur soundso ist der und der Fehler aufgetreten"
Dann weiß ich direkt in welcher Prozedur das auftritt.
Und Fehler zu vermeiden ist ja logischerweise das Hauptziel, aber man kann ja nicht davon ausgehen, dass ein Programm fehlerfrei ist.
Deshalb möchte ich das gerne einbauen.

Und die Weite setze ich deshalb auf -1, um den Fehler zu simulieren.

Zitat:

Das hatte ich auch gedacht, aber ich hatte es ausprobiert. Der Code ist bei mir mit Delphi 2006 ohne Fehler durchgelaufen.

Das finde ich interessant^^


jaenicke - So 22.03.09 14:59

user profile iconfuggaz hat folgendes geschrieben Zum zitierten Posting springen:
Und die Weite setze ich deshalb auf -1, um den Fehler zu simulieren.
Füge an solche Stellen am besten immer einen Todo-Eintrag oder eine Ausgabe ins Compilerlog hinzu. Sonst vergisst du sowas am Ende noch im fertigen Programm. ;-)

Delphi-Quelltext
1:
2:
{ TODO 5 -oName des Entwicklers -cCode zum Fehler provozieren : Wenn fertig, entfernen! }
{$MESSAGE warn 'Wenn fertig diesen Code zur Fehlerprovokation entfernen!'}
Die Todo-Einträge kannst du unter Ansicht --> To-Do Liste anschauen, den Warnhinweis siehst du als Warnung in der Compilerausgabe.

user profile iconfuggaz hat folgendes geschrieben Zum zitierten Posting springen:
Zitat:

Das hatte ich auch gedacht, aber ich hatte es ausprobiert. Der Code ist bei mir mit Delphi 2006 ohne Fehler durchgelaufen.

Das finde ich interessant^^
Wenn das bei dir einen Fehler auslöst, dann ist das wohl vom Compiler oder Betriebssystem abhängig. Bei mir kommt jedenfalls mit Delphi 2006 und Vista kein Fehler. :mrgreen:


fuggaz - So 22.03.09 16:10

Ich hab das Problem gefunden.
Die Fehlermeldung kommt bei mir schon wenn ich bmp.width auf -1 setze.
Deshalb kommt Delphi natürlich erst gar nicht in meinen except-Teil.
Dann kann ich wohl davon ausgehen, dass es irgendwoanders abstürzen wird.(was ich nicht hoffen will^^).

Trotzdem interessant, dass es bei neueren Version klappt.


Danke für eure Antworten:-)

Edit:
Achso, To-Do Liste gibt es bei mir nicht.
Benutze Delphi7.
Dafür hab ich Notepad^^