AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Verwendung von Datamodule in Packages

Ein Thema von Keldorn · begonnen am 2. Feb 2013 · letzter Beitrag vom 14. Feb 2013
Antwort Antwort
Keldorn

Registriert seit: 6. Mär 2003
Ort: Meißen
876 Beiträge
 
Delphi 10.1 Berlin Professional
 
#1

Verwendung von Datamodule in Packages

  Alt 2. Feb 2013, 18:32
Hallo,

Ich verwende Datamodules auch gerne für das zentrale Hinterlegen von Imagelisten etc.
Wenn ich ein normales Projekt haben, kann ich unter den Projektoptionen unter Formulare das Datamodule automatisch erzeugen oder nicht. In einem Package fehlt diese Option und das Datamodule wird auch nicht erzeugt und ist NIL.

In dem Packages sind z.B. Formulare hinterlegt und Actionmanager verwenden die imagelisten des Datamodules für Toolbars etc....

Mache ich nix, ist das Datamodule NIL und es werden keine Images aus dem Datamodule gezogen, klar es ist ja nicht erstellt wurden.

Erzeuge ich es selber:
Delphi-Quellcode:
  DatamoduleErzeugt:=(Datamodule_IH_Images<>NIL);
  if NOT(DatamoduleErzeugt) then
    Datamodule_IH_Images := TDatamodule_IH_Images.Create(NIL);
    
    …
    Erstelle Hauptformular des Packages
    …
   
  if not(DatamoduleErzeugt) then
    Datamodule_IH_Images.Free;
// Datamodule_IH_Images:=Nil;
Ohne dem Datamodule_IH_Images:=Nil; geht der 2. Aufruf auch schief, da dann das Datamodule wieder nicht erstellt wurde, ist ja nicht NIL … .

Mit dem Datamodule_IH_Images:=Nil bzw FreeAndNil klappt alles, allerdings sehe ich dann in der IDE dann öfters solche Fehlermeldungen:
Zitat:
Modul 'Form_XYZ' ist mit Modul 'Datamodule_IH_Images' verknüpft, das im aktuellen Projekt nicht gefunden wurde. Sollen die Verknüpfungen entfernt oder zu einem anderen Modul umgeleitet werden?
Ich muß dann das Datamodule öffen, in die Design-ansicht wechseln und dann zum Formular Form_XYZ zurück …

Wie macht man das richtig? Wie verwaltet man ein Datamodule in einem Package?

Danke&Gruß Frank

Lükes Grundlage der Programmierung:
Es wird nicht funktionieren
(Murphy)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Verwendung von Datamodule in Packages

  Alt 2. Feb 2013, 19:38
So eine Konstellation sollte man m.E. vermeiden.

Wenn Du eine Verbindung zwischen Mainform und Package-DataModule zur Designtime einrichten willst, dann muss die IDE das DataModul auch zuverlässig finden und immer eine Instanz erstellen.
In dem Fall sollte das DataModule in Deiner Anwendung erzeugt und verwaltet werden.

Wenn es Dir reicht, die Verbindung zur Laufzeit herzustellen dann solltest Du Dich darauf beschränken.
In dem Fall könntest Du im Initalization-Abschnitt eine Datamodule-Instanz erstellen und im Finalization-Abschnitt wieder auflösen.

Wichtig ist, dass Dein Package erstellt werden kann, ohne dass Dein Hauptprojekt vorhanden ist. Sonst handelt man sich unnötige Abhängigkeiten ein und könnte auf ein Package auch verzichten.

Eine konkrete Lösung kann ich nicht anbieten, aber Du solltest Dein Konzept ggf. nochmal überdenken.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Keldorn

Registriert seit: 6. Mär 2003
Ort: Meißen
876 Beiträge
 
Delphi 10.1 Berlin Professional
 
#3

AW: Verwendung von Datamodule in Packages

  Alt 2. Feb 2013, 20:00
sorry, dann habe ich mich mißverständlich ausgedrückt.

das Datamodule wird nur von Forms innerhalb des Packages verwendet, nicht von einer Form innerhalb des richtigen Projektes.

