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.
------------------
/Per Skoglund
jtMedlem sedan juni 2000350 inlägg 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;
jtMedlem sedan juni 2000350 inlägg 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.
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
jtMedlem sedan juni 2000350 inlägg 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;.