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
Antwort Antwort
Seite 1 von 2  1 2      
Moony

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

Fenster einer DLL in den Vordergrund

  Alt 14. Nov 2005, 12:27
Hallo zusammen!

Habe das Problem, dass ich aus meiner Applikation aus in einer bestimmten Routine eine DLL starte. In der Applikation ist ein weiteres Fenster geöffnet und wird somit als inaktives Fenster gekennzeichnet. Alles schön und gut. Jetzt wird in der DLL ein anderes Fenster geöffnet und hier ist das Problem. Das Fenster ist zwar aktiv, aber es läßt sich nicht mit den Befehlen "BringToFront()" oder "SetForeGroundWindow()" in den Vordergrund setzen. Ebenso ist das bei Messages die dann im Hintergrund sind.
Ich hoffe mir kann da jemand weiterehelfen.

Gruß, moony
Ich weiß, daß ich nichts weiß! Sokrates
  Mit Zitat antworten Zitat
etom291272

Registriert seit: 16. Feb 2004
Ort: ---
232 Beiträge
 
#2

Re: Fenster einer DLL in den Vordergrund

  Alt 14. Nov 2005, 14:02
poste bitte mal den code der dll wo das fenster erzeugt und angezeigt wird
  Mit Zitat antworten Zitat
Moony

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

Re: Fenster einer DLL in den Vordergrund

  Alt 14. Nov 2005, 14:44
Die DLL wird statisch aus der Applikation aus aufgerufen und nach Rückgabe des Wertes direkt wieder freigegeben:

Delphi-Quellcode:
function DLLLaden(dllname, functionname: String):Boolean;stdcall;export;
type Tcustfunction=function (var Names,Values:pchar):boolean;stdcall;

var cfunction : tcustfunction;
    custhdl : Thandle;
    Func : TFarProc;
begin
  ...
  custhdl := LoadLibrary(PChar(extractfilepath(application.exename) + dllname));
  custfunc := GetProcAddress(custhdl,pchar(functionname));
  if custfunc <> nil then
  begin
    @cfunction := custfunc;
    result:=true;
  end
  else begin
    result := false;
    FreeLibrary(custhdl);
    exit;
  end;
  result := cfunction(...,...);
  FreeLibrary(custhdl);
  ...
end;
Das Fenster wird ja dann normal mit dem Laden der DLL erzeugt. Aufgerufen wird das Fenster hier:

Delphi-Quellcode:
Procedure DLL.FormShow();
begin
  ...
  Fenster.ShowModal;
  if Fenster.ModalResult := mrCancel then Exit;
  ...
end;
dann...
Delphi-Quellcode:
Procedure Fenster.FormShow();
begin
  Fenster.BringToFront;
end;
Ich hoffe das kann dir weiterhelfen. Das sind die wichtigsten Aufrufe.

gruß, moony
Ich weiß, daß ich nichts weiß! Sokrates
  Mit Zitat antworten Zitat
Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#4

Re: Fenster einer DLL in den Vordergrund

  Alt 14. Nov 2005, 15:07
Nach meinem Wissensstand muss ich dich leider enttäuschen: So geht es nicht. Scheinbar liegt es daran, das das Eltern-Fenster sein "neues Kind" nicht als VCL-Fenster anerkennt und es deshalb auch nicht so behandelt. Du könntest eventuell versuche, das Kind-Fenster als Objekt zu übergeben und es von den Eltern erzeugen zu lassen (wie das in Natur ebenfalls gemacht wird )
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
Moony

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

Re: Fenster einer DLL in den Vordergrund

  Alt 14. Nov 2005, 15:36
Verstehe ich nich!

Es wird doch in der Applikation Fenster1 über ShowModal geöffnet. Während das Fenster1 gezeigt wird, wird von der Applikation eine DLL statisch geladen. In der DLL wird das Fenster2 als Übergang aufgerufen. In diesem Fenster2 wird ein weiteres Fenster3 aufgerufen. Das kann doch nicht so schwer sein die Fenster aus der DLL in den Vordergrund bringen zu können. Fenster1 hat ja überhaupt keine Ahnung davon dass es Fenster2 & Fenster3 gibt.
Ich weiß, daß ich nichts weiß! Sokrates
  Mit Zitat antworten Zitat
tigerman33

Registriert seit: 30. Jul 2005
Ort: München
423 Beiträge
 
Delphi 2005 Professional
 
#6

Re: Fenster einer DLL in den Vordergrund

  Alt 14. Nov 2005, 15:39
Vielleicht kann ich ja nur nicht richtig lesen, aber wo wird in dem Code denn überhaupt das Fenster erzeugt?
Christian
Der Computer hilft mir, Probleme zu lösen, die ich ohne Computer nicht hätte.
  Mit Zitat antworten Zitat
Moony

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

Re: Fenster einer DLL in den Vordergrund

  Alt 14. Nov 2005, 15:51
Die Fenster von der Applikation werden beim Starten der Applikation unter

Delphi-Quellcode:
begin
  ...
  Applikation.CreateFrom(TFenster1, Fenster1);
  ...
end.
erstellt.

Die Fenster werden von der DLL unter

Delphi-Quellcode:
begin
  ...
  Applikation.CreateFrom(TFenster2, Fenster2);
  Applikation.CreateFrom(TFenster3, Fenster3);
  ...
end.
erstellt.

Also wird das Erstellen der Formen von der Applikation und DLL selbst übernommen.
Ich weiß, daß ich nichts weiß! Sokrates
  Mit Zitat antworten Zitat
tigerman33

Registriert seit: 30. Jul 2005
Ort: München
423 Beiträge
 
Delphi 2005 Professional
 
#8

Re: Fenster einer DLL in den Vordergrund

  Alt 14. Nov 2005, 19:28
Du schreibst, die DLL wäre statisch eingebunden. Trotzdem lädst du sie mit LoadLibrary und gibst sie sogar anschließend wieder frei. Eins von beidem geht doch aber nur.

Wo genau ist der Aufruf, der das Fenster anzeigen soll? Passiert das in irgendeiner Art und Weise in der cfunction?
Christian
Der Computer hilft mir, Probleme zu lösen, die ich ohne Computer nicht hätte.
  Mit Zitat antworten Zitat
Ianisp

Registriert seit: 15. Nov 2005
Ort: Dresden
2 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Fenster einer DLL in den Vordergrund

  Alt 15. Nov 2005, 15:54
Hallo Moony,

Du kannst deiner Funktion den Application Handle übergeben:

type Tcustfunction=function (AHandle: THandle; var Names,Values:pchar):boolean;stdcall; Der Aufruf aus der Anwendung sollte so aussehen:

result := cfunction(Application.Handle,...,...); In der DLL die Funktion custfunction ändern:

Application.Handle := AHandle; hoffe, das hilft dir weiter.

Gruß, Ianis
  Mit Zitat antworten Zitat
tigerman33

Registriert seit: 30. Jul 2005
Ort: München
423 Beiträge
 
Delphi 2005 Professional
 
#10

Re: Fenster einer DLL in den Vordergrund

  Alt 15. Nov 2005, 19:21
Hast du es eigentlich schonmal mit Form2.Perform versucht? Ihm also quasi eine Message "vorgegaukelt"?
Christian
Der Computer hilft mir, Probleme zu lösen, die ich ohne Computer nicht hätte.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 05:41 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