Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Form-Event global für alle Formulare überschreiben? (https://www.delphipraxis.net/196066-form-event-global-fuer-alle-formulare-ueberschreiben.html)

günni0 20. Apr 2018 10:42

AW: Form-Event global für alle Formulare überschreiben?
 
Ich habe mich von Vererbung immer fern gehalten, weil alle Beispiele komischerweise immer auf scheinbar sinnlosen Daten die Obst, Autos, Reifen oder wie hier in dem Fall Menschen bezogen sind.
Ich bekomme das dann unmöglich auf die Reihe, das auf meinen Fall mit TForms umzudenken.

Ich glaube ich hatte aber eh einen Denkfehler. Man kann ja ableiten und tun und machen was man will.
Aber wenn ich FormX.Show; aufrufen möchte und im selben Aufruf eine Instanz dieser Form erzeugen möchte, dann geht das logischerweise nicht. Da bringt auch eine Ableitung nix.

TiGüs Antwort war da schon eher das was ich gesucht habe. Aber aus einem mir unverständlichen Grund funktioniert dann der Zugriff auf die Klasseninstanz außerhalb der Klasse nicht.

haentschman 20. Apr 2018 10:48

AW: Form-Event global für alle Formulare überschreiben?
 
Hallöle...8-)
Simples Beispiel:
Du hast 3 Forms. Alle wollen drucken. Da implementiert du 3x den Druck. :? Mit der Vererbung deiner 3 Forms von einer Basisform implementiert du den Druck nur 1x...nämlich in der Basisform! Vorteil: Änderungen am Druck stehen in allen der 3 Forms zur Verfügung. :thumb:

günni0 20. Apr 2018 10:50

AW: Form-Event global für alle Formulare überschreiben?
 
Das mit dem Drucken war ein komisches Beispiel, weil ich einfach eine Prozedur dafür aufrufen würde ABER ich verstehe was du meinst :P

Es gibt aktuell tatsächlich nur ein Beispiel wo ich Vererbung nutzen könnte.
Im FormCreate jeder form fast aller meiner Forms setze ich KeyPreview.

TiGü 20. Apr 2018 11:09

AW: Form-Event global für alle Formulare überschreiben?
 
Zitat:

Zitat von günni0 (Beitrag 1399963)
TiGüs Antwort war da schon eher das was ich gesucht habe. Aber aus einem mir unverständlichen Grund funktioniert dann der Zugriff auf die Klasseninstanz außerhalb der Klasse nicht.

Ohne Quelltext im Kontext deiner Anwendung -> keine Lösung von uns erwarten!

günni0 20. Apr 2018 11:18

AW: Form-Event global für alle Formulare überschreiben?
 
Ich verstehe euer Problem nicht.

Es gibt keinen Kontext. Ich habe einen Button, rufe deine Funktion auf, die ich zur Prozedur gemacht habe - klappt alles wie es soll!
Wenn dann aber eine andere Unit, weder die mit dem Button noch die, die erzeugt wird, auf die eigentlich erzeugte Klasseninstanz zugreifen will, kracht es.

Nicht mehr, nicht weniger.
Wenn das aber schon so anfängt, dann bin ich auch nicht mehr an einer Lösung interessiert. Ich habe alles beigetragen was ich beitragen kann.
Warum sollte ich den Aufruf deiner Funktion in einem simplen Button hier reinkopieren?

haentschman 20. Apr 2018 11:23

AW: Form-Event global für alle Formulare überschreiben?
 
Zitat:

Wenn dann aber eine andere Unit, weder die mit dem Button noch die, die erzeugt wird, auf die eigentlich erzeugte Klasseninstanz zugreifen will, kracht es.
Das liegt an deinem Design...was, wer, wo. Ohne QT oder eine Skizze aller Forms (wer mit wem?) kann man dir nicht wirklich helfen.

günni0 20. Apr 2018 11:28

AW: Form-Event global für alle Formulare überschreiben?
 
Erstelle ich die Instanz aber selber also
Delphi-Quellcode:
FormListe := TFormListe.Create(Application);
FormListe.Show;
gibt es diese Zugriffsverletzung nicht.

Das hier gibt aber eine in der anderen Unit
Delphi-Quellcode:
procedure CreateAndShowForm(const AFormClass: TFormClass; AFormInstance: TCustomForm);
begin
 if not Assigned(AFormInstance) then
  AFormInstance := AFormClass.Create(Application);

 AFormInstance.Show;
end;

CreateAndShowForm(TFormListe, FormListe);

Nur als Beispiel was auch schon zur AV führt. Nur ein Button, 2 Forms, absolut nichts weiter
Delphi-Quellcode:
procedure CreateForm(const AFormClass: TFormClass; AFormInstance: TCustomForm);
begin
 if not Assigned(AFormInstance) then
  AFormInstance := AFormClass.Create(Application);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 CreateForm(TFormListe, FormListe);
 FormListe.Show; // hier passiert gar nichts und AV
end;

Jumpy 20. Apr 2018 11:37

AW: Form-Event global für alle Formulare überschreiben?
 
quatsch

Jasocul 20. Apr 2018 11:38

AW: Form-Event global für alle Formulare überschreiben?
 
Was passiert, wenn du den oberen Source wie folgt änderst?:
Delphi-Quellcode:
  if not assigned(FormListe) then
    FormListe := TFormListe.Create(Application);
  FormListe.Show;
Falls es dann auch knallt, ist wohl die Instanz-Variable nicht nil

Olli73 20. Apr 2018 11:42

AW: Form-Event global für alle Formulare überschreiben?
 
Versuche mal AFormInstance als var parameter zu deklarieren.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:58 Uhr.
Seite 2 von 3     12 3      

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