Delphi-PRAXiS
Seite 3 von 3     123   

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 11:43

AW: Form-Event global für alle Formulare überschreiben?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Jascoul, das funktioniert genau wie es soll. Kaum erstelle ich die Instanz aber über eine Prozedur, um doppelten und dreifachen Code zu sparen, kracht es sobald ich auf die Instanz zugreife.

Für alle die mir nicht glauben, da unten ist ein Beispielprojekt :P (DPR beachten, da wird Form2 absichtlich nicht erzeugt).

Zitat:

Versuche mal AFormInstance als var parameter zu deklarieren.
Dann meckert leider der Compiler wegen inkompatibler Typen.

Fritzew 20. Apr 2018 11:53

AW: Form-Event global für alle Formulare überschreiben?
 
So sollte das gehen.....

Delphi-Quellcode:
unit Unit1;

interface

uses
 Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
 Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
 TForm1 = class(TForm)
  Button1: TButton;

  procedure Button1Click(Sender: TObject);
 private
  {Private-Deklarationen}
   FmyForm2 : Tcustomform;
 public
  {Public-Deklarationen}
 end;

var
 Form1: TForm1;

implementation

uses Unit2;

{$R *.dfm}

(*
   Forminstance muss var sein !!!!!
*)

procedure CreateAndShowForm(const AFormClass: TFormClass; var AFormInstance: TCustomForm);
begin
 if not Assigned(AFormInstance) then
  AFormInstance := AFormClass.Create(Application);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 CreateAndShowForm(TForm2, FmyForm2);
 FmyForm2.Show;
end;

end.

Jasocul 20. Apr 2018 11:55

AW: Form-Event global für alle Formulare überschreiben?
 
Lass mal das "const" bei den Parametern weg.

Ich kann deinen Source leider im Moment nicht prüfen, da ich hier kein Delphi zur Verfügung habe.

günni0 20. Apr 2018 11:58

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

Delphi-Quellcode:
FmyForm2 : Tcustomform;

Doppelte Variablen dann leider. Scheint wohl nicht anders zu gehen.

Olli73 20. Apr 2018 11:59

AW: Form-Event global für alle Formulare überschreiben?
 
Mit var Parameter und folgendem Aufruf funktioniert dein Beispiel:

Delphi-Quellcode:
CreateAndShowForm(TForm2, TCustomForm(Form2));

Uwe Raabe 20. Apr 2018 16:10

AW: Form-Event global für alle Formulare überschreiben?
 
Ich will auch mal:
Delphi-Quellcode:
unit uFormUtils;

interface

uses
  Vcl.Forms;

type
  TFormUtils = record
  public
    class procedure ShowForm<T: TCustomForm>(var Instance: T); static;
  end;

implementation

class procedure TFormUtils.ShowForm<T>(var Instance: T);
begin
  if Instance = nil then begin
    Instance := T.Create(Application);
  end;
  Instance.Show;
end;
Der (typsichere) Aufruf wäre dann in etwa so:
Delphi-Quellcode:
TFormUtils.ShowForm<TForm2>(Form2);

günni0 20. Apr 2018 17:28

AW: Form-Event global für alle Formulare überschreiben?
 
Ich danke allen die mir geholfen haben.

Ich bin auf einem guten weg mit der Umstrukturierung meiner Codebasis. Der erste Schritt ist nun erst einmal, Formulare dynamisch zur Laufzeit zu erzeugen.
Habe noch gut 20 Formulare vor mir, die angepasst werden müssen. Dauert also noch etwas.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:10 Uhr.
Seite 3 von 3     123   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz