![]() |
Create überschreiben (newbefrage)
hallo!
ich weiß, eine newbe frage :-D ich versuche gerade folgendes zu realisieren: ein formular soll abhängig von dem in mode übergebenen style / erscheinungsbild angezeigt werden. soll also folgendes machen:
Delphi-Quellcode:
und wenn nichts angegeben wird für mode, dann soll es einfach den standard nehmen also
mywindow := window.create(self, Mode);
Delphi-Quellcode:
bewirkt das gleiche wie
mywindow := window.create(self);
Delphi-Quellcode:
wobei Mode z.b. von einer anderen anwendung oder in meinem fall halt mal per editbox vorgegeben wird.
mywindow := window.create(self, default);
muss ich da nun die create überschreiben oder die formcreate? und wie schaut das dann im code genau aus? ich muss ja da auch die funktionen der überschriebenen erben. stephan. |
Re: Create überschreiben (newbefrage)
den Konstruktor (.Create).
.FormCreate ist ja nur eine Eventmethode |
Re: Create überschreiben (newbefrage)
und den Konstructor überladen, damit beide Varianten möglich sind.
Gruß oki |
Re: Create überschreiben (newbefrage)
und wie schaut das dann bitte genau aus?
ich habe nun eine überladene Create mit
Delphi-Quellcode:
und wie muss ich die dann gestalten? ich hätte folgendes gemacht:
procedure TForm.Create (AOwner: TComponent; Mode : Modetyp); override;
Delphi-Quellcode:
sehe ich das richtig oder hab ich da noch irgendwo einen fehler drinnen?
procedure TForm.Create (AOwner: TComponent; Mode : Modetyp); override;
begin inherited; Form.Create(self); if Mode = .... // case for mode here end; wie gesagt, ich will ein formular erstellen, das aus zwei bereichen besteht. jede beliebige kombination der bereiche soll wählbar sein. sagen wir der obere ist a und der untere b. nun solls möglich sein, das formular nur mit entweder a oder b anzuzeigen oder aber auch mit beiden. abhängig vom parameter. wenn mir newbe da jemand bitte weiterhelfen könnte vielelicht auch mit code, damit ichs gleich an dem lerne, wäre mir sehr geholfen. danke! |
Re: Create überschreiben (newbefrage)
Hi, so:
Delphi-Quellcode:
Der Constructor wird somit überladen. Du kannst dann beide Constructoren aufrufen, den alten mit nur AOwner und den neuen. Es gibt die Funktion somit zweimal mit unterschiedlichen Parametern. die OH gibt da auch gut auskunft.
Constructor Create(AOwner: TComponent; Mode : Modetyp); overload;
procedure TForm.Create (AOwner: TComponent; Mode : Modetyp); begin inherited create(AOwner); Form.Create(self); if Mode = .... // case for mode here end; Gruß oki |
Re: Create überschreiben (newbefrage)
Ist Form ein Childobjekt Deiner Komponente? Oder wofür steht das Form.Create?
|
Re: Create überschreiben (newbefrage)
schaut so aus:
Delphi-Quellcode:
das sollte eigentlich Create(AOwner) heißen. und ruft den alten Constructor auf.
type TMyForm = class(TDForm)
.... procedure FormCreate .... procedure FormDestroy .... private public constructor Create (AOwner: TComponent; Mode: Windowtyp); overload; ..... end; // und dann kommen die einzelnen Realisierungen im ImplementationTeil oder meinst du im code von oki? |
Re: Create überschreiben (newbefrage)
Hi,
schau mal was dein Compiler sagt, ich glaube hinter das overload muß noch ein override.
Delphi-Quellcode:
Komm da immer wieder durcheinander und vertrau auf die Compilermeldungen für meine Korrekturen.
Constructor Create(AOwner: TComponent; Mode : Modetyp); overload; override;
Gruß oki |
Re: Create überschreiben (newbefrage)
Ich meinte die Zeile Form.Create im Konstruktor.
|
Re: Create überschreiben (newbefrage)
habs jetzt wie oki gesagt hat (ohne das form.create) gemacht und da kommt folgendes:
da bekomm ich nun mehrere fehlermeldungen: zweimal "Deklaration 'Create' unterscheidet sich von vorheriger Deklaration" (bei der deklaration im type und im implementation) dann "Diese Form des Methodenaufrufs ist nur in Methoden von abgeleiteten Typen erlaubt" (beim inherited) und beim type mit dem constructor nochmals "ungenügend Forward- oder External-Deklaration: 'MyForm.Create'" also irgendwie will der compiler den code nicht! :roll: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:50 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