![]() |
Wie wird die botschaft wm_Timer abgefangen in einer klasse ?
Hallo,
ich möchte gerne den timer aus der mmsystem in meiner eignen klasse verwenden. ich habe es bis jetzt so gemacht doch leider geht das nicht:
Delphi-Quellcode:
da ich nicht weiß wo ich hier am besten WM_Timer abfragen kann die suche ergab für mich nichts brauchbares.... habe unter den begrif SetTimer gesucht... und WM_Timer
constructor TPaint.Create(WinHandle:Hwnd);
begin SetTimer(WinHandle, Integer(self), 1000, @TimeCallBack); ich hoffe jemmand kann mir hier weiter helfen: Mein ziel ist den timer aus der mmsystem in meiner eignen klasse zu defnieren und eine procdure soll aus dieser klasser heraus aufgerufen werden. |
Re: Wie wird die botschaft wm_Timer abgefangen in einer klas
Wozu willst du denn bitte WM_TIMER abfangen, du hast du schon eine Callback-Methode definiert :gruebel: ?
Zitat:
|
Re: Wie wird die botschaft wm_Timer abgefangen in einer klas
weil das mit der callback funktion nicht geht, da kann ich nicht auf die sachen der TPaint klasse zugreifen... und das möchte ich ja.
ich möchte ja genre auf die TPaintklasse zugreifen d.h. ich defniere eine TPaint klasse z.b. in form beim erstellen der klasse soll der timer installsiert werden und anschließnd soll eine interger variable zum testen hochgezählt werden und das geht leider nicht, weil es ein pointer sein MUSS :( |
Re: Wie wird die botschaft wm_Timer abgefangen in einer klas
Ehrlich gesagt, hätte ich dein Problem nicht schon geahnt, hätte ich kein einziges Wort deines Postings verstanden :roll: .
Der Code scheint wohl nicht von dir zu sein, schließlich steckt dort schon die Lösung drin: die (etwas zweckmissbrauchte) Timer-ID.
Delphi-Quellcode:
[add]Das Handle beim SetTimer-Aufruf und damit auch den Konstruktor-Parameter kannst du weglassen, wenn du beim Callback bleibst.
procedure MeepCallback(hwnd: HWND; uMsg: Cardinal; idEvent: Pointer; dwTime: DWORD); stdcall;
var PaintDingens: TPaint; begin PaintDingens := TPaint(idEvent); // hier kannst du nun auf das Paint-Objekt zugreifen, das mit Integer(self) übergeben wurde. end; [/add] |
Re: Wie wird die botschaft wm_Timer abgefangen in einer klas
leider geht das immer noch nicht so wie ich es habe möcht hier mal etwas code evlt. hilft das um mein problem zu verstehen:
Delphi-Quellcode:
zu testzwekchen wollte ich einfach nur ein variable hochzählen.
procedure TForm1.BitBtn1Click(Sender: TObject);
var Paint:TPaint; begin Paint:=TPaint.Create(Handle); Label18.Caption:=IntToStr(Paint.test); end;
Delphi-Quellcode:
ich hoffe du siehst jetzt worauf ich hinaus möchte... und warum ich dachte das das mit wm_Timer gehen könnte(Was ürbgins auch nicht geht)
procedure MeepCallback(hwnd: HWND; uMsg: Cardinal; idEvent: Pointer; dwTime: DWORD); stdcall;
var PaintDingens: TPaint; begin PaintDingens := TPaint(idEvent); inc(PaintDingens.test); // hier kannst du nun auf das Paint-Objekt zugreifen, das mit Integer(self) übergeben wurde. end; constructor TPaint.Create(WinHandle:Hwnd); begin SetTimer(WinHandle, Integer(self), 1000, @MeepCallback); end; // Create |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:52 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