AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem beim Zeichnen eines neuen Bitmap

Ein Thema von Cyf · begonnen am 20. Nov 2008 · letzter Beitrag vom 21. Dez 2008
Antwort Antwort
Cyf

Registriert seit: 30. Mai 2008
407 Beiträge
 
Lazarus
 
#1

Problem beim Zeichnen eines neuen Bitmap

  Alt 20. Nov 2008, 19:01
Entschuldigt den Titel, ist vermutlich wenig aufschlussreich, aber einen passenderen finde ich nicht.
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.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#2

Re: Problem beim Zeichnen eines neuen Bitmap

  Alt 20. Nov 2008, 19:05
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;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Cyf

Registriert seit: 30. Mai 2008
407 Beiträge
 
Lazarus
 
#3

Re: Problem beim Zeichnen eines neuen Bitmap

  Alt 20. Nov 2008, 19:42
Selber Fehler.
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.
  Mit Zitat antworten Zitat
Cyf

Registriert seit: 30. Mai 2008
407 Beiträge
 
Lazarus
 
#4

Re: Problem beim Zeichnen eines neuen Bitmap

  Alt 21. Dez 2008, 21:42
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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:03 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