Zitat von
sirius:
@Muetze.
Du solltest aber Assertions und Exceptions nicht durcheinanderbringen.
Dito, habe ich nämlich nicht! Ich habe nichts von Exceptions geschrieben oder beschrieben. Anscheinend verwechselst du Exceptions und Assertions.
Zitat von
TUX_der_Pinguin:
Naja ich dachte wenn ich verhinder das SendMessage ausgeführt wird wenn das
Handle größer MaxInt ist dann der Fehler in der Bereichsprüfung nicht mehr auftaucht. Das hatte ich wohl falsch verstanden. :gruebel:
Der Fehler würde dann nicht mehr auftauchen, aber die Message auch nicht versandt - und die ist bestimmt nicht an der Codestelle, weil es so schöner aussieht...
Zitat von
TUX_der_Pinguin:
Und wie sag ich dem Compiler das er das als LongWord bzw. Cardinal senden soll, ich dachte die
Handle sind vom Typ Cardinal!?
Senden tut er 32 Bit für den WParam und LParam, also inklusive des 31. Bits. Ob dies aber nun als Vorzeichen oder nicht interpretiert wird, definiert der Datentyp. Die Funktion will einen Datentyp wo das 31. Bit ein Vorzeichen ist. Also direkt casten, also Delphi sagen, er soll die 32 Bits als Integer sehen. Bisher sieht er es als Cardinal an und sieht er braucht integer. Somit wandelt er es um, aber löst eine
exception aus, wenn der Wert nicht in das Ziel passt, was bei Werten > MaxInt der Fall ist. Um diese Umwandlung (damit die Prüfung) zu umgehen, einfach hart sagen: Delphi, das ist kein Cardinal, das siehst du falsch - das ist ein Integer. Also nix machen, das passt doch...
SendMessage(barStatus.Handle, SB_SETICON, integer(Panel), integer(AnimatedIcon.Handle));