---
title: "TNotifyEvent"
type: "forum-thread"
url: "https://www.webforum.nu/amne/programmering/27822-tnotifyevent"
topic: "Programmering"
topic_url: "https://www.webforum.nu/amne/programmering"
author: "the proclaimer"
published: "2000-09-07T16:31:00.000Z"
updated: "2000-09-27T19:50:00.000Z"
replies: 4
views: 397
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/programmering/27822-tnotifyevent"
---

# TNotifyEvent

## #1 — the proclaimer, 2000-09-07T16:31Z

Hej!

Varför funkar inte denna kod???

Hur jag än gör så får jag inte TNotifyEvent (OnTimer) att funka.

Jag har gjort detta många gånger innan (men då med OnHint, OnAppDeactivate o.s.v.) och då har det funkat perfekt.

Har det möjligtvis något att göra med att jag inte har någon form till unit:en?

Någon som vet något bättre sätt än att använda TTimer?
(API funktionen Sleep låser ju bara processen)

\- - - - - - - - - - - - - - - - - - - - - - - - - - - - -

// Skalade koden lite för att göra den mer lättläst...

unit psclib;

interface

implementation

uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;

var MarqTimer : TTimer;

procedure Marquee;
begin
MarqTimer.Enabled := True;
MarqTimer.Interval := Delay;

end;

procedure DoMarq;
begin

end;

initialization
MarqTimer := TTimer.Create(nil);
MarqTimer.OnTimer := DoMarq;
end.

Permalänk: https://www.webforum.nu/p/27822

## #2 — jt, 2000-09-07T19:58Z

Du kanske inte skickat all kod men som koden ser ut nu så borde du väl anropa proceduren Marquee så timern startar.

Istället för sleep kan du skriva något som liknar detta.

var
  delay: Integer
begin
  delay := GetTickCount + 1000;
repeat
  Application.ProcessMessages;
until (GetTickCount \> Delay);
end;

Permalänk: https://www.webforum.nu/p/400339

## #3 — jt, 2000-09-07T21:06Z

Svarade nog lite snabbt innan.
Jag fick något som liknar detta att fungera. 

interface

implementation

uses
  extctrls, Classes;

  type
  TDummyObj = class(TObject)
     procedure OnTimer(Sender: TObject);
   end;

var
DummyObj: TDummyObj;
MarqTimer : TTimer;

procedure TDummyObj.OnTimer(Sender: TObject);
begin

end;

initialization
MarqTimer := TTimer.Create(nil);
DummyObj := TDummyObj.Create;
MarqTimer.OnTimer := DummyObj.OnTimer;

end.

Permalänk: https://www.webforum.nu/p/400340

## #4 — Starberg, 2000-09-27T12:17Z

Proclaimer:

Glöm jts råd. De exempel han skickade är inte bra.

Ditt problem har som sagt med TNotifyEvent att göra.

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

TNotifyEvent är en typ som är en referens till en procedur som tar emot parametern Sender som är av typen TObject.

Med en lättare förklaring så måste proceduren DoMarq se ut som följer:

Procedure DoMarq(Sender : TObject)
Begin
    //Your code  here
End;

Då skall det fungera!

\- Micke

Permalänk: https://www.webforum.nu/p/400341

## #5 — jt, 2000-09-27T19:50Z

Har du testat att din metod funkar?
Jag tror inte detta kommer att funka som Proclaimer hade tänkt. Eftersom han vill ha all kod i en unit utan något formulär. Som du mycket riktigt skriver så är problemet TNotifyEvent men problemet är att TNotifyEvent är en method pointer (of Object) vilket inte är samma sak som en vanlig procedure. Därför skapade jag ett dummy object så procedure blev en method pointer.

Har du verkligen lyckats deklarera din "Procedure DoMarq(Sender : TObject)" så skulle jag gärna vilja se hur du gjorde för att MarqTimer.OnTimer := DoMarq;.

Permalänk: https://www.webforum.nu/p/400342

---

Tråden på webben: https://www.webforum.nu/amne/programmering/27822-tnotifyevent
