AGB  ·  Datenschutz  ·  Impressum  







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

Grafikfehlern und TCanvas

Ein Thema von Gandalfus · begonnen am 24. Nov 2006 · letzter Beitrag vom 24. Nov 2006
Antwort Antwort
Gandalfus

Registriert seit: 19. Apr 2003
407 Beiträge
 
Delphi 2006 Professional
 
#1

Grafikfehlern und TCanvas

  Alt 24. Nov 2006, 13:43
Folgender Code führt zu Grafikfehlern. Farben und Schriftgrösse ändern sich, wenn man mit der Maus das Fformular verlässt. (und nach dem Aufruf der Methode nach auf das Bild zeichnet).
Der Code ist gekürtzt. Ich möchte eigendlich an eine dll nur den Canvas Handle weitergeben.
Delphi-Quellcode:
procedure TKlasse.draw(var Backpuffer: TBitmap
var
  Canvas: TCanvas;
begin

  Canvas := TCanvas.Create;
  Canvas.Handle := Backpuffer.Canvas.Handle;//!!!
  canvas.pen.color := cllime;
  Canvas.Rectangle(10,10,50,random(60)+10);
  canvas.Free;

end;
Besucht doch mal meine Homepage
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Grafikfehlern und TCanvas

  Alt 24. Nov 2006, 14:07
Also Backbuffer muss nicht als "var" übergeben werden da TBitmap ein Object ist und somit nur ein Pointer (Objectinstanz-Pointer) auf das Object übergeben wird. An dem Code kann ich soweit nichts erkennen was nicht stimmen sollte. Entweder du hast hier den entscheidenten Teil weg gelassen oder der Fehler liegt in der anderen Funktion. Wenn du mit DLL's arbeitest ohne SharedMem solltest du nur das Handle übergeben (wie du ja bereits planst) und nicht das ganze Object.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Gandalfus

Registriert seit: 19. Apr 2003
407 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Grafikfehlern und TCanvas

  Alt 24. Nov 2006, 15:02
Der Fehler liegt an der Stelle. Also die Schriftgrösse ändert sich von 8 auf 12 ohne das ich das irgendwo eingestellt habe. (Das habe ich durch suchen überpruft in meinem gesamten code wird nicht einmal die Schriftgrösse verändert).
Ich gehe davon auss, dass wenn ich das verändern der Schriftgrösse verhindere ich auch das Farben Problem löse.

Wenn ich den Code
Delphi-Quellcode:
Canvas := TCanvas.Create;
Canvas.Handle := Backpuffer.Canvas.Handle;
canvas.pen.color := cllime;
Canvas.Rectangle(10,10,50,random(60)+10);
canvas.Free;
durch
Delphi-Quellcode:
  
Backpuffer.canvas.pen.color := cllime;
Backpuffer.Canvas.Rectangle(10,10,50,random(60)+10);
ersetzte habe ich keine Fehler mehr

Aufruf und zeichen eines Textes ist übrigens so (in einem Timer):
Delphi-Quellcode:
Object.draw(FBackpuffer)
FBackpuffer.Canvas.textout(5,5,'jkgkj');
Besucht doch mal meine Homepage
  Mit Zitat antworten Zitat
Benutzerbild von Sunlight7
Sunlight7

Registriert seit: 17. Sep 2006
Ort: Sonnensystem, Zentral
1.522 Beiträge
 
Delphi 5 Standard
 
#4

Re: Grafikfehlern und TCanvas

  Alt 24. Nov 2006, 15:10
Delphi-Quellcode:
procedure TKlasse.draw(var Backpuffer: TBitmap
var
  Canvas: TCanvas;
begin

  Canvas := TCanvas.Create;
  Canvas.Handle := Backpuffer.Canvas.Handle;//!!!
  canvas.pen.color := cllime;
  Canvas.Rectangle(10,10,50,random(60)+10);
  canvas.Free; // Damit löscht Du das Canvas Handle vom Bitmap

end;
Sollte vor Free nicht Canvas.Handle:=0 sein?
Zumindest mach ich das immer so.
Windows: Ja - Microsoft: Nein -> www.ReactOS.org
  Mit Zitat antworten Zitat
Gandalfus

Registriert seit: 19. Apr 2003
407 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Grafikfehlern und TCanvas

  Alt 24. Nov 2006, 17:45
das habe ich auch schon getestet hilft leider nicht.
Besucht doch mal meine Homepage
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#6

Re: Grafikfehlern und TCanvas

  Alt 24. Nov 2006, 20:15
1. Du musst das Handle vorher auf 0 setzen, sonst wird wirklich das DC Handle des Bitmaps freigegeben mit der TCanvas Instanz.
2. Wenn du nur ein DC Handle übergibst, dann ermittelt sich das TCanvas sofort bei der Zuweisung alle Einstellungen des DC's und setzt seine Eigenschaften um. Von daher wird bei der nächsten Operation eher die Eigenschaft des TCanvas genutzt. Wenn also ein TCanvas einen default Font-Höhe von 12 hat, dann wird diese Höhe genommen beim TextOut und nicht die von dem DC Handle was du übergeben hast.
  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 23:38 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