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