![]() |
MainForm-Messages in Komponente hooken
Hallo,
in dem ![]() Nun wollt ich von einer Komponente aus, die MainForm hooken (genauer gesagt, auf das Minimieren reagieren). Nur leider bekomm ich dabei immer einen EAccessViolation. der Code in der Komponente schaut so aus:
Delphi-Quellcode:
Was mach ich falsch? - bzw. Wie geht es richtig?
unit component1;
interface uses Forms, SysUtils, Classes, Messages, Controls, Dialogs, Windows; type Tcomponent1 = class(TComponent) private pOldEdProc : TWndMethod; procedure EdProc(var Message: TMessage); { Private-Deklarationen } protected { Protected-Deklarationen } public constructor Create(AOwner: TComponent); override; { Public-Deklarationen } published { Published-Deklarationen } end; procedure Register; implementation constructor Tcomponent1.Create(AOwner: TComponent); begin inherited Create(AOwner); pOldEdProc := Application.MainForm.WindowProc; Application.MainForm.WindowProc := EdProc; end; procedure Tcomponent1.EdProc(var Message: TMessage); begin pOldEdProc(Message); // alten Message-Handler rufen // Eigene Funktionalität with Message do case Msg of WM_Size: If Message.WParam = SIZE_MINIMIZED then ShowMessage('minimiert'); end; end; procedure Register; begin RegisterComponents('extras', [Tcomponent1]); end; end. |
Re: MainForm-Messages in Komponente hooken
Hallo Helmi,
wie wäre es so...
Delphi-Quellcode:
Gruss
uses Classes, Dialogs, AppEvnts;
type TMyComponent = class(TComponent) private { Private-Deklarationen } AppEvents:TApplicationEvents; procedure ApplicationEventsMinimize(Sender: TObject); protected { Protected-Deklarationen } public { Public-Deklarationen } constructor create(AOwner: TComponent); override; destructor destroy; override; published { Published-Deklarationen } end; implementation constructor TMyComponent.create(AOwner: TComponent); begin inherited Create(AOwner); AppEvents:=TApplicationEvents.Create(AOwner); AppEvents.OnMinimize:=ApplicationEventsMinimize; end; destructor TMyComponent.destroy; begin AppEvents.free; inherited; end; procedure TMyComponent.ApplicationEventsMinimize(Sender: TObject); begin showmessage('minimiert'); end; Thorsten |
Re: MainForm-Messages in Komponente hooken
Hallo,
danke für den Tip. Nur würd ich gerne das Minimieren beeinflussen. Also so ähnlich wie CoolTrayIcon |
Re: MainForm-Messages in Komponente hooken
Sehe gerade, es geht noch einfacher...
Delphi-Quellcode:
Gruss
uses Forms, Classes, Dialogs;
type TMyComponent = class(TComponent) private { Private-Deklarationen } procedure ApplicationMinimize(Sender: TObject); protected { Protected-Deklarationen } public { Public-Deklarationen } constructor create(AOwner: TComponent); override; published { Published-Deklarationen } end; implementation constructor TMyComponent.create(AOwner: TComponent); begin inherited Create(AOwner); Application.OnMinimize:=ApplicationMinimize; end; procedure TMyComponent.ApplicationMinimize(Sender: TObject); begin showmessage('minimiert'); end; Thorsten |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:25 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