Kısaca mimariyi anlatmak istiyorum. Exe file var. Bu exe mdimain. Daha sonra her modül için açtığım dll ler içinde bir adet mdimain var ve dll içindeki diğer formları. Bu Mdimain formlarda açtırıyorum. Buraya kadar hiç bir problem yoktu. Fakat projemi remobjects kütüphanesinden faydalanarak değiştirdim. Hydra diye bir component kütüphanesi var. Bu kütüphanede dll içindeki ana formu hydranın çağırabilmesi için hydraplugin olarak açıyorum. Daha sonra önceden Tform sınıfında hiç bir problem olmadan kullandığım aşağıdaki methotlar çalışmamaya başladı. Aldığım hata ise System Error. Code: 1407. Pencere sınıfı bulunamadı. hatası alıyorum. dll içindeki mdi main form ve mdichild olarak açmak istediğim formun içindeki kodları gönderiyorum. Yardımlarınızı bekliyorum Teşekkür ederim.
Unitfrmstok ThyVisualPlugin sınıfına bağlı bir form. Bu mdimain problemsiz olarak açıyorum.
Kod: Tümünü seç
unit nfrmstok;
interface
uses
{vcl:} Windows, Messages, SysUtils, Variants, Classes, Graphics,
Controls, Forms, Dialogs, StdCtrls,
{Hydra:} uHYVisualPlugin, uHYIntf, RzPanel, ExtCtrls, Menus;
type
TFrm_stok = class(THYVisualPlugin)
RzStatusBar1: TRzStatusBar;
RzToolbar1: TRzToolbar;
MainMenu1: TMainMenu;
Dosya1: TMenuItem;
MenuA1: TMenuItem;
procedure MenuA1Click(Sender: TObject);
private
protected
public
end;
implementation
uses
{Hydra:} uHYPluginFactories, nstokkartikayit;
{$R *.dfm}
procedure Create_Frm_stok(out anInstance: IInterface);
begin
anInstance := TFrm_stok.Create(Application);
end;
resourcestring
sDescription = '';
const
sRequiredPrivilege = '';
sUserData = '';
procedure TFrm_stok.MenuA1Click(Sender: TObject);
begin
if not assigned(Frm_stokkartikayit) then
begin
Frm_stokkartikayit := TFrm_stokkartikayit.Create(Self);
Frm_stokkartikayit.FormStyle := fsMDIChild;
Frm_stokkartikayit.Show;
end;
end;
initialization
THYPluginFactory.Create(HInstance, 'Frm_stok', Create_Frm_stok, TFrm_stok,
1, 0, sRequiredPrivilege, sDescription, sUserData);
Kod: Tümünü seç
unit nstokkartikayit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, uHYVisualPlugin, uHYIntf, uHYStdVCLUI;
type
TFrm_stokkartikayit = class(THYVisualPlugin)
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormDestroy(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
FMDIClientHandle:HWND;
{ Private declarations }
procedure CreateWindowHandle(const Params: TCreateParams);override;
function GetMDIClientHandle:hwnd;
Procedure DestroyWindowHandle;override;
{ Private declarations }
public
{ Public declarations }
end;
var
Frm_stokkartikayit: TFrm_stokkartikayit;
implementation
uses nfrmstok;
{$R *.dfm}
procedure Tfrm_stokkartikayit.CreateWindowHandle(const Params: TCreateParams);
var
CreateStruct: TMDICreateStruct;
begin
try
if (FormStyle = fsMDIChild) and not (csDesigning in ComponentState) then
begin
FMDIClientHandle := GetMDIClientHandle;
with CreateStruct do
begin
szClass := Params.WinClassName;
szTitle := Params.Caption;
hOwner := HInstance;
X := Params.X;
Y := Params.Y;
cX := Params.Width;
cY := Params.Height;
style := Params.Style;
lParam := Longint(Params.Param);
//lpa
end;
WindowHandle := SendMessage(FMDIClientHandle,
WM_MDICREATE, 0, Longint(@CreateStruct));
Include(FFormState, fsCreatedMDIChild);
end else
begin
inherited CreateWindowhandle(Params);
end;
except
Raise Exception.Create('Hata');
end;
end;
procedure TFrm_stokkartikayit.DestroyWindowHandle;
begin
if( fsCreatedMDIChild in FFormState ) then
SendMessage(FMDIClientHandle, WM_MDIDESTROY, Handle, 0)
else
inherited DestroywindowHandle;
FMDIClientHandle := 0;
end;
function TFrm_stokkartikayit.GetMDIClientHandle:hwnd;
begin
Result := 0;
if (owner is TForm) then
Result := TForm(owner).ClientHandle;
if (Result = 0) and (assigned(Application.MainForm)) then
Result := Application.MainForm.ClientHandle;
if( Result=0) then
raise Exception.Create('No Parent MDI Form');
end;
procedure TFrm_stokkartikayit.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
Action := caFree;
end;
procedure TFrm_stokkartikayit.FormCreate(Sender: TObject);
begin
//ShowMessage('aa');
end;
procedure TFrm_stokkartikayit.FormDestroy(Sender: TObject);
begin
Frm_stokkartikayit := nil;
end;
end.