AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Form-Event global für alle Formulare überschreiben?
Thema durchsuchen
Ansicht
Themen-Optionen

Form-Event global für alle Formulare überschreiben?

Ein Thema von günni0 · begonnen am 20. Apr 2018 · letzter Beitrag vom 20. Apr 2018
Antwort Antwort
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.079 Beiträge
 
Delphi 10.4 Sydney
 
#1

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

  Alt 20. Apr 2018, 10:18
Das versteh ich nicht so ganz.

Das hier steht in meiner DPR:
Delphi-Quellcode:
Application.CreateForm(TFormListe, FormListe);
Application.CreateForm(TAlphabet, FormAlphabet);
Die würde ich gerne da rausnehmen und selber erzeugen. Kein Problem. Aber das ergibt dann viel von dem o.g. doppelten Code.
Wie wärs mit:
Delphi-Quellcode:
function CreateAndShowForm(const AFormClass: TFormClass; AFormInstance: TCustomForm): Boolean;
begin
 if not Assigned(AFormInstance) then
  AFormInstance := AFormClass.Create(Application);

 AFormInstance.Show;

 Result := AFormInstance.Visible;
end;
Delphi-Quellcode:
CreateAndShowForm(TFormListe, FormListe);
CreateAndShowForm(TAlphabet, FormAlphabet);
  Mit Zitat antworten Zitat
günni0
(Gast)

n/a Beiträge
 
#2

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

  Alt 20. Apr 2018, 10:28
Die Zuweisung und Erstellung funktioniert und ich kann das in einem ButtonClick aufrufen.
Komischerweise kann ich an einer anderen Stelle außerhalb des Formulars was da erstellt wird aber nicht auf die erstellte Klasseninstanz zugreifen.

Das hier hingegen funktioniert
Delphi-Quellcode:
   if not Assigned(FormListe) then
    FormListe:= TFormListe.Create(Application);
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.458 Beiträge
 
Delphi 12 Athens
 
#3

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

  Alt 20. Apr 2018, 10:39
Moin...
Zitat:
Dein allererster Schritt sollte sein nicht mehr TForm sondern deine eigene TGünniForm zu benutzen und von dieser abzuleiten.
Wenn Ableitungen für dich ein indisches Gewürz ist, dann fehlen Grundlagen.
Vererbung:
https://www.delphi-treff.de/object-pascal/vererbung/
https://de.wikibooks.org/wiki/Progra...cal:_Vererbung

Dann hast du in allen Forms die von der Basis ableiten das fertige OnShow Event. inherited ist in diesem Zusammenhang wichtig!
  Mit Zitat antworten Zitat
günni0
(Gast)

n/a Beiträge
 
#4

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

  Alt 20. Apr 2018, 10:42
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.

Geändert von günni0 (20. Apr 2018 um 10:45 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.458 Beiträge
 
Delphi 12 Athens
 
#5

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

  Alt 20. Apr 2018, 10:48
Hallöle...
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.
  Mit Zitat antworten Zitat
günni0
(Gast)

n/a Beiträge
 
#6

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

  Alt 20. Apr 2018, 10:50
Das mit dem Drucken war ein komisches Beispiel, weil ich einfach eine Prozedur dafür aufrufen würde ABER ich verstehe was du meinst

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.

Geändert von günni0 (20. Apr 2018 um 10:54 Uhr)
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.079 Beiträge
 
Delphi 10.4 Sydney
 
#7

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

  Alt 20. Apr 2018, 11:09
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!
  Mit Zitat antworten Zitat
günni0
(Gast)

n/a Beiträge
 
#8

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

  Alt 20. Apr 2018, 11:18
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?

Geändert von günni0 (20. Apr 2018 um 11:21 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.458 Beiträge
 
Delphi 12 Athens
 
#9

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

  Alt 20. Apr 2018, 11:23
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.
  Mit Zitat antworten Zitat
günni0
(Gast)

n/a Beiträge
 
#10

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

  Alt 20. Apr 2018, 11:28
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;

Geändert von günni0 (20. Apr 2018 um 11:37 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:05 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