Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Brush- und Pen-Farbe wird nicht angenommen (https://www.delphipraxis.net/43714-brush-und-pen-farbe-wird-nicht-angenommen.html)

Alexander86 7. Apr 2005 16:34


Brush- und Pen-Farbe wird nicht angenommen
 
Hallo,

ich versuche seit kurzem mir die Programmiersprache Delphi beizubringen. Zur Hilfestellung stehen mir ein paar Computerbild-Artikel, die sich an Delphi-Anfänger richtet, also genau das Richtig für mich. :)

Nun hänge ich aber an folgendem Code:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TGrafikobjekt=class
    x,y:integer;
    fuellfarbe:tcolor;
    randfarbe:tcolor;
    procedure anzeigen;virtual;
  end;

  TKreis=class(TGrafikobjekt)
    radius:integer;
    procedure anzeigen;override;
  end;

  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TKreis.anzeigen;
begin
  form1.Canvas.Ellipse(x,y,x+radius*2,y+radius*2);
end;

procedure TGrafikobjekt.anzeigen;
begin
  form1.Canvas.Pen.Color:=randfarbe;
  form1.Canvas.Brush.Color:=fuellfarbe;
end;

procedure TForm1.Button1Click(Sender: TObject);
var Kreis:TKreis;
begin
  Kreis:=TKreis.Create;
  Kreis.x:=50;
  Kreis.y:=60;
  Kreis.radius:=100;
  Kreis.randfarbe:=clGreen;
  Kreis.fuellfarbe:=clYellow;
  Kreis.anzeigen;
  Kreis.Destroy;
end;

end.
Bei diesem Code wird nach einem Klick auf den Button Button1 ein Kreis auf das Formular gezeichnet. Dabei sollte der Rand des Kreises grün und die Innenfläche gelb angezeigt werden. Leider werden die übergebenen Farben aber nicht angenommen, sondern die Standartfarben angezeigt: Rand: schwarz, Innenfläche: durchsichtig

Kann mir bitte einer erklären, wo der Fehler liegt?

Mfg Alexander

marabu 7. Apr 2005 17:00

Re: Brush- und Pen-Farbe wird nicht angenommen
 
Die Methode TKreis.Anzeigen sieht bei dir so aus:
Delphi-Quellcode:
procedure TKreis.anzeigen;
begin
  form1.Canvas.Ellipse(x,y,x+radius*2,y+radius*2);
end;
Sie sollte so aussehen:
Delphi-Quellcode:
procedure TKreis.anzeigen;
begin
  inherited;
  form1.Canvas.Ellipse(x,y,x+radius*2,y+radius*2);
end;

Alexander86 7. Apr 2005 17:29

Re: Brush- und Pen-Farbe wird nicht angenommen
 
Hallo marabu,

vielen Dank, nun geht es :thumb:

Mfg Alexander

Luckie 7. Apr 2005 17:30

Re: Brush- und Pen-Farbe wird nicht angenommen
 
Weißt du auch warum es jetzt geht?

Alexander86 8. Apr 2005 17:10

Re: Brush- und Pen-Farbe wird nicht angenommen
 
Hallo Luckie,

ich vermute mal, dass der Befehl "inherited" dafür sorgt, dass bei der Haupt-Klasse auch die Methode "anzeigen" ausgeführt wird. Lieg ich da richtig?
Hab beim Googeln schon festgestellt, dass der Befehl "inherited" auch Parameter annehmen und einen Rückgabewert zurückgeben kann.

Wäre bestimmt sehr hilfreich, wenn ihr mir den Befehl etwas erklären könntet :zwinker:

Mfg Alexander

Pseudemys Nelsoni 8. Apr 2005 17:18

Re: Brush- und Pen-Farbe wird nicht angenommen
 
Zitat:

dass der Befehl "inherited" auch Parameter annehmen und einen Rückgabewert zurückgeben kann.
Die Direktive "inherited" ruft die Vorgänger-Prozedur/Funktion der Vorgängerklasse auf.

D.h eine Prozedur die den selben Name hat wie die aktuelle Prozedur und keine Parameter hat sieht so aus:

Delphi-Quellcode:
procedure TNachfolgerKlasse.EineProzedur;
  inherited; // Ruft "EineProzedur" der Vorgängerklasse auf
end;
Eine Prozedur die einen Parameter weitergibt so:

Delphi-Quellcode:
procedure TNachfolgerKlasse.EineProzedur(AParam: string);
  inherited EineProzedur(AParam); // Ruft "EineProzedur" der Vorgängerklasse auf und übergibt den Parameter
end;
Bei einer Funktion ohne Parameter sieht das so aus:

Delphi-Quellcode:
function TNachfolgerKlasse.EineFunktion;
  Result := inherited; // Ruft "EineFunktion" der Vorgängerklasse auf
end;
Eine Funktion die einen Parameter weitergibt:

Delphi-Quellcode:
function TNachfolgerKlasse.EineFunktion(AParam: string);
  Result := inherited EineFunktion(AParam); // Ruft "EineFunktion" der Vorgängerklasse auf
end;

Bye


Btw: Wenn du in deiner abgeleiteten Klasse eine Funktion bzw Prozedur aufrufen möchtest die nicht den gleichen Namen hat wie der in der du dich befindest, reicht "inherited" allein nicht, sondern der prozedur/funktion-name muss dahinter.

Alexander86 8. Apr 2005 21:03

Re: Brush- und Pen-Farbe wird nicht angenommen
 
Hallo Pseudemys Nelsoni,

vielen Dank für deine Bemühungen.
Ist ja ziemlich interessant, was man alles in Delphi machen kann. Bei Visual Basic 6.0 ist dies nicht möglich.

Mfg Alexander


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:11 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