Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   vom Objekt zur Komponente (https://www.delphipraxis.net/112168-vom-objekt-zur-komponente.html)

mkinzler 17. Apr 2008 06:40

Re: vom Objekt zur Komponente
 
Delphi-Quellcode:
TBall = class(TComponent)
  private
    FCanvas: TCanvas;
    FPoint: TPoint;
  public
    constructor Create(AOwner: TComponent); overload; override; // Standard-Constructor Eigentlich nicht unbedingt notwendig, aber ich würde ihn trotzdem anlegen
    constructor Create(AOwner: TComponent; Acanvas: TCanvas; APoint: TPoint ); overload;
    procedure Paint;
  published
    property Canvas: TCanvas read FCanvas write FCanvas;
    property Point: TPoint read FPoint write FPoint;
end;

...

constructor TBall.Create( AOwner: TComponent);
begin
    inherited create (AOwner); //geerbter Konstruktor
    FCanvas := Nil; //Zur Sicherheit
    FPoint := Nil; //Zur Sicherheit;
end;

constructor TBall.Create(AOwner: TComponent; ACanvas: TCanvas; APoint: TPoint );
begin
    Create( AOwner); // Aufruf Standardkonstruktor
    FCanvas := ACanvas;
    FPoint := APoint;
end;
...
was willst du eigentlich mit diesem Konstrukt erreichen? bitte beachten, dass du dich auch darum kümmern musst, dass deine Paint-Methode aufgerufen wird, wenn der externe Canvas neu gezeichnet wird.

sebi87 17. Apr 2008 06:47

Re: vom Objekt zur Komponente
 
Was will ich damit erreichen?

Na ja ich will mir das Zeichen von "Bällen" also Kugeln durch eine Komponente vereinfachen da ich das in der "Anwendung" also meinem Arbeitskreis sehr oft benötige.


Danke für die schnelle Antwort, ich werde das mal versuchen.


Sebastian

SirThornberry 17. Apr 2008 06:58

Re: vom Objekt zur Komponente
 
wenn du eine visuelle Componente willst solltest du TCustomControl oder TGraphicControl verwenden je nach dem was du genau vor hast. Dort gibt es bereits eine Canvas und die Implementierung für das Zeichnen, Fenster allocieren etc. ist auch vorhanden. Es macht ja keinen sinn eine nicht visuelle Komponente zu verwenden wenn sie etwas visuell darstellen soll.

sebi87 17. Apr 2008 12:47

Re: vom Objekt zur Komponente
 
funktionier jetzt alles soweit nur bei

Delphi-Quellcode:
FPoint := Nil;
erscheint immer ein Kompatibilitätsfehler

mkinzler 17. Apr 2008 12:55

Re: vom Objekt zur Komponente
 
Oh TPoint ist ein Record keine Klasse:
Delphi-Quellcode:
FPoint.x := -1;
FPoint.y := -1;

sebi87 17. Apr 2008 15:23

Re: vom Objekt zur Komponente
 
So geht jetzt alles ganz wunderbar.

Nur hab ich schon wieder ein Problem an dem ich jetzt nicht weiter komme.

Ich will in dem Construktor beim "ertellen" der Komponente ein Objekt "erstellen"
ich hab das jetzt einfach so versucht

Delphi-Quellcode:
constructor TBall.Create(AOwner : TComponent; AMittelpunkt : TPoint; Canvas : TCanvas) ;
begin
  Create(AOwner) ;

  FCanvas := ACanvas ;
  FMittelpunkt := AMittelpunkt ;

  Dreieck:= TVieleck.Create ;
end ;
wenn ich das Objekt benutzen will, stoße ich aber immer auf eine Zugriffsverletzung im Projekt, hat jemanden ne Idee wie das Funktioniert?

mkinzler 17. Apr 2008 15:26

Re: vom Objekt zur Komponente
 
Wo hast du das Objekt Dreieck definiert? BTW. Das würde ich im Standard-Konstruktor instantiieren.

DeddyH 17. Apr 2008 15:27

Re: vom Objekt zur Komponente
 
Ich steig da nicht durch: Canvas, ACanvas und FCanvas?

sebi87 17. Apr 2008 15:28

Re: vom Objekt zur Komponente
 
Ok, im Standart-Konstruktor schieben ist kein Problem.

Das Objekt ist in der gleichen Unit definiert

sebi87 17. Apr 2008 15:33

Re: vom Objekt zur Komponente
 
@ DeddyH:

Stimmt das ist ein fehler drin muss so heißen:

Delphi-Quellcode:
constructor TBall.Create(AOwner : TComponent; AMittelpunkt : TPoint; ACanvas : TCanvas) ;
begin
  Create(AOwner) ;

  FCanvas := ACanvas ;
  FMittelpunkt := AMittelpunkt ;

  Dreieck:= TVieleck.Create ;
end ;

und ACanvas wird an FCanvas die Global deiniert ist übergeben


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:56 Uhr.
Seite 2 von 4     12 34      

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