![]() |
AW: OOP-Delphi-Anfänger
Zitat:
Zitat:
|
AW: OOP-Delphi-Anfänger
Ich komm echt nicht drauf :(
Was mir einfällt :
Code:
TRechteck = class // ein Rechteck im 2-dimensionalen Raum private { Private-Deklarationen } public { Public-Deklarationen } XPos:integer; YPos:integer; // Hier im Public-Teil werden ja die Variablen deklariert , das verstehe ich noch , hab die procedure aus dem public-teil entfernt. Hoehe:integer; Breite:integer; end; procedure TRechteck.Zeichne(canvas:TCanvas); // Diese procedure reicht doch oder nciht ? Zeichne gehört zu TRechteck und entnimmt von dort die Variablen und kann begin // ganz normal zeichnen ,oder nciht ? canvas.Pen.Color := clBlack; // 1. Linie canvas.MoveTo(XPos, YPos); canvas.MoveTo(XPos, YPos+breite); // 2. Linie canvas.MoveTo(XPos+Hoehe, YPos+breite); // 3. und 4. Linie ist dein Job :-) end; |
AW: OOP-Delphi-Anfänger
Es ist doch sinnlos, wenn du mit der Materie nicht vertraut bist.
Ich meins nicht böse, aber du ersparst allen - auch dir selbst - viel Mühe, wenn du zuerst die Grundlagen lernst. Zu deiner Frage - das eine ist ein Apfel, das andere ne Birne! Du versuchst, eine Variable zu definieren; gemeint war aber eine Methode! Methoden sind entweder Prozeduren/Funktionen, die sich in einer Klasse befinden! Edit: "Diese procedure reicht doch oder nciht ? Zeichne gehört zu TRechteck und entnimmt von dort die Variablen und kann (..)" Nein, eben nicht. Diese Procedure weiß ja nicht, wo sie hingehört, da der Klasse TRechteck nicht mitgeteilt wurde, dass sie ihr gehört (sozusagen) Du kannst dich ja auch nicht in ein Auto setzen, das keinen Sitz hat. |
AW: OOP-Delphi-Anfänger
Zitat:
Das ist das Prblem. Unser Lehrer hat gesagt wir sollen die Methoden im implementation-Teil reinprogrammieren. Die Delphi-Syntax ist mir ja klar , hatte ja vorher Records und so aber bei den Klassen muss ich mich noch an paar Sachen gewöhnen , bitte nciht böse sein. Aber ich muss das hinkriegen. EDIT : HAT GEFUNZT :D:D: Ich muss ads nur noch mit einem Button verknüpfen , mnelde mich bei Problemen. VIELEN DANK AN ALLE :D ja man :D |
AW: OOP-Delphi-Anfänger
Ok, also entweder hat dein Lehrer euch das falsch erklärt, oder du hast es falsch in Erinnerung.
Es muss, genauso wie die Variable in der Klasse deklariert wurden, auch in der Klasse deklariert sein. Verwechsle es nicht mit Variablendeklaration. |
AW: OOP-Delphi-Anfänger
Eine Methode gehört zu einer Klasse. Es darf daher nicht heißen:
Delphi-Quellcode:
sondern
function Zeichne: TRechteck;
Delphi-Quellcode:
procedure TRechteck.Zeichne;
|
AW: OOP-Delphi-Anfänger
Das wird ihn eventuell verwirren, da er die Implementation der Methode eh richtig hatte.
Jetzt wird er bei der Definition sicher einen Fehler begehen |
AW: OOP-Delphi-Anfänger
Wieso? Ich habe ja nur noch einmal auf den Unterschied zwischen Methode und "regulärer" Funktion hingewiesen.
|
AW: OOP-Delphi-Anfänger
Also mein Code sieht jetzt so aus
Code:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class(TForm) RechteckBTN: TButton; LoeschBTN: TButton; EndeBTN: TButton; PaintBox1: TPaintBox; procedure RechteckBTNClick(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; TRechteck = class private { Private-Deklarationen } public { Public-Deklarationen } XPos:integer; YPos:integer; Hoehe:integer; Breite:integer; procedure Zeichne(canvas:TCanvas); end; var Form1: TForm1; Rechteck: TRechteck; Zeichne:TRechteck; implementation procedure TRechteck.Zeichne(canvas:TCanvas); begin canvas.Pen.Color:= clBlack; // 1. Linie canvas.MoveTo(XPos, YPos); canvas.MoveTo(XPos, YPos+breite); // 2. Linie canvas.MoveTo(XPos+Hoehe, YPos+breite); // 3. und 4. Linie ist dein Job :-) end; {$R *.dfm} begin TRechteck.Zeichne procedure TForm1.RechteckBTNClick(Sender: TObject); // Das hier ist der Button , wenn ich auf den klicke , soll die Prozedur // TRechteck.Zeichne aufgerufen werden , aber der Button " an sich " ist ja eine Procedure // Ich weiß , wenn ich mit TRechteck.Zeichne arbeiten will die Parameter eingeben muss aber // ich kann ja jetzt einfach unter Button-Procedu TRechteck.Zeichne(20,20) oder so eingeben begin end; end. |
AW: OOP-Delphi-Anfänger
Es wäre schön, wenn du für Delphi-Code auch die Delphi-Tags benutzen würdest :) (das ist der Knopf mit dem Helm direkt neben dem Code-Knopf)
Hier mal ein Beispiel-Code wie das dann funktionieren kann. Nicht wirklich fertig, aber davon solltest du den Rest ableiten können, bzw. etwas konkretere Fragen stellen können. (Manchmal muss man in die richtige Richtung gedreht werden ;) )
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class( TForm ) The_PaintBox : TPaintBox; btn_Rechteck : TButton; // Im Object-Inspector das Ereignis "OnClick" von "btn_Rechteck" mit "btn_RechteckClick" verbinden procedure btn_RechteckClick( Sender : TObject ); private { Private-Deklarationen } public { Public-Deklarationen } end; TRechteck = class hoehe, breite : Integer; // Zeichnet relativ zur aktuellen Stiftposition auf "aCanvas" das Rechteck procedure ZeichneAuf( aCanvas : TCanvas ); end; var Form1 : TForm1; implementation {$R *.dfm} { TRechteck } procedure TRechteck.ZeichneAuf( aCanvas : TCanvas ); begin // Jedes Zeichnen mit "LineTo" setzt auch die Stiftposition "PenPos" aCanvas.LineTo( aCanvas.PenPos.X + Self.breite, aCanvas.PenPos.y ); // Linie nach rechts aCanvas.LineTo( aCanvas.PenPos.X, aCanvas.PenPos.y + Self.hoehe ); // Linie nach unten aCanvas.LineTo( aCanvas.PenPos.X - Self.breite, aCanvas.PenPos.y ); // Linie nach links aCanvas.LineTo( aCanvas.PenPos.X, aCanvas.PenPos.y - Self.hoehe ); // Linie nach oben end; { TForm1 } procedure TForm1.btn_RechteckClick( Sender : TObject ); var MyRechteck : TRechteck; begin // Diese Methode soll aufgerufen werden, wenn der Button "btn_Rechteck" gedrückt wurde // Die Stiftposition in der PaintBox setzen The_PaintBox.Canvas.MoveTo( 50, 40 ); // Instanz vom Rechteck erzeugen MyRechteck := TRechteck.Create; // Werte zuweisen MyRechteck.hoehe := 50; MyRechteck.breite := 80; // Zeichen-Methode aufrufen MyRechteck.ZeichneAuf( The_PaintBox.Canvas ); // Instanz wieder freigeben MyRechteck.Free; end; end. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:04 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-2025 by Thomas Breitkreuz