Delphi-PRAXiS
Seite 1 von 2  1 2      

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 Eigene Canvas Methode (https://www.delphipraxis.net/111977-eigene-canvas-methode.html)

Mikender 12. Apr 2008 17:03


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:
    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);
So und nun noch meine Procedure hingeschrieben
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

Medium 12. Apr 2008 17:12

Re: Eigene Canvas Methode
 
Du musst bei Änderungen in der VCL diese nochmals neu kompilieren, am besten komplett. Dann sollte es klappen.

Fussball-Robby 12. Apr 2008 17:14

Re: Eigene Canvas Methode
 
Hast du die .pas denn neu kompiliert?

jbg 12. Apr 2008 17:14

Re: Eigene Canvas Methode
 
Zitat:

Zitat von Mikender
Eigentlich sollte es ja jetzt gehen

Du hast also in den VCL Quellen "herumgepfuscht". Das interessiert den Compiler aber nicht, da er nicht die .pas Datei sondern die von CodeGear ausgelieferten .dcu Dateien und die VCL.dcp zu Rate zieht.

Zitat:

Kann man das überhaupt machen ???
Können schon, nur sollte man dann damit rechnen, dass alle Komponenten von Dritten und auch andere Units der VCL nicht mehr ohne weiteres funktionieren, da sie "Unit blabla wurde mit unterschiedlicher Version von Graphics kompiliert" melden und die Kompilierung damit verhindern.

s-off 12. Apr 2008 17:15

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.

Apollonius 12. Apr 2008 17:17

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.

Mikender 12. Apr 2008 17:19

Re: Eigene Canvas Methode
 
Ok ich lasses lieber

Mikender 12. Apr 2008 17:20

Re: Eigene Canvas Methode
 
ich habe Turbo Delphi Explorer

Die Muhkuh 12. Apr 2008 17:21

Re: Eigene Canvas Methode
 
Warum? Kannst doch auch ganz einfach eine Prozedure erstellen:

Delphi-Quellcode:
procedure Circle(Canvas: TCanvas; X, Y, Radius: Integer);
begin
  Canvas.Ellipse(X-Radius, Y-Radius, X+Radius, Y+Radius);
end;
Offenburg? Tjaha, da muss ich jeden Tag hin zur Schule :mrgreen:

[edit] Mit TDE kannst Du die Class Helper benutzen:

Delphi-Quellcode:
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;
Aufruf ist dann:
Delphi-Quellcode:
Canvas.Circle(10, 10, 10); // z.B.

Apollonius 12. Apr 2008 17:25

Re: Eigene Canvas Methode
 
In Turbo Explorer gibt es Class Helper, also kannst du so vorgehen:
Delphi-Quellcode:
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);
Der Vorteil gegenüber der Variante der Muhkuh ist der "objektorientiertere" Aufruf.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:26 Uhr.
Seite 1 von 2  1 2      

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