![]() |
Delphi-Version: 6
OOP-Delphi-Anfänger
Hallo ,
wir haben im Informatikunterricht mit der Objektorientierten Programmierung in Delphi angefangen. Am Anfang haben wir die gnazen Begriffe geklärt (Instanzen,Objekte , Klassen und Methoden). Jetzt sollen wir folgendes machen : Der Lehrer will von uns , dass wir Mithilfe der OOP in Delphi ein Rechteck programmieren , das sich mit einem Buttonklick zeichnen lässt.(Nicht grad einfach). Bin so weit gekommen :
Code:
Und jetzt , da passiert nix sobald ich auf den Button drücke.
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; private { Private-Deklarationen } public { Public-Deklarationen } end; TRechtecke = class // Hier ist die Klassenbeschreibung laenge:integer; breite:integer; private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; Rechteck: TRechtecke; implementation procedure rechteckmachen(); begin Form1.Paintbox1.Canvas.MoveTo(20,20); // Diese procedure soll irgendwie so eine Art Anfang sein für das Zeichnen. Form1.Paintbox1.Canvas.MoveTo(100,100); end; {$R *.dfm} end. Das Problem ist ja , ich kenn die Befehle garnicht , mit denen man so ein Rechteck zeichnen soll. Bitte nicht so kompliziertes sagen/empfehlen , hab nicht so viel Erfahrung mit OOP. Ist das erste Mal , dass ich mit Klassen etc arbeite und selbst Klassen erstelle. |
AW: OOP-Delphi-Anfänger
Ein Rechteck hat ja nicht nur eine Höhe und Breite sondern auch noch eine X- und Y-Position.
Also sieht deine Rechteckklasse so aus:
Delphi-Quellcode:
Jetzt soll dein Rechteck gezeichnet werden.
TRechteck = class // ein Rechteck im 2-dimensionalen Raum
private { Private-Deklarationen } public { Public-Deklarationen } XPos:integer; YPos:integer; Hoehe:integer; Breite:integer; end; Dazu benötigt man eine Zeichenfläche (TCanvas) und eine Methode die das Zeichnen übernimmt:
Delphi-Quellcode:
TRechteck = class // ein Rechteck im 2-dimensionalen Raum
private { Private-Deklarationen } public { Public-Deklarationen } procedure Zeichne(canvas:TCanvas); XPos:integer; YPos:integer; Hoehe:integer; Breite:integer; end; 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; |
AW: OOP-Delphi-Anfänger
Kleiner Schönheitsfehler:
Methoden müssen nach Feld/Variablendeklarationen kommen! Anderer Fehler: MoveTo() bewegt den "Stift" (ohne eine Linie zu ziehen) LineTo() hingegen zieht auch eine Linie! Und wer das Rad nicht neu erfinden will, der benützt Rectangle() |
AW: OOP-Delphi-Anfänger
Zitat:
|
AW: OOP-Delphi-Anfänger
Vielen Dank für den Ansatz.
Diese Fehler habe ich glaub ich gefunden , eins jedenfalls. Für den Anfang sollen wir die Methoden unter dem implentation-Teil schreiben. So sieht mein Code aus , ich kriege aber einen Identifiier redeclared für Xpos , YPos , Hoehe und Breite
Code:
FEHLER:
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; private { Private-Deklarationen } public { Public-Deklarationen } end; TRechteck = class Hoehe:integer; Breite:integer; XPos:integer; YPos:integer; private { Private-Deklarationen } public { Public-Deklarationen } XPos:integer; YPos:integer; Hoehe:integer; Breite:integer; end; end; var Form1: TForm1; Rechteck: TRechtecke; 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} end. [Error] Unit1.pas(31): Identifier redeclared: 'XPos' [Error] Unit1.pas(32): Identifier redeclared: 'YPos' [Error] Unit1.pas(33): Identifier redeclared: 'Hoehe' [Error] Unit1.pas(34): Identifier redeclared: 'Breite' [Error] Unit1.pas(37): 'IMPLEMENTATION' expected but ';' found [Error] Unit1.pas(45): '.' expected but 'IMPLEMENTATION' found [Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas' |
AW: OOP-Delphi-Anfänger
Zitat:
@hotkey Eigne dir die Delphi Syntax an. Du hast die Methode Zeichne nicht definiert. Daher kennt die undeklarierte Methode auch die Elemente der übergeordnetten Klasse nicht! |
AW: OOP-Delphi-Anfänger
Zitat:
Wenn du die Oben weg nimmst, stimmt es wieder :) Edit: oder auch nicht. Das von Aphton auch noch. Gruß Teekeks |
AW: OOP-Delphi-Anfänger
Zitat:
Wie deklariere ich das bzw wie definiere ich das ? Könntes tdu mir bitte ein Tipp geben ? Edit : Zeichne : TRechteck; Ist das richtig ? EDIT 2 : Danke auch an Teekeks ! |
AW: OOP-Delphi-Anfänger
Zitat:
|
AW: OOP-Delphi-Anfänger
Also Zeichne:TRechteck funzt nicht.
Aber ich muss ihm doch sagen , dass diese procedure die Variablem Xpos etc aus der Klasse entnehmen soll. Da verstehe ich nicht , warum Zeichne:TRechteck nicht geht.. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:03 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