![]() |
In Komponente Message vom Form abfangen
Hallo zusammen!
ich habe folgendes Problem: Ich schreibe an einer nicht visuellen Komponente, die irgendwie mitkriegen muss, wenn in dem ansonsten leeren Formular Tasten gedrückt werden. An die meisten Tasten komme ich ja, indem ich OnKeyDown/OnKeyUp "umbiege" (meinen Eventhandler reinschreiben und den alten bei Bedarf aufrufen), nur für Tab funktioniert das ja leider nicht. Normalerweise würde man jetzt die Message "CMDialogKey" abfangen, aber da komme ich so von der Komponente aus nicht ran. Eine mögliche Lösung wäre jetzt, das Formular von einem eigenen TForm-Nachfolger abzuleiten, der für diese Message ein Event bereitstellt. Aber solche Codeänderungen wollte ich eigentlich vermeiden. Gibts da irgendeine Lösung? ![]() mfg jakobwenzel |
Re: In Komponente Message vom Form abfangen
*push* :oops:
|
Re: In Komponente Message vom Form abfangen
Wenn du die WndProc umbiegst bekommst du garantiert alle Tastendrücke mit ;)
So in etwa: (Das beispiel ist jetzt für eine Progressbar, aber das musst du dann mit deinem Form machen ;) )
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, StdCtrls, xpman; type TForm1 = class(TForm) ProgressBar1: TProgressBar; Button1: TButton; procedure FormCreate(Sender: TObject); private { Private-Deklarationen } OldProgressWndProc: TWndMethod; procedure ProgressWndProc(var Msg: TMessage); public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} { TForm1 } procedure TForm1.ProgressWndProc(var Msg: TMessage); var dc: HDC; rect: TRect; begin OldProgressWndProc (Msg); if Msg.Msg = WM_xyz then // Auf irgendeine Nachricht (siehe msdn oder Luckie ^^) reagieren .... end; end; procedure TForm1.FormCreate(Sender: TObject); begin OldProgressWndProc := ProgressBar1.WindowProc; // alte merken ProgressBar1.WindowProc := ProgressWndProc; // wndproc umbiegen end; end. |
Re: In Komponente Message vom Form abfangen
Vielen Dank, funktioniert perfekt! :thumb:
|
Re: In Komponente Message vom Form abfangen
Wenn es viele Komponenten wären, dann wäre noch TApplicationEvent etwas für dich. Dadurch bekommst du dann alle Messages an dein Programm mit.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:18 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-2025 by Thomas Breitkreuz