Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Problem beim Zeichnen eines neuen Bitmap (https://www.delphipraxis.net/124539-problem-beim-zeichnen-eines-neuen-bitmap.html)

Cyf 20. Nov 2008 18:01


Problem beim Zeichnen eines neuen Bitmap
 
Entschuldigt den Titel, ist vermutlich wenig aufschlussreich, aber einen passenderen finde ich nicht. :gruebel:
Folgender Code verhält sich nicht wie ich es erwarten würde:

Delphi-Quellcode:
procedure TMainForm.PaintCoords;
var
  Bitmap: TBitmap;
begin
  Image.Picture.Bitmap.Free;
  Bitmap:= TBitmap.Create;
  Bitmap.SetSize(MaxX+1, MaxY+1); //beide global

  //eigentlich bischen was komplexeres, aber hiermit ist es bei mir reproduzierbar
  Bitmap.Canvas.LineTo(100,100);

  Image.Picture.Bitmap:= Bitmap;
end;
Beim ersten Aufruf erscheint kein Bild, erst wenn der Code mindestens ein weiteres Mal aufgerufen wird, verhält er sich wie erwartet.
Mache ich grobe Fehler bei der Objekt-Erstellung, oder wo liegt der Haken? Habe schon ein wenig rumprobiert und komme tatsächlich nicht darauf. :?

DeddyH 20. Nov 2008 18:05

Re: Problem beim Zeichnen eines neuen Bitmap
 
Und so?
Delphi-Quellcode:
procedure TMainForm.PaintCoords;
var
  Bitmap: TBitmap;
begin
  //Image.Picture.Bitmap.Free;
  Bitmap:= TBitmap.Create;
  try
    Bitmap.SetSize(MaxX+1, MaxY+1); //beide global

    //eigentlich bischen was komplexeres, aber hiermit ist es bei mir reproduzierbar
    Bitmap.Canvas.LineTo(100,100);

    Image.Picture.Bitmap.Assign(Bitmap);
  finally
    Bitmap.Free;
  end;
end;

Cyf 20. Nov 2008 18:42

Re: Problem beim Zeichnen eines neuen Bitmap
 
Selber Fehler. :pale:
Eigentlich ist es auch das (im Resultat) selbe, ob ich direkt in das alte Bild kopiere, oder die Referenz umbiege, oder?
Warum bei dieser Variante eigentlich das try..finally?

Wenn ich das ganze so:

Delphi-Quellcode:
Bitmap:= TBitmap.Create;
Bitmap.SetSize(MaxX+1, MaxY+1);

Bitmap.Canvas.LineTo(100,100);
 
Image.Picture.Bitmap.Free;
Image.Picture.Bitmap:= Bitmap;
umstelle, bekomme ich intressanterweise nie ein Bild, dafür aber beim Beenden:


Im Projekt TSP.exe ist eine Exception der Klasse EInvalidPointer mit der Meldung 'Ungültige Zeigeroperation' aufgetreten.
---------------------------
Exception EInvalidPointer in Modul [...] bei 00003DAD.

Ungültige Zeigeroperation.

Cyf 21. Dez 2008 20:42

Re: Problem beim Zeichnen eines neuen Bitmap
 
Ich grab den Thread mal aus, weil ichs nochmal wissen wollte.
Ich hab mich mal Grad durch den VCL-Code gewühlt und glaube das Zuweisungen auf Picture und Bitmap (die ja Propertys sind) sowieso schon einem Assign entspricht, das erklärt zwar die Fehlermeldung noch nicht so ganz, aber hilft schon mal weiter.

[Edit]Quatsch, natürlich erklärt das die Fehlermeldung. :roll:


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:49 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