Purebasic & Dll en Delphi :ouvrir une Form non modal

Programmation d'applications complexes
Sehka
Messages : 114
Inscription : dim. 27/févr./2005 11:41

Purebasic & Dll en Delphi :ouvrir une Form non modal

Message par Sehka »

Bonjour à toutes et à tous.
Après de longues recherches sur le net, je me décide enfin à poster :wink:

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 :lol: ).
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
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message 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.
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message 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à :?:
Sehka
Messages : 114
Inscription : dim. 27/févr./2005 11:41

Message par Sehka »

Salut denis. Merci pour ta téponse. :D

C'est à en perdre son latin ( j'en ai jamais fait 8) ). 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". :mad:

Bon en attendant de l'aide, je continue à errer dans les méandres du Net pour trouver une solution :cry:

Sehka
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message 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.
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Fred
Site Admin
Messages : 2808
Inscription : mer. 21/janv./2004 11:03

Message par Fred »

Essaye de remplacer le 'Delay()' par While WaitWindowEvent() : Wend ca devrait dispatcher les evenements à la fenetre delphi.
Sehka
Messages : 114
Inscription : dim. 27/févr./2005 11:41

Message 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
Sehka
Messages : 114
Inscription : dim. 27/févr./2005 11:41

Message par Sehka »

:P
Cela semble fonctionner :D
Je vais tester plus en avant...

Merci Fred pour ton aide rapide et efficace :!:

Sehka
Répondre