Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Actions in einer anderen Unit definieren (https://www.delphipraxis.net/199065-actions-einer-anderen-unit-definieren.html)

Int3g3r 21. Dez 2018 10:50

Delphi-Version: 10.1 Berlin

Actions in einer anderen Unit definieren
 
Guten Tag,

Ich möchte eine seperate Unit erstellen in dieser sollen nur Actions drin stehen. Diese möchte ich nachher bei allen anderen Units einbinden bei denen ich die Actions benötige.

z.b:
Im Objektinspektor unter Ereignisse kann ich z.b OnActivate Ereigniss erstellen. Hier öffne ich die DB.

Delphi-Quellcode:
procedure THauptprogramm.FormActivate(Sender: TObject);
begin
dm.QryKalDat.Open;
dm.QryKalRes.Open;
end;
Delphi-Quellcode:
unit ActionsOnly;

interface

      procedure Action1Execute(Sender: TObject);

implementation


procedure ActionsOnly.Action1Execute(Sender: TObject);
begin
dm.QryKalDat.Open;
dm.QryKalRes.Open;
end;

end.
Wie lässt sich diese procedure nun in einer anderen Unit definieren damit ich sie nachher bei dem "OnActivate" Ereigniss(im Objektinspektor) auswählen kann ?

Der schöne Günther 21. Dez 2018 11:06

AW: Actions in einer anderen Unit definieren
 
Mach keine einfache Unit sondern ein Datenmodul (
Delphi-Quellcode:
TDataModule
). Pack dort deine
Delphi-Quellcode:
TActionList
drauf und mache dort deine Actions.

Auf deinen Formularen welche diese Unit in der Uses-Anweisung haben kannst du nun direkt diese Actions anwählen. Verhält sich genauso mit Dingen wie ImageListen, DataSets, ...

Int3g3r 21. Dez 2018 11:10

AW: Actions in einer anderen Unit definieren
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1421633)
Mach keine einfache Unit sondern ein Datenmodul (
Delphi-Quellcode:
TDataModule
). Pack dort deine
Delphi-Quellcode:
TActionList
drauf und mache dort deine Actions.

Auf deinen Formularen welche diese Unit in der Uses-Anweisung haben kannst du nun direkt diese Actions anwählen. Verhält sich genauso mit Dingen wie ImageListen, DataSets, ...

Besten Dank.
Habe mir gar nicht überlegt das ich eine zweite ActionsList verwenden könnte.
Aber warum soll die Unit ein Datenmodul sein ?

Der schöne Günther 21. Dez 2018 11:20

AW: Actions in einer anderen Unit definieren
 
Ein Datenmodul hat den Komfort dass du halt per Drag&Drop direkt Komponenten wie ImageLists, ActionList usw. darauf platzieren und bearbeiten kannst wie du es von Formularen gewohnt bist.

Und ich weiß gar nicht ob der Formular-Designer überhaupt so "schlau" wäre, eine von Hand per Code erzeugte ActionList in einer Unit einbinden und benutzen zu können.

Uwe Raabe 21. Dez 2018 11:37

AW: Actions in einer anderen Unit definieren
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1421637)
Und ich weiß gar nicht ob der Formular-Designer überhaupt so "schlau" wäre, eine von Hand per Code erzeugte ActionList in einer Unit einbinden und benutzen zu können.

Geht ja auch nicht, da die ActionList dann zur Design-Zeit noch gar nicht existiert. Die auf einem Datenmodul (oder auch Form oder Frame) platzierten Komponenten werden direkt zur Designzeit erzeugt und somit dem Designer auch bekannt.

Int3g3r 21. Dez 2018 12:37

AW: Actions in einer anderen Unit definieren
 
Ich habe nun das Datenmodul eingefügt. Sobald ich aber den Dateiname des Datenmoduls ändere wird das Projekt nicht mehr kompilliert.
Zitat:

