Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Probleme mit Create eigener klasse -> Zugriffsverletzung (https://www.delphipraxis.net/126576-probleme-mit-create-eigener-klasse-zugriffsverletzung.html)

Super_Chemiker 28. Dez 2008 18:12


Probleme mit Create eigener klasse -> Zugriffsverletzung
 
hi, ich will eine klasse machen
mein ansatz:
Delphi-Quellcode:
...
TStein = class(TControl)
  public
    Pressed: Boolean;
    constructor create;
    property OnMouseDown;
    property Caption;
    property Color;
  end;

var
  Form1: TForm1;
  test: TStein;

...

constructor TStein.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  Color := clBtnFace;
  Pressed := false;
  Caption := '';
  SetBounds (0,0,50,50);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  test.create(form1);
end;
...
beim programmstart bekomm ich eine zugriffsverletzung! :(
kann mir jemand helfen? von klassen erstellen hab ich kaum ahnung!
PS: wenn ich hier falsch bin, verschiebt mich und benachrichtigt mich bitte ! :oops: :-D
danke im voraus :dp:

DeddyH 28. Dez 2008 18:13

Re: eigene KLasse: Probleme
 
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  test := TStein.create(self);
end;
[edit] Hab das mal etwas verbessert. [/edit]

Super_Chemiker 29. Dez 2008 13:18

Re: eigene KLasse: Probleme
 
danke :wall:
jetzt bekomm ich keine zugriffsverletzung mehr :)
aber:
ich hab keine ahnung, wie ich jetzt machen soll, dass ich ein rechteck mit schrift bekomm!(geschweige denn mit bildern was ich für später vorhab!) :wiejetzt:
ich vermute nur, dass ich irgendwas mit canvas brauch oder? ich bin für jede hilfe dankbar! :dp: :firejump:

DeddyH 29. Dez 2008 13:25

Re: eigene KLasse: Probleme
 
Dann würde ich an Deiner Stelle von TGraphicControl oder von TCustomControl ableiten, die bringen beide bereits einen Canvas mit. Wenn Deine Komponente kein Fensterhandle für z.B. den Fokus braucht, empfiehlt sich TGraphicControl. Näheres dazu kannst Du in der Hilfe nachlesen.

SirThornberry 29. Dez 2008 13:31

Re: eigene KLasse: Probleme
 
Könntest du bitte dem Thema einen aussagekräftigen Titel geben der das Problem ansatzweise beschreibt? (zum Beispiel die Fehlermeldung etc.)

Super_Chemiker 29. Dez 2008 13:35

Re: Probleme mit Create eigener klasse -> Zugriffsverletz
 
@ Sir Thornberry
besser?

ich hab jetzt mal einen ansatz, aber es wird immernoch nichts angezeigt!:
Delphi-Quellcode:
...
constructor TStein.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  Color := clBtnFace;
  Canvas.Brush.Color := Color;
  Pressed := false;
  Caption := 'Test';
  SetBounds (0,0,50,50);
  x := (Width - Canvas.TextWidth(Caption)) div 2;
  y := (Height- Canvas.TextHeight(Caption)) div 2;
  Canvas.Rectangle (3, 3, Width-3, Height-3);
  canvas.TextOut(x,y, Caption);
end;
...

DeddyH 29. Dez 2008 13:36

Re: Probleme mit Create eigener klasse -> Zugriffsverletz
 
Du musst die Paint-Methode überschreiben.

Super_Chemiker 29. Dez 2008 13:39

Danke im Voraus
 
:dp:
was gehört da rein?
ich hab mal folgendes versucht:
Delphi-Quellcode:
...
constructor TStein.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  Color := clBtnFace;
  Canvas.Brush.Color := Color;
  Pressed := false;
  Caption := 'Test';
  SetBounds (0,0,50,50);
end;                    

procedure TStein.Paint;
begin
  x := (Width - Canvas.TextWidth(Caption)) div 2;
  y := (Height- Canvas.TextHeight(Caption)) div 2;
  Canvas.Rectangle (3, 3, Width-3, Height-3);
  canvas.TextOut(x,y, Caption);
end;
...
allerdings wird immernoch nichts angezeigt :wall: :wiejetzt:
Vielen Dank im Voraus

DeddyH 29. Dez 2008 13:54

Re: Probleme mit Create eigener klasse -> Zugriffsverletz
 
Wenn es nicht zuviel ist, zeig doch nochmal den gesamten Quelltext.

Super_Chemiker 29. Dez 2008 13:56

Re: Probleme mit Create eigener klasse -> Zugriffsverletz
 
Delphi-Quellcode:
unit Jong;

interface

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

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);

  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

  TStein = class(TGraphicControl)
  private
    { Private-Deklarationen }
    x,y: Integer;
    Color: TColor;
    Pressed: Boolean;
  protected
    { Protected-Deklarationen }
    procedure Paint; override;
    procedure MouseDown
      (Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
  public
    { Public-Deklarationen } 
    constructor Create(AOwner: TComponent); override;
    property Caption;
  end;

var
  Form1: TForm1;
  test: TStein;
 
implementation

{$R *.DFM}

constructor TStein.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  Color := clBtnFace;
  Canvas.Brush.Color := Color;
  Pressed := false;
  Caption := 'Test';
  SetBounds (0,0,50,50);
end;                    

procedure TStein.MouseDown (Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  inherited MouseDown (Button, Shift, X, Y);
  if Button = mbLeft then
  begin
    Pressed := true;
    Paint;
  end;
end;

procedure TStein.Paint;
begin
  x := (Width - Canvas.TextWidth(Caption)) div 2;
  y := (Height- Canvas.TextHeight(Caption)) div 2;
  Canvas.Rectangle (3, 3, Width-3, Height-3);
  canvas.TextOut(x,y, Caption);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  test := TStein.Create(self);
end;

end.
bitte sehr!


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