Autor Beitrag
fuggaz
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 106



BeitragVerfasst: Fr 20.03.09 22:53 
Hallo,

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

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 20.03.09 23: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:
  • Deine Bmp oder str_uebersicht sind aus einem Grund selbst fehlerhaft.
  • Der Quelltext oder ein anderer Quelltext in dem Zusammenhang wird in einem Thread aufgerufen
  • Irgendwo wird falscher Speicher überschrieben
Und noch viele mehr. Aber das lässt sich durch Debugging ja herausfinden.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 20.03.09 23:31 
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1207
Erhaltene Danke: 31

Win 10
Delphi 2009 Pro, C++ (Visual Studio)
BeitragVerfasst: Sa 21.03.09 12: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:
ausblenden Delphi-Quelltext
1:
rect(0,0,Bmp.Width-1,Bmp.Height-1)					
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 21.03.09 16: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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 573

WIN XP/2000 & 7Prof (Familie:Win95,Win98)

BeitragVerfasst: Sa 21.03.09 22: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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 21.03.09 22: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:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 573

WIN XP/2000 & 7Prof (Familie:Win95,Win98)

BeitragVerfasst: Sa 21.03.09 22:59 
Ach ja! Stimmt ja!
Das habe ich doch glatt übersprungen beim lesen und mich nur um das CopyRect gekümmert... :-(
fuggaz Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 106



BeitragVerfasst: So 22.03.09 12: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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 22.03.09 15: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. ;-)
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 106



BeitragVerfasst: So 22.03.09 17: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^^