AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TNotifyEvent

Ein Thema von glkgereon · begonnen am 16. Jan 2005 · letzter Beitrag vom 7. Jun 2005
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#1

TNotifyEvent

  Alt 16. Jan 2005, 12:10
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:
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));
wie geht das?
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
Nightshade

Registriert seit: 7. Jan 2003
Ort: Menden
192 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: TNotifyEvent

  Alt 16. Jan 2005, 12:22
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;
Christian
Killing for peace is like fucking for virginity

Nightshade
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#3

Re: TNotifyEvent

  Alt 16. Jan 2005, 12:25
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???
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#4

Re: TNotifyEvent

  Alt 16. Jan 2005, 12:30
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:
  • Du packst Sie als (class)-Procedure in eigene Klasse
  • Du machst es so:
    Delphi-Quellcode:
    procedure MyOnTimer(Self, Sender : TObject);
    begin
      // Do something....
    end;

    var
      Event: TNotifyEvent;
    begin
      TMethod(Event).Code := @MyOnTimer;
      TMethod(Event).Data := nil; // Self in der procedure ist dann = nil!
      // ...
      Timer.OnTimer := Event;
    end.

mfG
mirage228
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

Re: TNotifyEvent

  Alt 16. Jan 2005, 12:45
Guckst du hier: http://www.luckie-online.de/Delphi/S...onsole%20.html

Aber eine Suche im Forum nach Hier im Forum suchenTimer Konsole wäre auch nicht falsch gewesen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#6

Re: TNotifyEvent

  Alt 16. Jan 2005, 12:48
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?
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#7

Re: TNotifyEvent

  Alt 16. Jan 2005, 13:24
hmm, scheint wirklich so....

kannich wirklich keinen timer nehmen?

gibt es sowas wie keyhit? oder KeyPressed?
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#8

Re: TNotifyEvent

  Alt 16. Jan 2005, 16:48
Zitat von glkgereon:
gibt es sowas wie keyhit? oder KeyPressed?
Du solltest dich mit den Windows.XxxConsoleXxx Funktionen mal auseinandersetzen.

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:
Guckst du hier: ...
War das ein anderes Delphi, oder warum deklarierst du TMethodPointer wenn es bereits in System.pas ein TMethod gibt?
  Mit Zitat antworten Zitat
RalfOne

Registriert seit: 23. Jul 2004
31 Beiträge
 
Delphi 7 Professional
 
#9

Re: TNotifyEvent

  Alt 7. Jun 2005, 11:46
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:
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.
Danke im voraus für Vorschläge!!
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#10

Re: TNotifyEvent

  Alt 7. Jun 2005, 11:52
Wie soll denn da was reagieren, wenn du dein Progarmm mit der Endlosschleife beschäftigst?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:25 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz