AGB  ·  Datenschutz  ·  Impressum  







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

Fenster einer DLL in den Vordergrund

Ein Thema von Moony · begonnen am 14. Nov 2005 · letzter Beitrag vom 14. Dez 2005
 
Moony

Registriert seit: 29. Jul 2003
Ort: Essen
454 Beiträge
 
Delphi 2010 Professional
 
#15

Re: Fenster einer DLL in den Vordergrund

  Alt 19. Nov 2005, 13:57
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
Ich weiß, daß ich nichts weiß! Sokrates
  Mit Zitat antworten Zitat
 


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 02:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz