Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   OOP-Delphi-Anfänger (https://www.delphipraxis.net/165688-oop-delphi-anfaenger.html)

implementation 11. Jan 2012 17:07

AW: OOP-Delphi-Anfänger
 
Zitat:

Zitat von hotkey (Beitrag 1145455)
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..

Einmal angucken bitte:
Zitat:

Zitat von Teekeks (Beitrag 1145454)
Zitat:

Zitat von shmia (Beitrag 1145444)
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;



hotkey 11. Jan 2012 17:14

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;

Aphton 11. Jan 2012 17:16

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.

hotkey 11. Jan 2012 17:18

AW: OOP-Delphi-Anfänger
 
Zitat:

Zitat von Aphton (Beitrag 1145458)
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!



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

Aphton 11. Jan 2012 17:21

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.

DeddyH 11. Jan 2012 17:21

AW: OOP-Delphi-Anfänger
 
Eine Methode gehört zu einer Klasse. Es darf daher nicht heißen:
Delphi-Quellcode:
function Zeichne: TRechteck;
sondern
Delphi-Quellcode:
procedure TRechteck.Zeichne;

Aphton 11. Jan 2012 17:23

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

DeddyH 11. Jan 2012 17:26

AW: OOP-Delphi-Anfänger
 
Wieso? Ich habe ja nur noch einmal auf den Unterschied zwischen Methode und "regulärer" Funktion hingewiesen.

hotkey 11. Jan 2012 17:29

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.

Sir Rufo 11. Jan 2012 17:42

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 15:28 Uhr.
Seite 2 von 4     12 34      

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