Lükes Grundlage der Programmierung:
Es wird nicht funktionieren
(Murphy)
  Mit Zitat antworten Zitat
Keldorn

Registriert seit: 6. Mär 2003
Ort: Meißen
876 Beiträge
 
Delphi 10.1 Berlin Professional
 
#4

AW: Verwendung von Datamodule in Packages

  Alt 14. Feb 2013, 07:16
Ich muß hier nochmal fragen, weil mich das langsam alle macht

Also noch mal ausführlich:
Das Package für einen Komponenteneditor enthält ein Hauptformular und mehrere Unterformulare, sowie ein Datamodule. Im Datamodule sind zentral alle Imagelisten für Actionmanager der einzelnen Formulare hinterlegt. Nach „außen“ kommt nichts, alle imagelisten werden und sollen nur in Formularen des Packages verwendet werden.

Wie gesagt, das Datamodule automatisch erzeugen geht nicht, da es eben diesen Punkt in den Projektoptionen nicht gibt.

Wenn ich das Datamodule im initialization erstelle
Delphi-Quellcode:
initialization
begin
  if not(Assigned(Datamodule_IH_Images)) then
    begin
      ShowMessage('DM_images nicht zugewiesen, wird erstellt');
      Datamodule_IH_Images := TDatamodule_IH_Images.Create(NIL);
    end;
end;

finalization
begin
  if not(Assigned(Datamodule_IH_Images)) then
    ShowMessage('DM_images not assigned')
   else
    begin
      ShowMessage('DM_images.FreeAndNil');
      FreeAndNil(Datamodule_IH_Images);
    end;
end;
Hat das den äußerst unangenehmen Seiteneffekt, dass bei jedem Erstellen des Packages alle Verweise zum Datamodule verschwinden. Heißt für den Actionmanager: die vorher verlinkten imagelisten werden im OI nicht angezeigt. Klick ich eine Actionmanager.imageliste an, steht der Verweis immer noch drin (DatamoduleXYZ.imageliste32x32), allerdings kommt dann die Fehlermeldung „ungültiger Eigenschaftswert“ …
Ich muß dann das Datamodule als Formular anzeigen, danach kann ich die imagelisten wieder neu zuweisen.
Irgendwie mag die IDE das gar nicht, dass das Datamodule im finalization freigegeben wird.

Wie macht man es nun richtig???
Wo und wie sollte man das Datamodule erstellen? Vorallem, wo man das suchen sollte…
Wenn ich das Datamodule dort erstelle und freigebe, wo ich die Hauptform erstelle und aufrufe, habe ich das Problem, dass wenn die Hauptform nicht mit showmodal angezeigt wird, das Datamodule zu früh freigegeben wird.

Danke & Gruß Frank

Lükes Grundlage der Programmierung:
Es wird nicht funktionieren
(Murphy)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Verwendung von Datamodule in Packages

  Alt 14. Feb 2013, 08:36
In einem Package habe ich noch nicht mit mehreren Formularen und Datemodules gearbeitet. Ich denke, Du kannst hier m.E. nicht die gleiche Funktionalität wie in einem Projekt voraussetzen.

M.E. solltest/musst Du die einzelnen Formular- und Datamodule-Instanzen dynamisch erzeugen und die betreffenden Daten danach gegenseitig zuweisen.
Also eine Verknüpfung im OI dürfte nicht ohne weiteres funktionieren.

Ein Packagage dürfte Dir m.E. die Formulare nicht kontrolliert erzeugen und verknüpfen wie ein Projekt.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Keldorn

Registriert seit: 6. Mär 2003
Ort: Meißen
876 Beiträge
 
Delphi 10.1 Berlin Professional
 
#6

AW: Verwendung von Datamodule in Packages

  Alt 14. Feb 2013, 09:26
ok, danke erstmal.

zuweisen macht sich teilweise schwierig, da die Imagelisten ja überall zugewiesen werden popupmenus etc ... das macht die Sache nicht grad einfach

Lükes Grundlage der Programmierung:
Es wird nicht funktionieren
(Murphy)
  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 21:24 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