![]() |
Kein Event vom Timer Win7
Ich erstelle einen Timer über MMSystem
Delphi-Quellcode:
procedure TimerProc(wTimerID: DWORD; Msg: DWORD;
dwUser: longint; dw1: longint; dw2: longint); stdcall; begin PostMessage(RenderHandle, MyTimerMessage, dw1, dw2); end;
Delphi-Quellcode:
RenderHandle := Classes.AllocateHWnd(RenderProc);
TimerID := timeSetEvent(25, 300, @TimerProc, RenderHandle, TIME_PERIODIC);
Delphi-Quellcode:
In Xp feuert der Timer richtig ab..
procedure RenderProc(var Msg: TMessage);
begin blabla..; end; Unter Win7 geht so gut wie gar nichts. System ist schnell genug daran liegt es nicht. Sieht so aus das mein Event in der RenderProc nicht richtig ankommt. Die Fenster scheinen das irgendwie zu blocken. Jemand ne ahnung was das sein könnte? EDIT: Es liegt an der Oberfläsche von Win7. Sobald ich die Visuellen Style ausschalte funktioniert das Event wieder. Was soll denn der Mist jetzt. :wall: Gibt es eine alternative die Funktioniert? gruss Emil |
Re: Kein Event vom Timer Win7
- stimmt das Fensterhandle (RenderHandle)?
- wurde der Timer (TimerID) erstellt? - wird TimerProc wirklich nicht aufgerufen? - wenn du RenderHandle an TimerProc übergibst, warum nutzt du dann eine böse globale Variable? - seit Vista sind viele Dinge verboten ... hast du von der Stelle, wo RenderProc aufgerufen wird, überhaupt das Recht an das Fenster eine Nachricht zu schicken? - uvw., also anwelcher Stelle genau wird diese Kette unterbrochen? daß am Ende nichts ankommt sagt ja nichts darüber aus, wo es genau hängt. |
Re: Kein Event vom Timer Win7
Zitat:
Habe erstmal alle rechte .. bis auf ein paar kleine. Die anderen Fragen sind schnell geklärt. Deaktiviere ich in der EXE unter Kompatibilität Visuelle Design und Desktopgestaltung funktioniert alles so wie es soll. Texte werden an mein Fenster (Caption) geschickt und in allen von mir erstellten Samples von C# -> VB funktioniert der Timer Ist die Desktopgestaltung an wird kein Text (SongTitel) mehr an mein fenster geschickt und mein Timer in der DLL macht ärger weil er kein Event mehr bekommt. Kannst du oder jemand anderer mir sagen wie das Fenster heißt welches Transparent dargestellt wird? Denke nur wenn ich das Handle habe funktioniert das wieder alles hier. Warum das Fenster kein Event empfängt ist mir schleierhaft. EDIT: Wenn die Fenster Transparent sind und ich sie aktiviere/deaktiviere dann geht das Rendern aber das ist kein zustand. Die gleichen Dateien nur nach XP kopiert laufen alle ohne probleme. gruss Emil |
Re: Kein Event vom Timer Win7
Application (Application.Handle) hat so ein
![]() |
Re: Kein Event vom Timer Win7
Ist jetzt nur eine Vermutung da ich schlecht hinter das "..." bei RenderProc schauen kann, aber rufst du in deiner RenderProc auch ordnungsgemäß DefWindowProc auf? Windows kann nämlich ziemlich seltsam reagieren, wenn der Aufruf fehlt.
|
Re: Kein Event vom Timer Win7
Zitat:
Sagte ja schon es läuft alles Hundertprozentig unter XP oder WIN7 wenn ich die Desktopgestaltung in der EXE deaktiviere. gruss Emil |
Re: Kein Event vom Timer Win7
Zitat:
Aber die Anwendungen sind nicht NonVcl Ich meinte eigentlich das Window welches Transparent ist .. Keine ahnung ob dieses eine eigene Class besitzt. gruss Emil |
Re: Kein Event vom Timer Win7
Also ich habe jetzt mal schnell eine Testanwendung geschrieben (Win7, AeroGlass aktiv) und wenn ich einen BreakPoint auf das "Write;" lege, dann hält der Debugger dort auch an und das wegen dem Timer-Event mehrmals.
Delphi-Quellcode:
type
TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private procedure RenderProc(var Msg: TMessage); public end; var Form1: TForm1; implementation {$R *.dfm} var RenderHandle: THandle; TimerID: Integer; procedure TimerProc(wTimerID: DWORD; Msg: DWORD; dwUser: longint; dw1: longint; dw2: longint); stdcall; begin PostMessage(RenderHandle, MyTimerMessage, dw1, dw2); end; procedure TForm1.RenderProc(var Msg: TMessage); begin if Msg.Msg = MyTimerMessage then Write; // << Breakpoint hier with Msg do Result := DefWindowProc(RenderHandle, Msg, WParam, LParam); end; procedure TForm1.FormCreate(Sender: TObject); begin RenderHandle := Classes.AllocateHWnd(RenderProc); TimerID := timeSetEvent(25, 300, @TimerProc, RenderHandle, TIME_PERIODIC); end; |
Re: Kein Event vom Timer Win7
@jbg
Ja so wird es funktionieren und so habe ich es auch.. bis auf eins ;) Ich übergebe mein Windowhandle an eine DLL und dort wird der Timer ausgeführt. Das ist komplett etwas anderes als wenn ich einen Timer auf meine Form lege die feuert immer Events solange wie ich innerhalb der Form bleibe. Trotzdem Danke ! :) gruss Emil |
Re: Kein Event vom Timer Win7
Frage aus dem Netz.
Zitat:
Hab noch nichts gefunden was da weiter hilft. GEhört zum selben Thema um überhaupt mal feststellen zu können ob das Fenster eine Message erhält! Zitat:
gruss Emil |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:49 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