Bonjour,
J'ai un problème de fonctionnement avec une dll qui a pour but très "basique" de souligner ou non un TLabel en fonction de la position de la souris (onMouseEnter ou onMouseLeave). J'utilise alors la propriété font.style du TLabel pour lui attribuer ou non la spécificité [fsunderline ou lui retirer].
Le bug se produit alors losque je désire fermer la fenêtre après avoir fait fonctionner les deux évènements du TLabel. A noter que le bug ne se produit pas si je désire par exemple modifier le caption du TLabel ou sa couleur à la place de son aspect souligné.
Voici le code :
fichier projet :
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ExtCtrls ;
type
TForm1 = class(TForm)
Label1: TLabel;
private
{ Déclarations privées }
public
{ Déclarations publiques }
end;
var
Form1: TForm1;
procedure lien_enter(Sender: TObject); StdCall; external 'dll\Project1.dll' name 'lien_enter';
procedure lien_leave(Sender: TObject); StdCall; external 'dll\Project1.dll' name 'lien_leave';
implementation
{$R *.dfm}
procedure TForm1.Label1MouseEnter(Sender: TObject);
begin
lien_enter(Sender);
end;
procedure TForm1.Label1MouseLeave(Sender: TObject);
begin
lien_leave(Sender);
end;
fichier dll :
library Project1;
uses
Windows, Controls, StdCtrls, SysUtils, Classes, Graphics;
{$R *.RES}
procedure lien_enter(Sender: TObject); StdCall;
begin
TLabel(Sender).Font.Style := [fsUnderline];
end;
procedure lien_leave(Sender: TObject); StdCall;
begin
TLabel(Sender).Font.Style := [];
end;
exports
lien_enter, lien_leave;
begin
end.
Message d'erreur :
1er : L'instruction à"0x004284bb"" emploie l'adresse mémoire "0x00000000". La mémoire ne peut pas être "read".
2ème : Exception EAccessViolation dans le module Project1.exe dans 000284BB. etc...
Si quelqu'un peut m'aider...
Merci
Orélien.