Einzelnen Beitrag anzeigen

Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.014 Beiträge
 
Delphi 12 Athens
 
#4

AW: Eine Action für alle Forms

  Alt 25. Jan 2019, 10:40
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat