Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Problème Econversion Error lors de l'affichage d'une info bulle dans une fenetre MDIChild dans une DLL [ Archives / J'AI BESOIN D'AIDE !!!! :O ] (DarkSky)

mardi 4 février 2003 à 15:34:22 | Problème Econversion Error lors de l'affichage d'une info bulle dans une fenetre MDIChild dans une DLL

DarkSky

Salut a tous,

j'ai créer un projet MDI avec Delphi 6 donc les fenetre MDi Filles sont dans une DLL.

j'ai une erreur EConversionError a la place de l'affichage de l'info bulle Hint dans les composants de ma MDI Fille.

Le problème est visiblement lié avec l'utilisation de TScreen ?

Si quelqu'un a une idée, merci d'avance ......

thx a tous pour ce forum.

Voici le source des différents modules :

-------------------------------------
Voici le code du programme MDI Parent
-------------------------------------
unit MAIN;

interface

uses Windows, SysUtils, Classes, Graphics, Forms, Controls, Menus,
StdCtrls, Dialogs, Buttons, Messages, ExtCtrls, ComCtrls, StdActns,
ActnList, ToolWin, ImgList;

type
TMainForm = class(TForm)
MainMenu1: TMainMenu;
File1: TMenuItem;
FileNewItem: TMenuItem;
FileOpenItem: TMenuItem;
FileCloseItem: TMenuItem;
Window1: TMenuItem;
Help1: TMenuItem;
N1: TMenuItem;
FileExitItem: TMenuItem;
WindowCascadeItem: TMenuItem;
WindowTileItem: TMenuItem;
WindowArrangeItem: TMenuItem;
HelpAboutItem: TMenuItem;
OpenDialog: TOpenDialog;
FileSaveItem: TMenuItem;
FileSaveAsItem: TMenuItem;
Edit1: TMenuItem;
CutItem: TMenuItem;
CopyItem: TMenuItem;
PasteItem: TMenuItem;
WindowMinimizeItem: TMenuItem;
StatusBar: TStatusBar;
ActionList1: TActionList;
EditCut1: TEditCut;
EditCopy1: TEditCopy;
EditPaste1: TEditPaste;
FileNew1: TAction;
FileSave1: TAction;
FileExit1: TAction;
FileOpen1: TAction;
FileSaveAs1: TAction;
WindowCascade1: TWindowCascade;
WindowTileHorizontal1: TWindowTileHorizontal;
WindowArrangeAll1: TWindowArrange;
WindowMinimizeAll1: TWindowMinimizeAll;
HelpAbout1: TAction;
FileClose1: TWindowClose;
WindowTileVertical1: TWindowTileVertical;
WindowTileItem2: TMenuItem;
ToolBar2: TToolBar;
ToolButton1: TToolButton;
ToolButton2: TToolButton;
ToolButton3: TToolButton;
ToolButton4: TToolButton;
ToolButton5: TToolButton;
ToolButton6: TToolButton;
ToolButton9: TToolButton;
ToolButton7: TToolButton;
ToolButton8: TToolButton;
ToolButton10: TToolButton;
ToolButton11: TToolButton;
ImageList1: TImageList;
procedure FileNew1Execute(Sender: TObject);
procedure HelpAbout1Execute(Sender: TObject);
procedure FileExit1Execute(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Déclarations privées }
public
{ Déclarations publiques }
end;

// Définition des prototypes pour les fonctions de la DLL
TDLLEntryPoint = procedure(dwReason: DWORD); stdcall;
TCreateMDIChildForm = procedure(App: TApplication; Scr: TScreen);
TDestroyMDIChildForm = procedure;

var
MainForm: TMainForm;

// Déclaration des fonctions exportés par la DLL
LibHandle : THandle;
DLLEntryPoint : TDLLEntryPoint;
CreateMDIChildForm : TCreateMDIChildForm;
DestroyMDIChildForm: TDestroyMDIChildForm;




implementation

{$R *.dfm}

uses about;


procedure TMainForm.FileNew1Execute(Sender: TObject);
begin
CreateMDIChildForm(Application, Screen);
end;

procedure TMainForm.HelpAbout1Execute(Sender: TObject);
begin
AboutBox.ShowModal;
end;

procedure TMainForm.FileExit1Execute(Sender: TObject);
begin
Close;
end;

procedure TMainForm.FormCreate(Sender: TObject);
begin
if LibHandle <> 0 then
begin
ShowMessage('Library already loaded');
Exit;
end;
LibHandle := LoadLibrary('DLL.dll');
try
if LibHandle = 0 then
begin
raise Exception.Create('Unable to load DLL');
Exit;
end;
@DLLEntryPoint := GetProcAddress(LibHandle, 'DLLEntryPoint');
@CreateMDIChildForm := GetProcAddress(LibHandle, 'CreateMDIChildForm');
@DestroyMDIChildForm:= GetProcAddress(LibHandle, 'DestroyMDIChildForm');
except
FreeLibrary(LibHandle);
end;

end;

procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
@CreateMDIChildForm := nil;
@DestroyMDIChildForm:= nil;
if LibHandle = 0 then
begin
ShowMessage('Library already released');
Exit;
end;
//The two following procedures can be used to detach the dll
//FreeLibrary(LibHandle);
{ or }
DLLEntryPoint(DLL_PROCESS_DETACH); //The procedure call can be used for VB and/or Delphi
LibHandle := 0;

Action := caFree;
end;

end.

------------------------
Voici le code de la DLL
------------------------

library Dll;

uses
SysUtils,
Windows,
Forms,
Classes,
Unit1 in 'Unit1.pas' {Form1};

var
DLLApp: TApplication;
DLLScr: TScreen;
DLLAppHandle: THandle;


{$R *.res}

procedure RestoreAppAndScr;
begin
Screen := DLLScr;
Application := DLLApp;
end;

procedure CreateMDIChildForm(App: TApplication; Scr: TScreen);
begin
// if not Assigned(Form1) then
// begin
Application := App;
//Assign Screen Object
if Assigned(Scr) then Screen := Scr;
//DLLForm2 := TDLLForm2.Create(Application);
Form1 := TForm1.Create(Application.MainForm);
Form1.Caption := 'MDI Child Form';
Form1.Show;
// end
// else
// begin
// Form1.Show;
// end;
end;

procedure DestroyMDIChildForm;
begin
if Assigned(Form1) then
begin
Form1.Free;
end
else
begin
//ShowMessage('Form was already destroyed.');
end;
Form1 := nil;
RestoreAppAndScr;
end;

//DLL Entry Point
//----------------
procedure DLLEntryPoint(dwReason: DWORD); stdcall; //register; //stdcall;
begin
case dwReason of
DLL_PROCESS_ATTACH: //1
begin
DLLAppHandle := Application.Handle;
DLLApp := Application;
DLLScr := Screen;
end;
DLL_PROCESS_DETACH: //3
begin
// Destroy des fenetres

// Rend les handles au programme principal
RestoreAppAndScr;
Application.Handle := DLLAppHandle;
end;
DLL_THREAD_ATTACH : {ShowMessage('Thread Attach')}; //2
DLL_THREAD_DETACH : {ShowMessage('Thread Detach')}; //0
end;
end;

exports
DLLEntryPoint, // Point d'entrée de la DLL
CreateMDIChildForm, // Création de la fenetre MDI
DestroyMDIChildForm; // Destruction de la fenetre MDI

begin
//DLLEntryPoint is specifically a Win32 and C++ implementation
//DLLProc is a pointer variable from the SYSTEM Unit (automatically included)
//The SYSTEM Unit is responsible for executing code assinged to DLLEntryPoint
DLLProc := @DLLEntryPoint; //Assign the address of DLLEntryPoint to DLLProc
DLLEntryPoint(DLL_PROCESS_ATTACH); //Indicate that the DLL is attaching to the process
end.

//In VB Call this to detach the DLL before the main process terminates
//DLLEntryPoint(DLL_PROCESS_ATTACH);


-------------------------------------------------
Voici le code de la fenetre MDI Fille Dans la DLL
-------------------------------------------------
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, AdvGrid;

type
TForm1 = class(TForm)
Edit1: TEdit;
procedure FormDestroy(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Déclarations privées }
public
{ Déclarations publiques }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormDestroy(Sender: TObject);
begin
Form1 := nil;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
//if Action := caFree; then you should nil the form variable
Action := caFree;
end;

end.



..::= DarkSky =::..

dimanche 9 février 2003 à 10:29:14 | Re : Problème Econversion Error lors de l'affichage d'une info bulle dans une fenetre MDIChild dans une DLL

DarkSky

Personne n'a rencontré ce genre de problème avec les fenetres MDi et les DLL ???

help please :)

..::= DarkSky =::..


-------------------------------
Réponse au message :
-------------------------------

> Salut a tous,
>
> j'ai créer un projet MDI avec Delphi 6 donc les fenetre MDi Filles sont dans une DLL.
>
> j'ai une erreur EConversionError a la place de l'affichage de l'info bulle Hint dans les composants de ma MDI Fille.
>
> Le problème est visiblement lié avec l'utilisation de TScreen ?
>
> Si quelqu'un a une idée, merci d'avance ......
>
> thx a tous pour ce forum.
>
> Voici le source des différents modules :
>
> -------------------------------------
> Voici le code du programme MDI Parent
> -------------------------------------
> unit MAIN;
>
> interface
>
> uses Windows, SysUtils, Classes, Graphics, Forms, Controls, Menus,
> StdCtrls, Dialogs, Buttons, Messages, ExtCtrls, ComCtrls, StdActns,
> ActnList, ToolWin, ImgList;
>
> type
> TMainForm = class(TForm)
> MainMenu1: TMainMenu;
> File1: TMenuItem;
> FileNewItem: TMenuItem;
> FileOpenItem: TMenuItem;
> FileCloseItem: TMenuItem;
> Window1: TMenuItem;
> Help1: TMenuItem;
> N1: TMenuItem;
> FileExitItem: TMenuItem;
> WindowCascadeItem: TMenuItem;
> WindowTileItem: TMenuItem;
> WindowArrangeItem: TMenuItem;
> HelpAboutItem: TMenuItem;
> OpenDialog: TOpenDialog;
> FileSaveItem: TMenuItem;
> FileSaveAsItem: TMenuItem;
> Edit1: TMenuItem;
> CutItem: TMenuItem;
> CopyItem: TMenuItem;
> PasteItem: TMenuItem;
> WindowMinimizeItem: TMenuItem;
> StatusBar: TStatusBar;
> ActionList1: TActionList;
> EditCut1: TEditCut;
> EditCopy1: TEditCopy;
> EditPaste1: TEditPaste;
> FileNew1: TAction;
> FileSave1: TAction;
> FileExit1: TAction;
> FileOpen1: TAction;
> FileSaveAs1: TAction;
> WindowCascade1: TWindowCascade;
> WindowTileHorizontal1: TWindowTileHorizontal;
> WindowArrangeAll1: TWindowArrange;
> WindowMinimizeAll1: TWindowMinimizeAll;
> HelpAbout1: TAction;
> FileClose1: TWindowClose;
> WindowTileVertical1: TWindowTileVertical;
> WindowTileItem2: TMenuItem;
> ToolBar2: TToolBar;
> ToolButton1: TToolButton;
> ToolButton2: TToolButton;
> ToolButton3: TToolButton;
> ToolButton4: TToolButton;
> ToolButton5: TToolButton;
> ToolButton6: TToolButton;
> ToolButton9: TToolButton;
> ToolButton7: TToolButton;
> ToolButton8: TToolButton;
> ToolButton10: TToolButton;
> ToolButton11: TToolButton;
> ImageList1: TImageList;
> procedure FileNew1Execute(Sender: TObject);
> procedure HelpAbout1Execute(Sender: TObject);
> procedure FileExit1Execute(Sender: TObject);
> procedure FormCreate(Sender: TObject);
> procedure FormClose(Sender: TObject; var Action: TCloseAction);
> private
> { Déclarations privées }
> public
> { Déclarations publiques }
> end;
>
> // Définition des prototypes pour les fonctions de la DLL
> TDLLEntryPoint = procedure(dwReason: DWORD); stdcall;
> TCreateMDIChildForm = procedure(App: TApplication; Scr: TScreen);
> TDestroyMDIChildForm = procedure;
>
> var
> MainForm: TMainForm;
>
> // Déclaration des fonctions exportés par la DLL
> LibHandle : THandle;
> DLLEntryPoint : TDLLEntryPoint;
> CreateMDIChildForm : TCreateMDIChildForm;
> DestroyMDIChildForm: TDestroyMDIChildForm;
>
>
>
>
> implementation
>
> {$R *.dfm}
>
> uses about;
>
>
> procedure TMainForm.FileNew1Execute(Sender: TObject);
> begin
> CreateMDIChildForm(Application, Screen);
> end;
>
> procedure TMainForm.HelpAbout1Execute(Sender: TObject);
> begin
> AboutBox.ShowModal;
> end;
>
> procedure TMainForm.FileExit1Execute(Sender: TObject);
> begin
> Close;
> end;
>
> procedure TMainForm.FormCreate(Sender: TObject);
> begin
> if LibHandle <> 0 then
> begin
> ShowMessage('Library already loaded');
> Exit;
> end;
> LibHandle := LoadLibrary('DLL.dll');
> try
> if LibHandle = 0 then
> begin
> raise Exception.Create('Unable to load DLL');
> Exit;
> end;
> @DLLEntryPoint := GetProcAddress(LibHandle, 'DLLEntryPoint');
> @CreateMDIChildForm := GetProcAddress(LibHandle, 'CreateMDIChildForm');
> @DestroyMDIChildForm:= GetProcAddress(LibHandle, 'DestroyMDIChildForm');
> except
> FreeLibrary(LibHandle);
> end;
>
> end;
>
> procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction);
> begin
> @CreateMDIChildForm := nil;
> @DestroyMDIChildForm:= nil;
> if LibHandle = 0 then
> begin
> ShowMessage('Library already released');
> Exit;
> end;
> //The two following procedures can be used to detach the dll
> //FreeLibrary(LibHandle);
> { or }
> DLLEntryPoint(DLL_PROCESS_DETACH); //The procedure call can be used for VB and/or Delphi
> LibHandle := 0;
>
> Action := caFree;
> end;
>
> end.
>
> ------------------------
> Voici le code de la DLL
> ------------------------
>
> library Dll;
>
> uses
> SysUtils,
> Windows,
> Forms,
> Classes,
> Unit1 in 'Unit1.pas' {Form1};
>
> var
> DLLApp: TApplication;
> DLLScr: TScreen;
> DLLAppHandle: THandle;
>
>
> {$R *.res}
>
> procedure RestoreAppAndScr;
> begin
> Screen := DLLScr;
> Application := DLLApp;
> end;
>
> procedure CreateMDIChildForm(App: TApplication; Scr: TScreen);
> begin
> // if not Assigned(Form1) then
> // begin
> Application := App;
> //Assign Screen Object
> if Assigned(Scr) then Screen := Scr;
> //DLLForm2 := TDLLForm2.Create(Application);
> Form1 := TForm1.Create(Application.MainForm);
> Form1.Caption := 'MDI Child Form';
> Form1.Show;
> // end
> // else
> // begin
> // Form1.Show;
> // end;
> end;
>
> procedure DestroyMDIChildForm;
> begin
> if Assigned(Form1) then
> begin
> Form1.Free;
> end
> else
> begin
> //ShowMessage('Form was already destroyed.');
> end;
> Form1 := nil;
> RestoreAppAndScr;
> end;
>
> //DLL Entry Point
> //----------------
> procedure DLLEntryPoint(dwReason: DWORD); stdcall; //register; //stdcall;
> begin
> case dwReason of
> DLL_PROCESS_ATTACH: //1
> begin
> DLLAppHandle := Application.Handle;
> DLLApp := Application;
> DLLScr := Screen;
> end;
> DLL_PROCESS_DETACH: //3
> begin
> // Destroy des fenetres
>
> // Rend les handles au programme principal
> RestoreAppAndScr;
> Application.Handle := DLLAppHandle;
> end;
> DLL_THREAD_ATTACH : {ShowMessage('Thread Attach')}; //2
> DLL_THREAD_DETACH : {ShowMessage('Thread Detach')}; //0
> end;
> end;
>
> exports
> DLLEntryPoint, // Point d'entrée de la DLL
> CreateMDIChildForm, // Création de la fenetre MDI
> DestroyMDIChildForm; // Destruction de la fenetre MDI
>
> begin
> //DLLEntryPoint is specifically a Win32 and C++ implementation
> //DLLProc is a pointer variable from the SYSTEM Unit (automatically included)
> //The SYSTEM Unit is responsible for executing code assinged to DLLEntryPoint
> DLLProc := @DLLEntryPoint; //Assign the address of DLLEntryPoint to DLLProc
> DLLEntryPoint(DLL_PROCESS_ATTACH); //Indicate that the DLL is attaching to the process
> end.
>
> //In VB Call this to detach the DLL before the main process terminates
> //DLLEntryPoint(DLL_PROCESS_ATTACH);
>
>
> -------------------------------------------------
> Voici le code de la fenetre MDI Fille Dans la DLL
> -------------------------------------------------
> unit Unit1;
>
> interface
>
> uses
> Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
> Dialogs, StdCtrls, Grids, AdvGrid;
>
> type
> TForm1 = class(TForm)
> Edit1: TEdit;
> procedure FormDestroy(Sender: TObject);
> procedure FormClose(Sender: TObject; var Action: TCloseAction);
> private
> { Déclarations privées }
> public
> { Déclarations publiques }
> end;
>
> var
> Form1: TForm1;
>
> implementation
>
> {$R *.dfm}
>
> procedure TForm1.FormDestroy(Sender: TObject);
> begin
> Form1 := nil;
> end;
>
> procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
> begin
> //if Action := caFree; then you should nil the form variable
> Action := caFree;
> end;
>
> end.
>
>
>
> ..::= DarkSky =::..

lundi 16 juin 2003 à 20:27:11 | Re : Problème Econversion Error lors de l'affichage d'une info bulle dans une fenetre MDIChild dans une DLL

Clorish

Pour ma part, je cherche deja a integrer une MDI dans une dll :/

J'ai mùon code source de l'exe qui creer une form de type fsMDIForm et une dans une dll qui est de la forme : fsMDIChild

Mon pb c'est que a la creation, j'ai une erreur de type "Fenetre non mdi non trouvé" ....

Ton code par rapport au miens est differents surtotu par l'utilisation de TScreen .... je connait pas ce paramettre.

Si t uveux on peux chercher ensemble ...

@++



-------------------------------
Réponse au message :
-------------------------------

> Personne n'a rencontré ce genre de problème avec les fenetres MDi et les DLL ???
>
> help please :)
>
> ..::= DarkSky =::..
>
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > Salut a tous,
> >
> > j'ai créer un projet MDI avec Delphi 6 donc les fenetre MDi Filles sont dans une DLL.
> >
> > j'ai une erreur EConversionError a la place de l'affichage de l'info bulle Hint dans les composants de ma MDI Fille.
> >
> > Le problème est visiblement lié avec l'utilisation de TScreen ?
> >
> > Si quelqu'un a une idée, merci d'avance ......
> >
> > thx a tous pour ce forum.
> >
> > Voici le source des différents modules :
> >
> > -------------------------------------
> > Voici le code du programme MDI Parent
> > -------------------------------------
> > unit MAIN;
> >
> > interface
> >
> > uses Windows, SysUtils, Classes, Graphics, Forms, Controls, Menus,
> > StdCtrls, Dialogs, Buttons, Messages, ExtCtrls, ComCtrls, StdActns,
> > ActnList, ToolWin, ImgList;
> >
> > type
> > TMainForm = class(TForm)
> > MainMenu1: TMainMenu;
> > File1: TMenuItem;
> > FileNewItem: TMenuItem;
> > FileOpenItem: TMenuItem;
> > FileCloseItem: TMenuItem;
> > Window1: TMenuItem;
> > Help1: TMenuItem;
> > N1: TMenuItem;
> > FileExitItem: TMenuItem;
> > WindowCascadeItem: TMenuItem;
> > WindowTileItem: TMenuItem;
> > WindowArrangeItem: TMenuItem;
> > HelpAboutItem: TMenuItem;
> > OpenDialog: TOpenDialog;
> > FileSaveItem: TMenuItem;
> > FileSaveAsItem: TMenuItem;
> > Edit1: TMenuItem;
> > CutItem: TMenuItem;
> > CopyItem: TMenuItem;
> > PasteItem: TMenuItem;
> > WindowMinimizeItem: TMenuItem;
> > StatusBar: TStatusBar;
> > ActionList1: TActionList;
> > EditCut1: TEditCut;
> > EditCopy1: TEditCopy;
> > EditPaste1: TEditPaste;
> > FileNew1: TAction;
> > FileSave1: TAction;
> > FileExit1: TAction;
> > FileOpen1: TAction;
> > FileSaveAs1: TAction;
> > WindowCascade1: TWindowCascade;
> > WindowTileHorizontal1: TWindowTileHorizontal;
> > WindowArrangeAll1: TWindowArrange;
> > WindowMinimizeAll1: TWindowMinimizeAll;
> > HelpAbout1: TAction;
> > FileClose1: TWindowClose;
> > WindowTileVertical1: TWindowTileVertical;
> > WindowTileItem2: TMenuItem;
> > ToolBar2: TToolBar;
> > ToolButton1: TToolButton;
> > ToolButton2: TToolButton;
> > ToolButton3: TToolButton;
> > ToolButton4: TToolButton;
> > ToolButton5: TToolButton;
> > ToolButton6: TToolButton;
> > ToolButton9: TToolButton;
> > ToolButton7: TToolButton;
> > ToolButton8: TToolButton;
> > ToolButton10: TToolButton;
> > ToolButton11: TToolButton;
> > ImageList1: TImageList;
> > procedure FileNew1Execute(Sender: TObject);
> > procedure HelpAbout1Execute(Sender: TObject);
> > procedure FileExit1Execute(Sender: TObject);
> > procedure FormCreate(Sender: TObject);
> > procedure FormClose(Sender: TObject; var Action: TCloseAction);
> > private
> > { Déclarations privées }
> > public
> > { Déclarations publiques }
> > end;
> >
> > // Définition des prototypes pour les fonctions de la DLL
> > TDLLEntryPoint = procedure(dwReason: DWORD); stdcall;
> > TCreateMDIChildForm = procedure(App: TApplication; Scr: TScreen);
> > TDestroyMDIChildForm = procedure;
> >
> > var
> > MainForm: TMainForm;
> >
> > // Déclaration des fonctions exportés par la DLL
> > LibHandle : THandle;
> > DLLEntryPoint : TDLLEntryPoint;
> > CreateMDIChildForm : TCreateMDIChildForm;
> > DestroyMDIChildForm: TDestroyMDIChildForm;
> >
> >
> >
> >
> > implementation
> >
> > {$R *.dfm}
> >
> > uses about;
> >
> >
> > procedure TMainForm.FileNew1Execute(Sender: TObject);
> > begin
> > CreateMDIChildForm(Application, Screen);
> > end;
> >
> > procedure TMainForm.HelpAbout1Execute(Sender: TObject);
> > begin
> > AboutBox.ShowModal;
> > end;
> >
> > procedure TMainForm.FileExit1Execute(Sender: TObject);
> > begin
> > Close;
> > end;
> >
> > procedure TMainForm.FormCreate(Sender: TObject);
> > begin
> > if LibHandle <> 0 then
> > begin
> > ShowMessage('Library already loaded');
> > Exit;
> > end;
> > LibHandle := LoadLibrary('DLL.dll');
> > try
> > if LibHandle = 0 then
> > begin
> > raise Exception.Create('Unable to load DLL');
> > Exit;
> > end;
> > @DLLEntryPoint := GetProcAddress(LibHandle, 'DLLEntryPoint');
> > @CreateMDIChildForm := GetProcAddress(LibHandle, 'CreateMDIChildForm');
> > @DestroyMDIChildForm:= GetProcAddress(LibHandle, 'DestroyMDIChildForm');
> > except
> > FreeLibrary(LibHandle);
> > end;
> >
> > end;
> >
> > procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction);
> > begin
> > @CreateMDIChildForm := nil;
> > @DestroyMDIChildForm:= nil;
> > if LibHandle = 0 then
> > begin
> > ShowMessage('Library already released');
> > Exit;
> > end;
> > //The two following procedures can be used to detach the dll
> > //FreeLibrary(LibHandle);
> > { or }
> > DLLEntryPoint(DLL_PROCESS_DETACH); //The procedure call can be used for VB and/or Delphi
> > LibHandle := 0;
> >
> > Action := caFree;
> > end;
> >
> > end.
> >
> > ------------------------
> > Voici le code de la DLL
> > ------------------------
> >
> > library Dll;
> >
> > uses
> > SysUtils,
> > Windows,
> > Forms,
> > Classes,
> > Unit1 in 'Unit1.pas' {Form1};
> >
> > var
> > DLLApp: TApplication;
> > DLLScr: TScreen;
> > DLLAppHandle: THandle;
> >
> >
> > {$R *.res}
> >
> > procedure RestoreAppAndScr;
> > begin
> > Screen := DLLScr;
> > Application := DLLApp;
> > end;
> >
> > procedure CreateMDIChildForm(App: TApplication; Scr: TScreen);
> > begin
> > // if not Assigned(Form1) then
> > // begin
> > Application := App;
> > //Assign Screen Object
> > if Assigned(Scr) then Screen := Scr;
> > //DLLForm2 := TDLLForm2.Create(Application);
> > Form1 := TForm1.Create(Application.MainForm);
> > Form1.Caption := 'MDI Child Form';
> > Form1.Show;
> > // end
> > // else
> > // begin
> > // Form1.Show;
> > // end;
> > end;
> >
> > procedure DestroyMDIChildForm;
> > begin
> > if Assigned(Form1) then
> > begin
> > Form1.Free;
> > end
> > else
> > begin
> > //ShowMessage('Form was already destroyed.');
> > end;
> > Form1 := nil;
> > RestoreAppAndScr;
> > end;
> >
> > //DLL Entry Point
> > //----------------
> > procedure DLLEntryPoint(dwReason: DWORD); stdcall; //register; //stdcall;
> > begin
> > case dwReason of
> > DLL_PROCESS_ATTACH: //1
> > begin
> > DLLAppHandle := Application.Handle;
> > DLLApp := Application;
> > DLLScr := Screen;
> > end;
> > DLL_PROCESS_DETACH: //3
> > begin
> > // Destroy des fenetres
> >
> > // Rend les handles au programme principal
> > RestoreAppAndScr;
> > Application.Handle := DLLAppHandle;
> > end;
> > DLL_THREAD_ATTACH : {ShowMessage('Thread Attach')}; //2
> > DLL_THREAD_DETACH : {ShowMessage('Thread Detach')}; //0
> > end;
> > end;
> >
> > exports
> > DLLEntryPoint, // Point d'entrée de la DLL
> > CreateMDIChildForm, // Création de la fenetre MDI
> > DestroyMDIChildForm; // Destruction de la fenetre MDI
> >
> > begin
> > //DLLEntryPoint is specifically a Win32 and C++ implementation
> > //DLLProc is a pointer variable from the SYSTEM Unit (automatically included)
> > //The SYSTEM Unit is responsible for executing code assinged to DLLEntryPoint
> > DLLProc := @DLLEntryPoint; //Assign the address of DLLEntryPoint to DLLProc
> > DLLEntryPoint(DLL_PROCESS_ATTACH); //Indicate that the DLL is attaching to the process
> > end.
> >
> > //In VB Call this to detach the DLL before the main process terminates
> > //DLLEntryPoint(DLL_PROCESS_ATTACH);
> >
> >
> > -------------------------------------------------
> > Voici le code de la fenetre MDI Fille Dans la DLL
> > -------------------------------------------------
> > unit Unit1;
> >
> > interface
> >
> > uses
> > Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
> > Dialogs, StdCtrls, Grids, AdvGrid;
> >
> > type
> > TForm1 = class(TForm)
> > Edit1: TEdit;
> > procedure FormDestroy(Sender: TObject);
> > procedure FormClose(Sender: TObject; var Action: TCloseAction);
> > private
> > { Déclarations privées }
> > public
> > { Déclarations publiques }
> > end;
> >
> > var
> > Form1: TForm1;
> >
> > implementation
> >
> > {$R *.dfm}
> >
> > procedure TForm1.FormDestroy(Sender: TObject);
> > begin
> > Form1 := nil;
> > end;
> >
> > procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
> > begin
> > //if Action := caFree; then you should nil the form variable
> > Action := caFree;
> > end;
> >
> > end.
> >
> >
> >
> > ..::= DarkSky =::..
>



Cette discussion est classé dans : end, dll, procedure, begin, tmenuitem


Répondre à ce message

Sujets en rapport avec ce message

Hints dans une DLL [ par almi ] J'ai une fenêtre (TForm) qui fonctionne parfaitement dans mon executable.Si je la place dans une DLL, j'obtiens le message :Ne peut assigner TFont à T pb d'affichage d'un TChart [ par Pegase20 ] bonjour, J'affiche une autre fiche qui contient un graphique (créé à l'aide d'un TChart) quand je clique sur un bouton.Mon pb c'est que le graph ne MDI Filles dans une DLL [ par DarkSky ] ..::= DarkSky =::..Salut almi,j'ai exactement le même problème que toi (Hint) sur l'utilisation de MDI Filles dans une DL Probleme lecture/ecriture dans fichier. [ par Cybric ] Bonsoir.Je débute avec DELPHI, donc novice.Je recopie tel quel le code de lecture de fichier trouvé dans "tout en poche" et cela ne fonctionne pas. Le projet de chat avec delphi 7 [ par dk ] hello every body j'aimerais faire un chat mais voila le probleme (si on peut dire) c ke g delphi 7 avec comme composant installer Tcpserver et Tcpclie plein derreur a la fermeture de mon prog qui font lanter windows [ par dk ] voila javais deja eu qq petits soucis avec le prjet de chat que je suis en train de realiser mais jamais a cette ampleur lol, qd je lance mon prog ca Changer la forme de l'animation matrix [ par Also know as ] Bonjour,Voici une méthode permettant de créer une animation à la matrix sans sa police.Il suffit juste d'appeler sa Form MainForm, mettre un memo et c Comment ajouter des param. à l'appel d'une DLL [ par Pierrotmad ] J'ai un prog qui appelle une dll que j'ai réalisé . Dans la dll, j'ai un champ texte, disons pour l'exemple EdtChemin.text . J'aimerai mettre en param Aide pour appelé des procédures [ par prevok ] Lorsque je démarre le programme, pas de problème, je peux aller choisir dans le menu l'option que je veux, qui appelle une procedure, mais quand de ce Reutiliser une procedure [ par jimmy69 ] Bonjour a tous,Voila je debute avec delphi et je suis un peu fade :-) !!!!J'aimerais savoir s'il etait possible de reutiliser une procedure recement d


Nos sponsors

Sondage...

CalendriCode

Octobre 2008
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,484 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.