So wirklich viel mehr bringt es nicht zu posten, da das Programm bereits zu komplex aufgebaut ist und viel zu viele Ereignisse durchgeführt werden. Aber ich versuche es ein wenig übersichtlicher zu gestalten:
In der Applikation sieht das ganze so aus:
In der Projektdatei werden die Formulare erstellt:
Delphi-Quellcode:
Projekt.dpr
uses
...
begin
Application.Initialize;
...
// Erstellung des Fenster1 zur Laufzeit
Application.CreateForm(TFenster1, Fenster1);
...
Application.Run;
end.
Anschließend wird beim klicken auf eine Schaltfläche das Fenster1 aufgerufen:
Delphi-Quellcode:
unit Applikation;
...
procedure Schaltfläche.OnClick();
type TmyFunc =
function :boolean;
stdcall;
var CustFunc : TFarProc;
CustHdl : THandle;
myFunc : TmyFunc;
DllName,
Funktion :
String;
begin
...
// Das Fenster der Applikation wird geöffnet
Fenster1.Show;
...
// Dynamischer Aufruf der DLL
CustHdl := LoadLibrary(PChar(extractfilepath(application.exename) + DLLName));
CustFunc := GetProcAddress(CustHdl, PChar(
Function));
if CustFunc <>
nil then
begin
@myFunc := CustFunc;
Result := myFunc;
end;
// DLL wieder freigeben
FreeLibrary(CustHdl);
end;
Innerhalb der
DLL wird dann folgendermaßen verfahren:
Delphi-Quellcode:
library DLLName;
uses
...
begin
Application.initialize;
Application.CreateForm(TFenster2, Fenster2);
Application.CreateForm(TFenster3, Fenster3);
end.
Innerhalb der geladenen
DLL wird das Hauptfenster Fenster2 geöffnet. Hier wird in der Prozedur Fenster2.FormShow() der folgende Aufruf getätigt:
Delphi-Quellcode:
unit Fenster2;
...
procedure Fenster2.FormShow();
begin
...
Fenster3.ShowModal;
if Fenster3.ModalResult = mrCancel
then
Exit;
...
end;
Anschließend wird in der Prozedur Fenster3.FormShow() der folgende Aufruf gesetzt:
Delphi-Quellcode:
unit Fenster3;
...
procedure Fenster3.FormShow();
begin
Fenster3.BringToFront;
end;
So ist der Stand wie zu Anfang beschrieben. Jedoch bringt das ja nicht.
Habe ebenfalls versucht die Fenster2/3 dynamisch zu erstellen, das hat aber auch nichts gebracht. Ich hatte zuerst gedacht das geht, aber nach der nächsten Kompillierung wurden alle Fenster wieder hinter Fenster1 gesetzt.
Showmessages zeigen den gleichen Effekt wie Fenster2 & 3, nämlich dass sie hinter dem Fenster1 bleiben und nicht im Vordergrund gezeigt werden können. Sehr blöd, wenn die Message kleiner als das Fenster1 ist.
So, hoffe jetzt ist das übersichtlicher und eine Lösung findet sich.
gruß, moony