Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Problem mit Property (https://www.delphipraxis.net/112548-problem-mit-property.html)

sebi87 23. Apr 2008 08:41


Problem mit Property
 
Hallo Leute ich hab volgenden Quellcode:

Delphi-Quellcode:
unit Ball;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls;

type
  TMyPoint = class(TPersistent)
  Private
    fx, fy : integer ;
  Published
    constructor Create ;
    property x: integer read fx write fx;
    property y: integer read fy write fy;
  end;

  TBall= class(TComponent)
  private
    FMittelpunkt : TPoint ;
    BMittelpunkt : TMyPoint ;
    FImage : TImage ;
    FFont : TFont ;
    { Private-Deklarationen }
  protected
    { Protected-Deklarationen }
  public
    constructor Create(AOwner : TComponent) ;
    destructor Destroy ;
    procedure GetPoint(Y : integer) ;
    { Public-Deklarationen }
  published
    property MittelpunktLeft : integer read FMittelpunkt.x write FMittelpunkt.x ;
    property MittelpunktHight : integer read FMittelpunkt.y write FMittelpunkt.y ;
    property Mittelpunkt : TMyPoint read BMittelpunkt write BMittelpunkt ;
    property PaintPlane : TImage read FImage write FImage ;
    property Font: TFont read FFont write FFont;
    { Published-Deklarationen }
  end;

procedure Register;

implementation

constructor TMyPoint.Create ;
begin
  fy := 0 ;
  fx := 0 ;
end ;

procedure Register;
begin
  RegisterComponents('Kugel', [TBall]);
end;


constructor TBall.Create(AOwner: TComponent);
begin
  inherited Create(AOwner) ;
  BMittelpunkt := TMyPoint.Create ;
  FMittelpunkt.y := 0 ;
  PaintPlane := nil ;
  FFont := TFont.Create;
end;

destructor TBall.Destroy ;
begin
  BMittelpunkt.Free ;
  FFont.Free ;
  inherited Destroy ;
end ;

procedure TBall.GetPoint(Y : integer) ;
begin
  FMittelpunkt.y := Y ;
end ;

end.
Wenn ich jetzt im OI auf die property Font zugreifen will erscheint jedes mal die Fehlermeldung
Zitat:

Zugriffsverletzung bei Adresse 400039709 in Modul 'Vcl40.bpl'. Lesen von Adresse 00000000
Wie kann ich das beheben?

Sebastian

Bernhard Geyer 23. Apr 2008 09:07

Re: Problem mit Property
 
Für ein Property das ein Objekt darstellt brauchst du eine Setter-Methode.

Delphi-Quellcode:
procedure TBall.SetFont(AFont: TFont);
begin
  FFont.Assign(AFont);
end;

sebi87 23. Apr 2008 14:28

Re: Problem mit Property
 
ich hab die Set-Procedure jetzt wie folgt eingebaut
Delphi-Quellcode:
property Font: TFont read FFont write SetFont;

procedure TBall.SetFont(AFont : TFont) ;
begin
  FFont.Assign(AFont) ;
end ;
es erscheint dennoch der gleiche Fehler.

Was mache ich falsch

guidok 23. Apr 2008 14:40

Re: Problem mit Property
 
Ich schätze mal du musst im constructor erst mal eine Instanz von TFont erzeugen FFont := TFont.Create;
Im destructor dann natürlich wieder entfernen.

sebi87 23. Apr 2008 16:18

Re: Problem mit Property
 
muss ich deine Schätzung leider wiederlegen, denn wenn du den Quelltext angesehen hast müsstest du gesehen haben das ich das gemscht habe, wenn ich es falsch gemacht habe dann ok.
Ich weiß einfach nicht warum das so nicht funktioniert :-(

sebi87 23. Apr 2008 20:23

Re: Problem mit Property
 
Kann mir hier niemand weiterhelfen?

DeddyH 23. Apr 2008 20:24

Re: Problem mit Property
 
Poste doch mal den kompletten Code, falls er nicht zu umfangreich ist.

Bernhard Geyer 23. Apr 2008 20:24

Re: Problem mit Property
 
Zitat:

Zitat von sebi87
Kann mir hier niemand weiterhelfen?

Schau mal in deiner Delphi4-VCL-Source nach wie es dort gemacht wird.

sebi87 23. Apr 2008 20:30

Re: Problem mit Property
 
Ist momentan noch nicht mehr Code wie oben zu sehen, ich versuch im Moment aus einem Objekt eine Komponente zu basteln und hab mich jetzt mal an die Propertys gewagt, aber geht nicht.

DP-Maintenance 23. Apr 2008 21:05

DP-Maintenance
 
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "Object-Pascal / Delphi-Language" verschoben.
Delphi-Frage


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:30 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