AGB  ·  Datenschutz  ·  Impressum  







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

Canvas ändern?

Ein Thema von Martin K · begonnen am 21. Jul 2007 · letzter Beitrag vom 21. Jul 2007
Antwort Antwort
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#1

Canvas ändern?

  Alt 21. Jul 2007, 17:05
Hi,
mein Problem ist folgendes:
Ich will die Canvas um ein paar nützliche Funktionen erweitern und diese dann bei meiner Form verwenden können.
Doch das funzt leider nicht, es kommt immer folgende Exception, wenn ich auf die Canvas zugreifen will:
Zitat:
Bild/Leinwand erlaubt kein Zeichnen.
So sieht meine Unit aus (vereinfacht):
Delphi-Quellcode:
unit MyUnit;

interface

uses
  {...}

type
  TMyCanvas = class(TCanvas)
    {...}
  end;

  TMyForm = class(TForm)
    {...}
    procedure DoSomething;
  private
    ACanvas: TMyCanvas;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    property Canvas: TMyCanvas read ACanvas write ACanvas;
  end;

var
  MyForm: TMyForm;

implementation

{$R *.dfm}

constructor TMyForm.Create(AOwner: TComponent);
begin
  inherited;
  ACanvas := TMyCanvas.Create;
end;

destructor TMyForm.Destroy;
begin
  ACanvas.Free;
  inherited;
end;

procedure TMyForm.DoSomething;
begin
  Canvas.MoveTo(0, 0); // hier krachts
end;

end.
Meine Frage ist nun:
Warum gibt es diese Exception und wie kann ich es ändern damit es klappt?
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
KrasserChecker

Registriert seit: 21. Jul 2004
120 Beiträge
 
#2

Re: Canvas ändern?

  Alt 21. Jul 2007, 17:56
Weil dein Canvas gar nicht weiß, wo er hinzeichnen soll. Damit das funktioniert mußt Du ihn noch mit dem Formular "verbinden":

Delphi-Quellcode:
constructor TMyForm.Create(AOwner: TComponent);
begin
  inherited;
  ACanvas := TMyCanvas.Create;

  ACanvas.Handle := Canvas.Handle; // <- Das hier fehlt noch
end;
Ach: Damit das auch wirklich funktioniert solltest Du deinen eigenen Canvas nicht per Eigenschaft "Canvas" bereitstellen, da Du dait eine bereits bestehende Eigenschaft überdeckst. Nenne deine Eigenschaft lieber "AdvancedCanvas" oder so.
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Canvas ändern?

  Alt 21. Jul 2007, 18:07
Thx, so gehts!
Da ich aber die alte Canvas ersetzen wollte, bleibe ich bei der normalen Canvas-Eigenschaft.
Dabei fiel mir dann aber auf, das folgendes noch beachtet werden muss (bei Überschreiben der Canvas-Eigenschaft):
Delphi-Quellcode:
constructor TMyForm.Create(AOwner: TComponent);
begin
  inherited;
  ACanvas := TMyCanvas.Create;

  ACanvas.Handle := inherited Canvas.Handle; // <- Das hier fehlt noch
end;
Denn ohne inherited greife ich ja schon auf meine neue Canvas-Eigenschaft zu
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  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 20:21 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