Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Eine Action für alle Forms (https://www.delphipraxis.net/199469-eine-action-fuer-alle-forms.html)

Int3g3r 25. Jan 2019 08:46

Eine Action für alle Forms
 
Guten Tag,

Ich habe folgende Ausgangslage:

Ein Datenmodul namens actions
in diesem habe ich eine Actions-List draufgeknallt und eine Action namens "Schliessen" definiert.

Ein Formular namens Main
Ein Formular namens Mitarbeiter

Nun möchte ich mit der Action "Schliessen" sowohl das Formular Mitarbeiter als auch das Formular Main schliessen können.

Lässt sich dies Bewerkstelligen ? Wenn ja wie ?
Ist dies auch mit einem Create möglich ? Wenn ja wie ?

Ich muss ja den Formularnamen dem Close voranstellen somit müsste ich für jeden Button eine einzelne Routine machen die genau das selbe ausführen.
Das Ziel ist es eine Close Action zu haben aber diese für alle Buttons benutzen zu können.

Delphi-Quellcode:
mitarbeiter.close;
VARIABLE.close;
Gruss,
Int3g3r

Uwe Raabe 25. Jan 2019 09:26

AW: Eine Action für alle Forms
 
Versuch mal

Delphi-Quellcode:
 
  Screen.ActiveForm.Close;
Was meinst du mit
Zitat:

Zitat von Int3g3r (Beitrag 1424105)
Ist dies auch mit einem Create möglich ?


Int3g3r 25. Jan 2019 09:42

AW: Eine Action für alle Forms
 
Was meinst du mit
Zitat:

Zitat von Int3g3r (Beitrag 1424105)
Ist dies auch mit einem Create möglich ?

Ich möchte auch eine Action "Öffnen" und diese erstellt mir das Formular Mitarbeiter oder das Formular ABCD oder Formular ABDEFF.

Einen solchen Block unabhänging vom "frm_Mitarbeiter" machen.

Delphi-Quellcode:
      frm_Mitarbeiter := Tfrm_Mitarbeiter.create(self);
   try
      frm_Mitarbeiter.ShowModal;
   finally
      frm_Mitarbeiter.Free;
   end;
Des weiteren wäre sowas auch für Qrys Hilfreich.
Ich möchte folgendes auch unabhänig vom frm_Mitarbeiter.

Delphi-Quellcode:
procedure Tdm_actions.dbMitarbeiterBearbeitenExecute(Sender: TObject);
begin
      frm_Mitarbeiter.qryMitarbeiter.Edit;
end;

Besten Dank

Zitat:

Screen.ActiveForm.Close;
Perfekt genau das was ich Suche ! Danke!

Uwe Raabe 25. Jan 2019 10:40

AW: Eine Action für alle Forms
 
Zitat:

Zitat von Int3g3r (Beitrag 1424114)
Ich möchte auch eine Action "Öffnen" und diese erstellt mir das Formular Mitarbeiter oder das Formular ABCD oder Formular ABDEFF.

Solange die Action keine Information über die Form-Class hat, die erzeugt werden soll, kann das nichts werden. Das Screen.ActiveForm kann es ja in diesem Fall nun mal nicht sein.

Keine Ahnung, ob das in deinem Fall passt, aber so könnte es gehen:

Delphi-Quellcode:
procedure TForm369.Action1Execute(Sender: TObject);
var
  cmp: TComponent;
  frm: TForm;
  frmClass: TFormClass;
  mode: Integer;
begin
  mode := 0;
  cmp := (Sender as TBasicAction).ActionComponent;
  if cmp <> nil then begin
    mode := cmp.Tag;
  end;
  case mode of
    1: frmClass := Tfrm_Mitarbeiter;
    2: frmClass := Tfrm_ABCD;
    3: frmClass := Tfrm_ABDEFF;
  else
    raise Exception.Create('kein Mode gesetzt!');
  end;
  frm := frmClass.Create(Application);
  try
    frm.ShowModal;
  finally
    frm.Free;
  end;
end;
Bei den Buttons oder MenuItems, die mit der Action verknüpft sind, setzt du einfach den Tag entsprechend auf 1, 2 oder 3.

Zusätzlich würde ich noch die case-Anweisung auslagern und durch eine FormClass Registrierung ersetzen um das ganze etwas zu entkoppeln. Das ist aber ein separates Thema.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:58 Uhr.

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