AGB  ·  Datenschutz  ·  Impressum  







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

Form in DLL - ShowModal

Ein Thema von heri · begonnen am 26. Jun 2006 · letzter Beitrag vom 27. Jun 2006
Antwort Antwort
heri

Registriert seit: 20. Mär 2006
81 Beiträge
 
Delphi 2006 Enterprise
 
#1

Form in DLL - ShowModal

  Alt 26. Jun 2006, 13:35
hallo zusammen

ich hab folgendes Problem:


ich habe eine Form in einer DLL und möchte diese Modal anzeigen - kein Problem und denkt an: Application.Handle := AHandle;


das funktioniert ja auch - aber erst nach dem zweiten Aufruf der ShowModal Funktion: !?

(Detailbeschreibung:
Beim ersten Aufruf der ShowModal Funktion wird ein eigenes Fenster für die Form in der DLL in der Taskleiste angezeigt. Wenn ich alle Fenster minimiere und das Fenster der Hauptapplikation dann wieder anklicke, erscheint die Hauptapplikation - nicht aber wie erwartet die ModalForm aus der DLL. Wenn ich dann die ModalForm schliesse und mir erneut anzeige ohne die Applikation zu schliessen, dann funktionierts korrekt?)

((ich hab hier auch schon einige threads zu diesem thema gefunden, deshalb hat meinem Testprojekt im attachment auch ähnlichkeiten mit dem dll tutorial von http://assarbad.net))

vielleicht kann mir ja bitte jemand helfen?

meine DLL:
Delphi-Quellcode:
library VCL_SampleDLL;

uses
  Forms,
  Windows,
  FormUnit1 in 'FormUnit1.pas{FormDLL};

procedure FormShowModal(AHandle: THandle); stdcall;
begin

  with TFormDLL.Create(nil) do
  begin

    AHandleInCreate := AHandle; //für einen Versuch über SetParent

    Application.Handle := AHandle;

    ShowModal;

    Free;

  end;

end;

exports
  FormShowModal;

end.
meine Form in der DLL:
Delphi-Quellcode:
unit FormUnit1;

interface

uses
  dialogs, Windows, Forms, Classes, StdCtrls, Controls, unit3;

type
  TFormDLL = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
  public
    AHandleInCreate: THandle;
  end;

var
  FormDLL: TFormDLL;

implementation

{$R *.DFM}

procedure TFormDLL.FormCreate(Sender: TObject);
begin

  FormDLL := Self;

  Windows.SetParent( FormDLL.Handle, AHandleInCreate );

end;

end.

und meine Unit in welcher ich die DLL aufrufe:
Delphi-Quellcode:
unit AppFormUnit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, unit2;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

const
  dllname = 'VCL_SampleDLL.dll';

type
  TFNFormShowModal = procedure(AHandle: THandle); stdcall;

var
  FormShowModal: TFNFormShowModal = nil;

procedure TForm1.Button1Click(Sender: TObject);
begin

  if Assigned(FormShowModal) then
     FormShowModal(Application.Handle);

end;

procedure TForm1.Button3Click(Sender: TObject);
begin

  form2.ShowModal;

end;

var lib: HMODULE;
initialization

  lib := LoadLibrary(@dllname[1]);
  if lib <> 0 then
    @FormShowModal := GetProcAddress(lib, 'FormShowModal');

finalization

  if lib <> 0 then
    FreeLibrary(lib);

end.

vielen dank für euren Input
Angehängte Dateien
Dateityp: rar test_863.rar (7,9 KB, 24x aufgerufen)
  Mit Zitat antworten Zitat
heri

Registriert seit: 20. Mär 2006
81 Beiträge
 
Delphi 2006 Enterprise
 
#2

Re: Form in DLL - ShowModal

  Alt 27. Jun 2006, 13:26
hallo DPler

ich hab nochmals alle möglichen und unmöglichen ideen durchprobiert - doch ich kriegs nicht hin

vielleicht hat jemand ein bisschen beispielcode wo's funktioniert?
eine Form in einer DLL welche Modal angezeigt wird?

thx 4 every input
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#3

Re: Form in DLL - ShowModal

  Alt 27. Jun 2006, 13:52
Hi,

was passiert, wenn du in der DLL das Application.Handle vor dem Form.Create setzt?

mfG
mirage228
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
heri

Registriert seit: 20. Mär 2006
81 Beiträge
 
Delphi 2006 Enterprise
 
#4

Re: Form in DLL - ShowModal

  Alt 27. Jun 2006, 14:27
you are the hero! yes that's it!

manchmal kommt man auf die 'einfachsten' sachen nicht, deshalb an alle hier die LÖSUNG:
man muss den Application Handle vor dem FormCreate zuweisen:

Delphi-Quellcode:
procedure FormShowModal(AHandle: THandle); stdcall;
begin

  Application.Handle := AHandle;

  with TFormDLL.Create(nil) do
  begin

    ShowModal;

    Free;

  end;

end;
thx a lot - i'm
  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 14:09 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