Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Wie wird die botschaft wm_Timer abgefangen in einer klasse ? (https://www.delphipraxis.net/72911-wie-wird-die-botschaft-wm_timer-abgefangen-einer-klasse.html)

mimi 9. Jul 2006 09:25


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:
constructor TPaint.Create(WinHandle:Hwnd);
begin
  SetTimer(WinHandle, Integer(self), 1000, @TimeCallBack);
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
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.

Khabarakh 9. Jul 2006 09:33

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:

pTimerFunc
[in] Pointer to the function to be notified when the time-out value elapses. For more information about the function, see TimerProc. If lpTimerFunc is NULL, the system posts a WM_TIMER message to the application queue. The hwnd member of the message's MSG structure contains the value of the hWnd parameter.

mimi 9. Jul 2006 09:48

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 :(

Khabarakh 9. Jul 2006 10:08

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:
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]Das Handle beim SetTimer-Aufruf und damit auch den Konstruktor-Parameter kannst du weglassen, wenn du beim Callback bleibst.
[/add]

mimi 9. Jul 2006 10:20

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:
procedure TForm1.BitBtn1Click(Sender: TObject);
var
  Paint:TPaint;
begin
       
  Paint:=TPaint.Create(Handle);
  Label18.Caption:=IntToStr(Paint.test);
end;
zu testzwekchen wollte ich einfach nur ein variable hochzählen.

Delphi-Quellcode:
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
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)


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:24 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