AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Eigene Klasse, welche den Canvas verwenden soll.
Thema durchsuchen
Ansicht
Themen-Optionen

Eigene Klasse, welche den Canvas verwenden soll.

Ein Thema von Diamont · begonnen am 12. Feb 2009 · letzter Beitrag vom 12. Feb 2009
Antwort Antwort
Diamont

Registriert seit: 21. Mai 2008
30 Beiträge
 
#1

Eigene Klasse, welche den Canvas verwenden soll.

  Alt 12. Feb 2009, 19:31
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:
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.
Nun ist die Methode Zeichne der Knackpunkt, denn wie soll ich ihr Mitteilen wodrauf sie zeichnen soll?!

Vielen dank schonmal für die Hilfe.

[edit=SirThornberry]Delphi-Tags gesetzt - nächstes mal bitte selbst machen. Mfg, SirThornberry[/edit]
Windows Vista Home Premium (64 Bit)
Intel Core 2 Duo E8400 @ 3,0 GHZ
Nvidea Geforce 8800 GTS 512
4 GB RAM
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.115 Beiträge
 
Delphi 12 Athens
 
#2

Re: Eigene Klasse, welche den Canvas verwenden soll.

  Alt 12. Feb 2009, 19:36
wie wäre es, wenn du deine Klasse von TPaintBox ableitest?

ansonsten könntest du z.B. im Constructor (.Create) ein Canvas übergeben.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Diamont

Registriert seit: 21. Mai 2008
30 Beiträge
 
#3

Re: Eigene Klasse, welche den Canvas verwenden soll.

  Alt 12. Feb 2009, 20:08
okay dann versuch ichs mal von der paintbox abzuleiten.. aber wie kann ich im konstruktor einen canvas übergeben?
Windows Vista Home Premium (64 Bit)
Intel Core 2 Duo E8400 @ 3,0 GHZ
Nvidea Geforce 8800 GTS 512
4 GB RAM
  Mit Zitat antworten Zitat
Benutzerbild von Fussball-Robby
Fussball-Robby

Registriert seit: 22. Okt 2007
Ort: Nähe Köln
1.063 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Eigene Klasse, welche den Canvas verwenden soll.

  Alt 12. Feb 2009, 20:17
Zitat von Diamont:
aber wie kann ich im konstruktor einen canvas übergeben?
In dem du dir einen neuen Konstruktor schreibst;
Delphi-Quellcode:
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;
Dann gibst du den Canvas z.B. einer Paintbox an, und auf diesem wird dann gezeichnet.

Gruß
Robert L.
Der folgende Satz ist richtig!
Der vorherige Satz ist falsch!

Paradox
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.115 Beiträge
 
Delphi 12 Athens
 
#5

Re: Eigene Klasse, welche den Canvas verwenden soll.

  Alt 12. Feb 2009, 20:21
wenn du von TPaintBox ableitest, dann brauchst du kein Canvas mehr übergeben ... das Canvas is dann ja schon eingebaut

Wenn du es nicht von einer anderen Komponente ableitest, welche ein Canvas schon mitbringt ... siehe Robby
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:32 Uhr.
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