![]() |
Eigene Canvas Methode
Hallo
Ich habe mich schon (ziemlich) lange darüber aufgeregt dass man in Canvas keinen Kries zeichnen kann sondern nur eine Ellipse (mit einem Kreis könnte man einfach einben Punkt und den Radius angeben) Nun habe ich mir gedacht ich schreibe meinen Kreis selber in Canvas. Ich habe also ctrl+click auf Canvas Dann war ich in Forms dort das gleiche auf TCanvas dann war ich in Canvas. Alles ganz normal... Dort hab ich dann in Public Die Procedure Circle hinzu geschrieben:
Delphi-Quellcode:
So und nun noch meine Procedure hingeschrieben
procedure BrushCopy(const Dest: TRect; Bitmap: TBitmap;
const Source: TRect; Color: TColor); procedure Circle(X,Y :Integer;Radius :Integer); procedure Chord(X1, Y1, X2, Y2, X3, Y3, X4, Y4: Integer);
Delphi-Quellcode:
procedure TCanvas.Circle(X, Y, Radius: Integer);
begin Ellipse(X-Radius, Y-Radius, X+Radius, Y+Radius); end; ... Eigentlich sollte es ja jetzt gehen aber es passiert nicht er erkennt kein Circle. Kann man das überhaupt machen ??? Mikender |
Re: Eigene Canvas Methode
Du musst bei Änderungen in der VCL diese nochmals neu kompilieren, am besten komplett. Dann sollte es klappen.
|
Re: Eigene Canvas Methode
Hast du die .pas denn neu kompiliert?
|
Re: Eigene Canvas Methode
Zitat:
Zitat:
|
Re: Eigene Canvas Methode
Du solltest Dir lieber Deinen eigenen Canvas erzeugen, in dem Du von TCanvas ableitest, und nicht lustig in der VCL rumeditieren. Auf Dauer wirst Du damit nicht glücklich.
Untger anderem dafür ist das Konzept der Objektorientierung gedacht. |
Re: Eigene Canvas Methode
Das wäre mal ein klassischer Einsatzfall für Class Helper. Vereerbung ist ungünstig, da man dann von TCanvas abgeleitete Klassen erst casten müsste, was unschön wäre. Oder man könnte eine normale Prozedur nehmen, müsste dann aber Self explizit und nicht mit der Punkt-Syntax übergeben. Welche Delphi-Version hast du denn? Class Helper gibt es ab Delphi 2006 (soweit ich weiß) Korrektur: in Delphi 2005 geht es auch schon, aber meines Wissens nicht früher.
|
Re: Eigene Canvas Methode
Ok ich lasses lieber
|
Re: Eigene Canvas Methode
ich habe Turbo Delphi Explorer
|
Re: Eigene Canvas Methode
Warum? Kannst doch auch ganz einfach eine Prozedure erstellen:
Delphi-Quellcode:
Offenburg? Tjaha, da muss ich jeden Tag hin zur Schule :mrgreen:
procedure Circle(Canvas: TCanvas; X, Y, Radius: Integer);
begin Canvas.Ellipse(X-Radius, Y-Radius, X+Radius, Y+Radius); end; [edit] Mit TDE kannst Du die Class Helper benutzen:
Delphi-Quellcode:
Aufruf ist dann:
type
TCanvasHelper = class helper for TCanvas public procedure Circle(X, Y, Radius: Integer); end; implementation procedure TCanvasHelper.Circle(X, Y, Radius: Integer); begin Ellipse(X-Radius, Y-Radius, X+Radius, Y+Radius); end;
Delphi-Quellcode:
Canvas.Circle(10, 10, 10); // z.B.
|
Re: Eigene Canvas Methode
In Turbo Explorer gibt es Class Helper, also kannst du so vorgehen:
Delphi-Quellcode:
Der Vorteil gegenüber der Variante der Muhkuh ist der "objektorientiertere" Aufruf.
type
TCanvasCircleHelper = class helper for TCanvas procedure Circle(X, Y, Radius: Integer); end; procedure TCanvasCircleHelper.Circle(X, Y, Radius: Integer); begin //Implementierung end; //Aufruf: Canvas.Circle(5, 5, 3); |
Re: Eigene Canvas Methode
Ach Mensch, Philip, lass mir doch auch Zeit, das mit dem ClassHelper zu machen, hab das mit TDE zu spät gelesen :tongue:
|
Re: Eigene Canvas Methode
Hi,
Mach es besser so:
Delphi-Quellcode:
;)
type
TCanvas = class(Graphics.Canvas) public procedure Circle(X, Y, Radius: Integer); end; implementation procedure TCanvas.Circle(X, Y, Radius: Integer); begin Ellipse(X-Radius, Y-Radius, X+Radius, Y+Radius); end; Gruß Neutral General |
Re: Eigene Canvas Methode
Nein, das ist eine schlechte Idee. Dann musst du nämlich immer Casts durchführen, um mit dieser Klasse zu arbeiten, gleicher Name hin oder her (übrigens: Das muss Graphics.TCanvas in der Vererbungsklammer heißen).
|
Re: Eigene Canvas Methode
Ja aber ich würde eben gerne nicht jedesmal das in den Quellcode schreiben müssen
sondern eben nur ein mal |
Re: Eigene Canvas Methode
Hi,
leg das in eine separate Unit und speicher die z.B. im Lib-Ordner von Delphi ab. Wenn Du das nun benötigst einfach die Unit in die Uses übernehmen. |
Re: Eigene Canvas Methode
Zitat:
Aber ich glaube man kann so properties oder Methoden überschreiben die dann auch übernommen werden.. Also wenn man z.B. TCanvas.Ellipse überschreiben würde mit meiner Methode dann würden alle VCL Controls die modifizierte Version benutzen. Gruß Neutral General |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:04 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz