Page 1 sur 1
Purebasic & Dll en Delphi :ouvrir une Form non modal
Publié : dim. 27/févr./2005 12:37
par Sehka
Bonjour à toutes et à tous.
Après de longues recherches sur le net, je me décide enfin à poster
PLEASE HELP !!!
Je souhaite développer une dll sous Delphi 6 pour l'utiliser sous PureBasic.
Pour l'instant, je veux simplement afficher une "form" avec du texte ( on commence petit

).
Pour le moment j'ai réussi à appeler la fonction de la Dll qui crée la form mais seulement en "modal" ( .
ShowModal ) . L'ennui, c'est que par la suite, je ne récupère la main sous PureBasic que lorsque la "form" est fermée.
En "non-modal" (
.Show), PureBasic plante...
Pour être un peu plus clair, mon objectif principal est de permettre à une application en PureBasic d'appeler un formulaire généré par une Dll en Delphi 6.
Quels sont donc les méthodes et les procédures à respecter pour résoudre mon gros souci ???
Merci, d'avance et longue vie à la communauté PureBasic
Sehka
Publié : dim. 27/févr./2005 13:25
par Anonyme2
En modal, c'est normal je pense, une fenêtre modale garde le focus tant qu'elle est ouverte et et on ne peut pas basculer vers une autre fenêtre tant que cette fenêtre modale est ouvertre.
Pour le plantage avec show, que dit le debugger PB ?
Si il ne dit rien, c'est surement une API ou une interface window qui plante.
Sinon, poste le code PB car c'est difficile de se rendre compte. Il y a peut-être de bons connaisseurs de Delphi sur ce forum.
Publié : dim. 27/févr./2005 13:32
par Anonyme2
Je viens de penser aussi au type de l'appel de la fonction
Callfunction ou CallCFunction (mais d'après la doc Callfunction est le type classique sous WIndows)
Peut-être de ce côté là

Publié : dim. 27/févr./2005 14:13
par Sehka
Salut denis. Merci pour ta téponse.
C'est à en perdre son latin ( j'en ai jamais fait

). Dommage, c'est quand même bien pratique de pouvoir utiliser des dlls en Delphi. A ce titre, je suis totalement enclin à faire des tutos pour simplifier et démystifier tout cela.
Pour l'instant, je reviens avec mon problème et cette fois avec des bouts de codes.
La Dll
1) le DLLForm.dpr
Code : Tout sélectionner
// Delphi 6
// DLL + Form
// date : 27/02/2005
Library DLLForm;
uses
Forms,
DLLFormDef in 'DLLFormDef.pas' {Form1};
{$R *.RES}
procedure ShowForm(Owner:TObject); export;
begin
TForm1.Create(Application).Show;
end;
exports
ShowForm;
begin
end.
2) la définition DLLFormDef.pas
Code : Tout sélectionner
unit DLLFormDef;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
//function ShowForm():integer;
type
TForm1 = class(TForm)
Label1: TLabel;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Déclarations privées }
public
{ Déclarations publiques }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
Close; //Ferme la fiche
end;
end.
Le code PureBasic
Code : Tout sélectionner
OpenLibrary(1, "DLLForm.dll")
a= CallFunction(1,"ShowForm")
Delay(10000)
End
Lorsque j'éxécute ce code, la fenêtre s'ouvre sans le texte "DLL" ni le bouton quitter ( présents à l'origine ). De plus j'ai le sablier en permanence et losque je tente de la déplacer, elle devient blanche et indique "Ne réponds pas".
Bon en attendant de l'aide, je continue à errer dans les méandres du Net pour trouver une solution
Sehka
Publié : dim. 27/févr./2005 14:26
par Le Soldat Inconnu
ben, c'est simplement ton délai qui bloque le programme
plus de rafraichissement et de gestion des évènements d'ou le "Répond pas" et la fenêtre vide.
Publié : dim. 27/févr./2005 14:35
par Fred
Essaye de remplacer le 'Delay()' par While WaitWindowEvent() : Wend ca devrait dispatcher les evenements à la fenetre delphi.
Publié : dim. 27/févr./2005 14:36
par Sehka
Je viens d'enlever le Delay...Cette fois la fenêtre apparait succintement.
Cependant la fenêtre devrait rester ouverte ( c'est comme un programme esterne, non ?). D'ailleurs, si j'appelle cette dll avec une application en delphi, cela fonctionne très bien : la fenêtre est indépendante...
Que faire ?
Sehka
Publié : dim. 27/févr./2005 14:43
par Sehka
Cela semble fonctionner
Je vais tester plus en avant...
Merci Fred pour ton aide rapide et efficace
Sehka