[dcc32 Fehler] hcTransport.dpr(18): E2003 Undeklarierter Bezeichner: 'TAction'
*.dpr Datei
Delphi-Quellcode:
program hcTransport;

uses
  Vcl.Forms,
  main in 'main.pas' {frmMain},
  dmod_prg in 'dmod_prg.pas' {dm: TDataModule},
  Kalender in 'Kalender.pas' {Hauptprogramm},
  Actions in 'Actions.pas' {Action: TDataModule};

{$R *.res}

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(Tdm, dm);
  Application.CreateForm(TfrmMain, frmMain);
  Application.CreateForm(THauptprogramm, Hauptprogramm);
  Application.CreateForm(TAction, Action);
  Application.Run;
end.
Action.pas
Delphi-Quellcode:
unit Actions;

interface

uses
  System.SysUtils, System.Classes;

type
  TAction = class(TDataModule)
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Action: TAction;

implementation

{%CLASSGROUP 'Vcl.Controls.TControl'}

{$R *.dfm}

end.

Delphi.Narium 21. Dez 2018 12:48

AW: Actions in einer anderen Unit definieren
 
Das ist klar:

Actions sind vom Typ TAction.

Du hast nun auch noch ein Datenmodul erstellt, dass ebenfalls vom Typ TAction ist.

Aber: TAction <> TAction

Beim Erstellen von Datenmodulen ... solltest Du darauf achten, dass Du keinen Typen verwendest den es in anderem Kontext schon gibt.

Du hast doch schon ein
Delphi-Quellcode:
dmod_prg in 'dmod_prg.pas' {dm: TDataModule}
, warum dann nicht statt
Delphi-Quellcode:
Actions in 'Actions.pas' {Action: TDataModule};
einfach
Delphi-Quellcode:
dmActions in 'dmActions.pas' {dmActions: TDataModule}
?

Int3g3r 21. Dez 2018 13:06

AW: Actions in einer anderen Unit definieren
 
Zitat:

Zitat von Delphi.Narium (Beitrag 1421647)
Das ist klar:

Actions sind vom Typ TAction.

Du hast nun auch noch ein Datenmodul erstellt, dass ebenfalls vom Typ TAction ist.

Aber: TAction <> TAction

Beim Erstellen von Datenmodulen ... solltest Du darauf achten, dass Du keinen Typen verwendest den es in anderem Kontext schon gibt.

Du hast doch schon ein
Delphi-Quellcode:
dmod_prg in 'dmod_prg.pas' {dm: TDataModule}
, warum dann nicht statt
Delphi-Quellcode:
Actions in 'Actions.pas' {Action: TDataModule};
einfach
Delphi-Quellcode:
dmActions in 'dmActions.pas' {dmActions: TDataModule}
?

Besten Dank!

Int3g3r 21. Dez 2018 13:34

AW: Actions in einer anderen Unit definieren
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe nun das Datenmodul eingebunden.
Von einem anderen Formular aus kann ich nun mit dem Befehl:
Delphi-Quellcode:
ac.dmOpenAll;
die Datenbanken öffen.

Ich möchte aber nicht einen Befehl im Quelltext ausführen sondern mit dem Objektinspektor verknüpfen.
Siehe Bild (Rot = so möchte ich die Action eingetragen).

Ist dies überhaupt möglich ?

Delphi.Narium 21. Dez 2018 13:42

AW: Actions in einer anderen Unit definieren
 
Steht das Datenmodule im Uses der frmMain?

Wenn nein, bitte dort eintragen.

Im Objektinspektor bitte eingeben:

Delphi-Quellcode:
Datenmodulname.ActionnameExecute


also in etwa
Delphi-Quellcode:
ac.dmOpenAllExecute


Eigentlich sollte der Objektinspektor aber beim Klick auf den Pfeil rechts eine Liste mit alle dem anzeigen, was dem Ereignis zugewiesen werden kann.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:14 Uhr.
Seite 1 von 3  1 23      

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