Avatar billede refpsych Nybegynder
12. maj 2002 - 20:09 Der er 8 kommentarer og
1 løsning

TNotifyEvent i DLL

Hej!

Hvordan laver jeg et event fx onTimer i en dll. Jeg har fået at vide at jeg skal bruge TNotifyEvent...men hvordan? Source tak :)
Avatar billede hermandsen Juniormester
12. maj 2002 - 20:22 #1
Davs igen! :)

Du behøver ikke nødvendigvis at bruge TNotifyEvent, men bare et event... Det kunne sagtens være et event som du selv har lavet! :)

type TMitEvent = procedure (Index: Integer; FileName: String; Sender: TObject) of object;

Bare lige for en god ordens skyld! ;)
Avatar billede refpsych Nybegynder
12. maj 2002 - 20:27 #2
Davsdavs :)

Jeg er stadigvæk ik helt med...åbenbart *g*

altså...
type TMitEvent = procedure (Index: Integer; FileName: String; Sender: TObject) of object;

og hvad så...Laver jeg en procedure der der hedder:

procedure TMitEvent(Index: Integer; FileName: String; Sender: TObject) of object;
begin
...
end;

og har fx:
tmr.onTimer := TMitEvent?
Avatar billede hermandsen Juniormester
12. maj 2002 - 20:46 #3
Nej... Sammenlign det med en variabel... Den kan du så Assign'e procedure' af samme type til.
Avatar billede refpsych Nybegynder
12. maj 2002 - 21:13 #4
library b;

uses
  SysUtils,
  Classes,
  ExtCtrls,
  windows;

type TNotifyEvent = procedure (Sender:TObject) of object;

var
  ontimer1 : TNotifyEvent;
  Timer1 : TTimer;

  {$R *.res}

procedure OnTimer1(Sender : TObject);
begin

end;

function getd(mWnd, aWnd : HWND; data, params : pchar; show, nopause : Boolean):integer; stdcall;
begin
  Timer1 := TTimer.Create(nil);
  OnTimer1 := Timer1.OnTimer;
  Timer1.free;
end;

exports


begin
end.

Her er en source jeg har skrevet, men hvad gør jeg for at få eventet til at kører proceduren OnTimer1(Sender : TObject); ??
Avatar billede hermandsen Juniormester
12. maj 2002 - 21:30 #5
OnTimer1 ?

Som sagt... Jeg har ikke arbejdet så meget med dll-programmering...

Jeg vil tro sådan her:

library b;

uses
  SysUtils, Classes, ExtCtrls, Windows;

//Du behøver ikke at erklære TNotifyEvent... Den ligger i Classes ;)

var
  ontimer1: TNotifyEvent;
  Timer1: TTimer;

  {$R *.res}

procedure OnTimer1(Sender : TObject);
begin

end;

function getd(mWnd, aWnd : HWND; data, params : pchar; show, nopause : Boolean):integer; stdcall;
begin
  Timer1 := TTimer.Create(nil);
  Timer1.OnTimer := OnTimer1;  //Byt! Regner med det er Timern's OnTimer du vil sætte til noget!
  Timer1.free;
end;

exports

begin
  OnTimer;
end.
Avatar billede refpsych Nybegynder
12. maj 2002 - 21:41 #6
library b;

uses
  SysUtils,
  Classes,
  ExtCtrls,
  windows;
var
  ontimer1 : TNotifyEvent;
  Timer1 : TTimer;

  {$R *.res}

procedure runOnTimer(Sender : TObject);
begin

end;

function getd(mWnd, aWnd : HWND; data, params : pchar; show, nopause : Boolean):integer; stdcall;
begin
  Timer1 := TTimer.Create(nil);
Timer1.OnTimer  := OnTimer1;
  Timer1.free;
end;

exports
getd;

begin

end.

Hmm...Okay nu har jeg lavet det om og omdøbt procedure ontimer1 til runontimer. Men hvordan får jeg procedure runontimer til at blive kørt når onTimer bliver aktiveret, for lige nu hænger det jo ikke sammen...
Avatar billede hermandsen Juniormester
12. maj 2002 - 22:06 #7
Jeg har sgu på fornemmeren at det skal laves i klasser eller noget... Der er nogle problemer med at referere til de Event-typer der skal vises som variabler...

Prøv:

library b;

uses
  SysUtils, Classes, ExtCtrls, Windows;

type
  Davs = class
  public
    Timer: TTimer;
    vRunOnTimer: TNotifyEvent;
  published
    property RunOnTimer: TNotifyEvent read vRunOnTimer write vRunOnTimer;
  end;

{$R *.res}

function getd(mWnd, aWnd : HWND; data, params : pchar; show, nopause : Boolean):integer; stdcall;
begin
  Timer := TTimer.Create(nil);
  Timer.OnTimer  := RunOnTimer;
  Timer.free;
end;

exports
getd;

begin

end.
Avatar billede refpsych Nybegynder
13. maj 2002 - 21:05 #8
Jeg har selv fundet en vej rundt om mit problem :) Jeg lukker her...
Avatar billede hermandsen Juniormester
14. maj 2002 - 10:18 #9
Fedt nok! :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester