![]() |
Delphi-Version: 7
Constructor überschreiben
Hallo,
ich programmiere aus Hobby ein versuche so mir etwas Kenntnisse anzueignen. Im Moment versuche ich (ausnahmsweise) Mal ein Projekt zu vollenden das auch tatsächlich schon einen Einsatzzweck haben wird. Nun zu meinem Problem oder meiner Absicht. In meinem Programm soll ein weiteres Formular geöffnet werden und zwar über eine Tastatureingabe. Das zu öffnende Formular dient der Suche, es enthält ein DBGri und ein Eingabefeld. Nun möchte ich den Buchstaben der im Hauptformular gedrückt wurde in das Eingabefeld des zu öffnenden Fensters übernehmen. Kein Akt mit einer globalen Variable. Ein ehemaliger Kollege von mir hat mir das vor Jahren mal anhand eines überschriebenen Constructors gezeigt. Mein zweites Fenster wurde dann nicht wi üblich mit Form2.Show aufgerufen, sondern mit einem Parameter den ich im 2. Formular auswerten konnte. Ich weiß nur nicht mehr wie das funktioniert. Es scheint mir der elegantere Weg. Kann mir jemand erklären wie ich den Constructor des 2.Formulars überschreibe sodass ich im SHow oder ShowModal einen Stringparameter übergeben kann den ich dann dort weiter benutze? Gruß Sugar |
AW: Constructor überschreiben
Zitat:
|
AW: Constructor überschreiben
Wenn du Parameter hinzufügen willst, dann geht das nicht mit überschreiben, denn dabei muß die Signatur (die Parametertypen) übereinstimmen.
Du kannst aber den Contructor überladen (overload) oder den alten verdecken (ohne overload).
Delphi-Quellcode:
virtual: wenn du vorhanben solltest deine Form nochmal abzuleiten und du dann wirklich deinen Constructor überschreiben willst (override)
constructor Create(AOwner: TComponent; DeinErsterParameter: string); {virtual;} {overload}
// da drin dann als erstes via "inherited Create(AOwner);" den "alten" Constructor aufrufen overload: wenn man auch die alten Constructoren aufrufen können soll. Ohne overload, wenn nur noch dein Constructor gehen soll. Globale Variablen sind böse! Man könnte zwar Class-Variablen in der Formklasse verwenden, aber auch die sind quasi golobal (aber wenigstens weggekapselt und nur über
Delphi-Quellcode:
benutzbar)
TDeineForm.DeineClassVar := '123';
Alternativ den Constructor so lassen, und stattdessen die Form-Instanz erst erstellen, dann danach die Daten via Property oder an Methoden übergeben und danach anzeigen (Show/ShowModal). Das von BadenPower ist eine
Delphi-Quellcode:
, welche das "Alternativ"e intern macht und zum Schluß die Instanz ausliefert.
class function GibMitFormInstanz(DeinErsterParameter: string): TDeineForm;
|
AW: Constructor überschreiben
Zitat:
Ich denke ein simples
Delphi-Quellcode:
genügt.
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TForm2 = class(TForm) private { Private-Deklarationen } public { Public-Deklarationen } procedure ShowWithParam(AValue: String); end; var Form2: TForm2; implementation {$R *.dfm} procedure TForm2.ShowWithParam(AValue: String); begin Caption := AValue; Show; end; Aufruf dann mit:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin Form2.ShowWithParam(Caption); end; |
AW: Constructor überschreiben
Oh, fast falsch verstanden, na dann isses eben die "Erstellen und dann Übergeben"-Variante. :)
|
AW: Constructor überschreiben
Ich bin jetzt kein großer Klassenschreiber, ich mache es nur ab und zu, deshalb sollte das nur als Diskusionsgrundlage dienen.
Das zweite Formular müsste als Klasse erweitert werden. Letztendlich ist TForm2 auch nur eine Klasse die von der TForm abgeleitet wird. Dabei wird das ShowModal von TForm überschrieben überladen.
Delphi-Quellcode:
In der TForm1 kann man ShowModal nun so oder so aufrufen:
unit Unit2;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TForm2 = class(TForm) private { Private-Deklarationen } public { Public-Deklarationen } function ShowModal: Integer; overload; function ShowModal(S: string): Integer; overload; end; var Form2: TForm2; implementation {$R *.dfm} function TForm2.ShowModal: Integer; begin inherited ShowModal; end; function TForm2.ShowModal(S: string): Integer; begin Caption := S; inherited ShowModal; end; end.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin Form2.ShowModal; end; procedure TForm1.Button2Click(Sender: TObject); begin Form2.ShowModal('Hallo Welt!'); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:51 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 by Thomas Breitkreuz