Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi EAccessViolation in BitBlt (https://www.delphipraxis.net/133004-eaccessviolation-bitblt.html)

EWeiss 23. Apr 2009 15:04


EAccessViolation in BitBlt
 
Delphi-Quellcode:
TfrmDraw = class(TForm)
  PicFlame0: TImage;

BitBlt(DC, k - 1, trunc(Abs(63 - TRA[k])), 1, 63, PicFlame0.Canvas.Handle, 0, 0, SRCCOPY);
PicFlame0.Canvas.Handle
verursacht ein AV ? Noch nie erlebt sowas.

wenn ich es so übergebe funktioniert es
Delphi-Quellcode:
DC2 := PicFlame0.Canvas.Handle;
BitBlt(DC, k - 1, trunc(Abs(63 - TRA[k])), 1, 63, DC2 , 0, 0, SRCCOPY);
was ist das denn für ein trick :gruebel:
Das Bitmap ist 1 Pixel in der weite und 64 Pixel hoch.

gruss EMil

Blup 24. Apr 2009 07:31

Re: EAccessViolation in BitBlt
 
Müsste es nicht eigentlich so funktionieren:

PicFlame0.Picture.Bitmap.Canvas.Handle

EWeiss 24. Apr 2009 08:10

Re: EAccessViolation in BitBlt
 
Zitat:

Zitat von Blup
Müsste es nicht eigentlich so funktionieren:

PicFlame0.Picture.Bitmap.Canvas.Handle

kann es mal testen.. (obwohl es jetzt funktioniert)
Danke!

gruss Emil

jaenicke 24. Apr 2009 08:15

Re: EAccessViolation in BitBlt
 
TImage.Canvas leitet auf das entsprechende Bild weiter. Wenn also in Picture.Graphic eine TBitmap liegt, dann ist TImage.Canvas = TImage.Picture.Bitmap.Canvas. Liegt keine drin, wird die z.B. beim Zugriff auf die Eigenschaft TImage.Picture.Bitmap mit den aktuellen Dimensionen des TImages erzeugt.

Warum hast du den Fehler nicht mal debuggt? Einfach in den Projektoptionen unter Compiler nen Häkchen in Debug-DCUs, dann kannst du die delphieigenen Units debuggen. (Es sei denn man hat ne Personal Edition, Turbo Delphi Explorer geht aber natürlich.)

EWeiss 24. Apr 2009 08:31

Re: EAccessViolation in BitBlt
 
Zitat:

Zitat von jaenicke
Warum hast du den Fehler nicht mal debuggt? Einfach in den Projektoptionen unter Compiler nen Häkchen in Debug-DCUs, dann kannst du die delphieigenen Units debuggen. (Es sei denn man hat ne Personal Edition, Turbo Delphi Explorer geht aber natürlich.)

Gute frage ;)
Weil ich den trick mit "nen Häkchen in Debug-DCUs" noch nicht kannte.
Werd es mir für die zukunft merken.

gruss Emil


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:27 Uhr.

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