![]() |
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:
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
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. Kann mir bitte einer erklären, wo der Fehler liegt? Mfg Alexander |
Re: Brush- und Pen-Farbe wird nicht angenommen
Die Methode TKreis.Anzeigen sieht bei dir so aus:
Delphi-Quellcode:
Sie sollte so aussehen:
procedure TKreis.anzeigen;
begin form1.Canvas.Ellipse(x,y,x+radius*2,y+radius*2); end;
Delphi-Quellcode:
procedure TKreis.anzeigen;
begin inherited; form1.Canvas.Ellipse(x,y,x+radius*2,y+radius*2); end; |
Re: Brush- und Pen-Farbe wird nicht angenommen
Hallo marabu,
vielen Dank, nun geht es :thumb: Mfg Alexander |
Re: Brush- und Pen-Farbe wird nicht angenommen
Weißt du auch warum es jetzt geht?
|
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 |
Re: Brush- und Pen-Farbe wird nicht angenommen
Zitat:
D.h eine Prozedur die den selben Name hat wie die aktuelle Prozedur und keine Parameter hat sieht so aus:
Delphi-Quellcode:
Eine Prozedur die einen Parameter weitergibt so:
procedure TNachfolgerKlasse.EineProzedur;
inherited; // Ruft "EineProzedur" der Vorgängerklasse auf end;
Delphi-Quellcode:
Bei einer Funktion ohne Parameter sieht das so aus:
procedure TNachfolgerKlasse.EineProzedur(AParam: string);
inherited EineProzedur(AParam); // Ruft "EineProzedur" der Vorgängerklasse auf und übergibt den Parameter end;
Delphi-Quellcode:
Eine Funktion die einen Parameter weitergibt:
function TNachfolgerKlasse.EineFunktion;
Result := inherited; // Ruft "EineFunktion" der Vorgängerklasse auf end;
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. |
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