![]() |
Eigene Klasse, welche den Canvas verwenden soll.
Hallo,
ich möchte mir das OOP aneignen und ahbe mir dafür überlegt eine Klasse zu erstellen die Geometrische Figuren auf die Form zeichnet. Nun ist mein Problem das meine Klasse nicht weiss wo sie hinmalen soll... Meine Unit 1 sieht so aus:
Delphi-Quellcode:
Nun ist die Methode Zeichne der Knackpunkt, denn wie soll ich ihr Mitteilen wodrauf sie zeichnen soll?!
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs,geomForm,Rechteck,Kreis, StdCtrls, ExtCtrls; type TForm1 = class(TForm) la_flaeche: TLabel; ed_hoehe: TEdit; ed_breite: TEdit; bt_flaeche: TButton; Image1: TImage; Button1: TButton; procedure FormCreate(Sender: TObject); procedure bt_flaecheClick(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public rechteck: TRechteck; { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); var geomForm : TgeomForm; begin rechteck := TRechteck.create(12, 12); end; Meine Klasse (in einer anderen Unit) sieht momentan so aus: unit geomForm; interface uses Graphics; type TgeomForm = class(TCanvas) private Fx:Integer; Fy:Integer; public procedure verschieben(dx,dy :Integer); function flaeche:Integer; virtual; abstract; procedure zeichne(x,y:Integer) ; virtual; abstract; end; implementation procedure TgeomForm.verschieben(dx,dy: Integer); begin self.Fx := self.Fx + dx; self.Fy := self.Fy + dy; end; end. Von dieser Klasse leitet sich wiederrum die Klasse TRechteck ab: unit rechteck; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs,geomForm,Kreis, StdCtrls, ExtCtrls; type TRechteck = class(TgeomForm) private Fhoehe:Integer; Fbreite:Integer; public constructor create(hoehe, breite: Integer); function flaeche : Integer; override; procedure zeichne(x,y:integer); override; end; implementation constructor TRechteck.create(hoehe, breite: Integer); begin inherited create; FHoehe := hoehe; FBreite := breite; end; function TRechteck.flaeche: Integer; begin result := Fhoehe*Fbreite; end; procedure TRechteck.zeichne(x,y:Integer); var handle:hdc; begin moveto(x,y); lineto(x+50,y+50); end; end. Vielen dank schonmal für die Hilfe. [edit=SirThornberry]Delphi-Tags gesetzt - nächstes mal bitte selbst machen. Mfg, SirThornberry[/edit] |
Re: Eigene Klasse, welche den Canvas verwenden soll.
wie wäre es, wenn du deine Klasse von TPaintBox ableitest?
ansonsten könntest du z.B. im Constructor (.Create) ein Canvas übergeben. |
Re: Eigene Klasse, welche den Canvas verwenden soll.
okay dann versuch ichs mal von der paintbox abzuleiten.. aber wie kann ich im konstruktor einen canvas übergeben?
|
Re: Eigene Klasse, welche den Canvas verwenden soll.
Zitat:
Delphi-Quellcode:
Dann gibst du den Canvas z.B. einer Paintbox an, und auf diesem wird dann gezeichnet.
type
TMyClass = class private FCanvas: TCanvas; public constructor Create(ACanvas: TCanvas); procedure Draw; end; implementation constructor TMyClass.Create(ACanvas: TCanvas); begin FCanvas := ACanvas; end; procedure TMyClass.Draw; begin FCanvas.Ellipse(...); end; Gruß |
Re: Eigene Klasse, welche den Canvas verwenden soll.
wenn du von TPaintBox ableitest, dann brauchst du kein Canvas mehr übergeben ... das Canvas is dann ja schon eingebaut :zwinker:
Wenn du es nicht von einer anderen Komponente ableitest, welche ein Canvas schon mitbringt ... siehe Robby |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:40 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 by Thomas Breitkreuz