DLL içinde MDI Child

Yapmak istediğiniz işle ilgili doğru bileşeni bulmak için burayı kullanabilirsiniz. Sadece bulmak için, diğer sorular Programlama forumuna lütfen.
Forum kuralları
Bu forum sadece yapacağınız işle alakalı doğru bileşeni bulmak içindir. Şöyle bir şey yapmam lazım, hangi bileşeni kullanıyım diyorsanız, doğru yerdesiniz.
Cevapla
morphine39
Üye
Mesajlar: 35
Kayıt: 02 May 2009 04:50

DLL içinde MDI Child

Mesaj gönderen morphine39 »

Arkadaşlar Merhaba

Hemen konuya geçiyorum...

Dll içindeki kod

Kod: Tümünü seç


library deneme;

uses
  SysUtils,
  Classes,
  Forms,
  UFrm in 'UFrm.pas' {FrmMus};

{$R *.res}
procedure FormAc(Frm:TApplication);
var
 f:TFrmMus;
begin
  f := TFrmMus.Create(Frm);
  f.Parent := Frm.MainForm;
  f.Show; 
end;

exports
  FormAc;

begin
end.
Exe içindeki kod

Kod: Tümünü seç


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus,Unit2;

type
  TFrmAna = class(TForm)
    MainMenu1: TMainMenu;
    A1: TMenuItem;
    FormA1: TMenuItem;
    br1: TMenuItem;
    procedure FormA1Click(Sender: TObject);
    procedure br1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FrmAna: TFrmAna;
  procedure FormAc(Frm:TApplication); external 'deneme.dll';
implementation

{$R *.dfm}

procedure TFrmAna.FormA1Click(Sender: TObject);
begin
  FormAc(Application);
end;

procedure TFrmAna.br1Click(Sender: TObject);
var
  f : TForm2;
begin
  f := TForm2.Create(Application.MainForm);
  f.Show;
end;

end.


Ama mdi şu hatayı veriyor..


Cannot Create Form. No MDI Forms are currently active
Lanista
Üye
Mesajlar: 18
Kayıt: 14 Tem 2008 11:31

Re: DLL içinde MDI Child

Mesaj gönderen Lanista »

Kod: Tümünü seç

function CallMyDLLForm:THandle;;
type
TProc = function(hApp, hMainForm):THandle;stdcall;
var
hLib : THandle;
ProcAddr: Pointer;
ShowF : TProc;
begin
//Loading Library
hLib := LoadLibrary('c:\....\myLibrary.dll);
if hLib <> 0 then
beign
//Getting ShowForm proc address
ProcAddr := GetProcAddress(h,'ShowForm');
if Assigned(ProcAddr) then
begin
ShowF := ProcAddr;
Result := ShowF(Application.handle,MyMainForm.handle);
end;
end;
end;
dll içine ise;

Kod: Tümünü seç

unit LibProcs
interface
uses......
function ShowForm(hApp, hMainForm):THandle;sdtcall
var
OldDLLAppHandle: THandle;
implementation

function ShowForm(hApp, hMainForm):THandle;
begin
Application.handle := hApp;
MyDLLForm := TMyDLLForm.Create(Appplication);
MyDLLForm.parentwindow := hMainForm;
result := MyDLLForm.handle;
MyDLLForm.Show;
end;
initialization
OldDLLAppHandle := Application.handle;

finalization
Application.handle := OldDLLAppHandle;
http://ozgurbalci.blogspot.com/2007/05/ ... e-dll.html

bana da lazım olmuştu. yukarıdaki örneği kullanmıştım.

kolay gelsin.

Kod: Tümünü seç

the right is the right
Kullanıcı avatarı
loribnaczo54
Üye
Mesajlar: 60
Kayıt: 24 Nis 2006 07:42
Konum: Bahçelievler/İst.

Re: DLL içinde MDI Child

Mesaj gönderen loribnaczo54 »

s.a
örneğinizi denedim fakat
"Cannot Create form. No MDI forms are currently active" -> hatasını alıyorum...
Lanista
Üye
Mesajlar: 18
Kayıt: 14 Tem 2008 11:31

Re: DLL içinde MDI Child

Mesaj gönderen Lanista »

ana formunuz mdiform yapmanız gerek.

Kod: Tümünü seç

the right is the right
Kullanıcı avatarı
loribnaczo54
Üye
Mesajlar: 60
Kayıt: 24 Nis 2006 07:42
Konum: Bahçelievler/İst.

Re: DLL içinde MDI Child

Mesaj gönderen loribnaczo54 »

Lanista yazdı:ana formunuz mdiform yapmanız gerek.
s.a
ana formum zaten mdi form. Fakat şunu mu demek istediniz acaba ben önce datamodulü create ediyorum ondan sonra anamenü formu create ediyorum. oradan da diğer child formları yüklemeye çalışıyorum.
Cevapla