AGB  ·  Datenschutz  ·  Impressum  







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

Unit geht, DLL nicht

Ein Thema von HappyJoe · begonnen am 15. Nov 2006 · letzter Beitrag vom 16. Nov 2006
 
HappyJoe

Registriert seit: 14. Nov 2006
37 Beiträge
 
Delphi XE2 Professional
 
#1

Unit geht, DLL nicht

  Alt 15. Nov 2006, 23:21
Hallo zusammen,

bin am verzweifeln und hoffe auf eure Hilfe. Ich möchte ein Form in ein Mainform platzieren (ähnlich MDIChild). Da aber Verwaltungsaufgaben in MainForm noch auszuführen sind, muss das DLLForm in MainForm zugänglich sein. Für Units (über uses) ist das kein Problem, bei DLLs sieht das jedoch anders aus. Deshalb habe ich mir folgenden Aufbau ausgedacht:
Delphi-Quellcode:
unit DLL_0_U1;

interface

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

type
  TMainForm = class(TForm)
    OpenDLLForm: TButton;
    procedure OpenDLLFormClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;


// Entweder als DLL oder als Unit einbinden - siehe unten
// function Show_DLLForm : TForm; stdcall; external 'DLL_1.DLL';

var
  MainForm: TMainForm;

implementation

{$R *.DFM}

// Entweder als DLL (siehe oben) oder als Unit einbinden
  uses DLL_1_U1;

procedure TMainForm.OpenDLLFormClick(Sender: TObject);
  var F : TForm;
begin
  F := Show_DLLForm;
  F.Top := 1;
  F.Left := 1;
  F.Visible := true;
  Application.ProcessMessages; // nur zum Debuggen
  F.Parent := MainForm; // DLLForm als Child vom Mainform
  Application.ProcessMessages;
// F.Show; // wird nicht gebraucht, da durch Create angezeigt ?!
end;

end.




unit DLL_1_U1;

interface

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

type
  TDLLForm1 = class(TForm)
    Label1: TLabel;
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

function Show_DLLForm : TForm;

implementation

{$R *.DFM}

function Show_DLLForm : TForm;
var
  DLLForm: TDLLForm1;
begin
  DLLForm := TDLLForm1.Create (Application);
  Result := TForm (DLLForm);
end;

end.
Soweit funktioniert auch alles. Wenn ich nun die DLL_1_U1 als DLL-Datei einbinde (siehe "// Entweder als DLL..." in unit DLL_0_U1), wird das Fenster auch erzeugt und angezeigt. Doch bei der Zuweisung
F.Parent := MainForm;
verschwindet das Fenster. Einfach weg!

Ich würde es jedoch gerne über DLLs lösen. Nur der Vollständigkeit halber:
Delphi-Quellcode:
library DLL_1;

uses
  ShareMem, SysUtils,
  Classes,
  DLL_1_U1 in 'DLL_1_U1.pas{DLLForm1};

{$R *.RES}

exports
  Show_DLLForm name 'Show_DLLForm';

begin
end.
Hat jemand eine Erklärung dafür oder noch besser EINE LÖSUNG ???

[edit=sakura] Nicht aller Text muss fett sein Mfg, sakura[/edit]
  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 21:06 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