![]() |
TNotifyEvent
also
ich erstelle mit dynamisch nen timer, und möchte dem OnTimer jetzt eine procedure zuweisen wie geht das? ich hab folgende sachen probiert(nur damit ihr net danek ich hätte nix gemacht *ggg*):
Delphi-Quellcode:
wie geht das?
procedure OnTimer(Sender: TObject);
Timer.OnTimer:=OnTimer; Timer.OnTimer:=OnTimer^; Timer.OnTimer:=@OnTimer; Timer.OnTimer:=TNotifyEvent(OnTimer); Timer.OnTimer:=TNotifyEvent(OnTimer^); Timer.OnTimer:=TNotifyEvent(@OnTimer); Timer.OnTimer:=TNotifyEvent(OnTimer(Timer)); Timer.OnTimer:=TNotifyEvent(OnTimer(Timer)^); Timer.OnTimer:=TNotifyEvent(OnTimer^(Timer)); Timer.OnTimer:=TNotifyEvent(@OnTimer(Timer)); |
Re: TNotifyEvent
Wichtig ist nur, das MyOnTimer mit zum TForm1 gehört.
Delphi-Quellcode:
uses ExtCtrls;
procedure TForm1.FormCreate(Sender: TObject); var timer : TTimer; begin Timer := TTimer.Create(self); Timer.OnTimer := MyOnTimer; end; procedure TForm1.MyOnTimer(Sender : TObject); begin // Do something.... end; |
Re: TNotifyEvent
hmm, nee, das is ne konsolenanwendung...
was kann/muss/soll ich da statt der form1 nehmen? ich hatte biher als owner den timer selbst angegeben....muss da dann die Application rein??? |
Re: TNotifyEvent
Hi,
TNotifyEvent ist eine procedure of object, d.h., dass sie darauf "ausgelegt" ist, in einer Klasse zu sein. Sie beinhaltet nämlich noch den versteckten "Self" Paramter. Du hast folgende Möglichkeiten:
mfG mirage228 |
Re: TNotifyEvent
Guckst du hier:
![]() Aber eine Suche im Forum nach ![]() |
Re: TNotifyEvent
Macht ein Timer in einer Console überhaupt Sinn? Bei der Delphistandard Konsolenanwendung existiert doch gar keine Nachrichtenschleife in dem sinne. also funktioniert der Timer überhaupt in eine Konsolenanwendung? Die Callbackmessage geht ja schon an den Timer aber die messages kommen ja dann eigentlich von der Anwendungs-Nachrichtenschleife oder lieg ich da total falsch?
|
Re: TNotifyEvent
hmm, scheint wirklich so....
kannich wirklich keinen timer nehmen? gibt es sowas wie keyhit? oder KeyPressed? |
Re: TNotifyEvent
Zitat:
Mit Windows.SetTimer kannst du eine Prozedur angeben, die anstatt einer WM_TIMER Message aufgerufen werden soll. Den Timer solltest du dann aber auch mit KillTimer wieder freigeben. @Luckie: Zitat:
|
Re: TNotifyEvent
Hallo zusammen,
ich habe jetzt schon alles gelesen und auch in der Suche mich bemüht etwas zu finden aber irgendwie finde ich nicht das passende womit ich persönlich weiterkomme. Also ich habe folgendes problem. Ich habe eine Konsolenanwendung welche immer laufen muss. Also bilde ich eine Endlosschleife. In dieser Endlosschleife würde ich gerne auf den OnTimer reagieren. Dies klappt aber leider nicht! Dieser wird immer ignoriert! Das auslagern in einem Thread habe ich auch probiert klappt aber bei mir leider auch nicht?!! Warum keine Ahung........ Hier mal einen Auszug meines Sources. Erster Versuch.....
Delphi-Quellcode:
program Project1;
{$APPTYPE CONSOLE} uses SysUtils,QExtCtrls; var aTimer : TTimer; procedure aOnTimer(Sender:TObject); begin writeln('Test'); end; begin aTimer := TTimer.Create(nil); aTimer.Interval := 1*10*1000; aTimer.OnTimer := aOnTimer; aTimer.Enabled := True; sleep(0); while true do begin sleep(0); end; end. Der zweite Versuch mit Luckie Code............
Delphi-Quellcode:
Danke im voraus für Vorschläge!!
program Project1;
{$APPTYPE CONSOLE} uses SysUtils, ExtCtrls, Classes; type PMethodPointer = ^TMethodPointer; TMethodPointer = packed record pMethod: Pointer; pObject: TObject; end; var T : TTimer; p : TMethodPointer; i : Integer; procedure NotifyEvent(Self: TMethodPointer; Sender: TObject); begin writeln('yes'); beep; end; begin T := TTimer.Create(nil); T.Interval := 200; // -> löst alle 200 ms das OnTimer-Event aus try p.pMethod := @NotifyEvent; p.pObject := nil; T.OnTimer := TNotifyEvent(p); T.Enabled := true; // aktiviert den Timer writeln('Warte auf Event: '); for i := 1 to 5 do begin sleep(500); writeln('warte ' + inttostr(i * 500) + 'ms...'); NotifyEvent(p, T); end; while true do begin sleep(0); end; T.Enabled := false; // deaktiviert den Timer finally T.Free; end; end. |
Re: TNotifyEvent
Wie soll denn da was reagieren, wenn du dein Progarmm mit der Endlosschleife beschäftigst?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:47 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz