![]() |
Event wird nicht ausgelöst ?!
Hallo,
ich wollte mir eine eigenen kleine komponente basteln. Hierfür bin ich nach dem tutorial von dsdt vorgegangen (Link: ![]() Meine unit schaut wie folgt aus:
Delphi-Quellcode:
Wenn ich die kompo dann auf eine forum zieh und im onchange z.b.
unit ClipBoarder;
interface uses SysUtils, Classes, Messages, Windows; type TChangeEvent = procedure(Sender : TObject ) of Object; TClipBoarder = class(TComponent) private CChangeEvent: TChangeEvent; procedure ClipChange(var content: TMessage); message WM_DRAWCLIPBOARD; { Private declarations } protected { Protected declarations } public { Public declarations } published property OnChange : TChangeEvent read CChangeEvent write CChangeEvent; { Published declarations } end; procedure Register; implementation procedure Register; begin RegisterComponents('Clipboarder', [TClipBoarder]); end; procedure TClipBoarder.ClipChange(var content: TMessage); begin OnChange(self); end; end.
Delphi-Quellcode:
mache, dann passiert nichts.
ShowMessage('changed');
Was mach ich falsch? MfG - Ghost007 |
Re: Event wird nicht ausgelöst ?!
Moin Christian,
das funktioniert nicht, weil die Message nur an die Fenster geschickt wird, die sich als Clipboardviewer registriert haben. Schau Dir mal die Doku dazu im MSDN an ( ![]() |
Re: Event wird nicht ausgelöst ?!
Zitat:
dafür sorge ich schon ;) im form create event der form über folgenden befehl:
Delphi-Quellcode:
MfG - Ghost007
SetClipboardViewer(self.Handle);
P.S.: Das event wird trotzdem nicht ausgelöst. |
Re: Event wird nicht ausgelöst ?!
Moin!
Überschreib lieber CreateWnd um auch das neuerstellen deines Formulars im Hintergrund durch VCL Properties mit zu bekommen. Ich vermute eher, dass dein im FormCreate registrierte Fensterhandle gar nicht mehr gültig ist. MfG Muetze1 |
Re: Event wird nicht ausgelöst ?!
Hallo,
du setz dein Form als Clipboardviewer hast aber dein Change-Event in einer Componente. So geht das nicht. Entweder alles im Form oder wie Muetze1 geschrieben hat, in der Compo... |
Re: Event wird nicht ausgelöst ?!
Zitat:
das komisch ist nur, wenn ich das ganze ohne komponente mach, sprich die auslöser procedure einfach in die normale form unit reinklatsche, geht es :( |
Re: Event wird nicht ausgelöst ?!
Moin!
Sorry, hatte dein Beitrag nicht richtig verarbeitet. Durch deine Aussage mit der Komponente wurde mir dies klar, ich dachte du implementierst es in einem Formular. Zu dem Problem: Die VCL empfängt die Botschaften auf dem Fenster aber sie leitet nicht alle an ihre Clients weiter. Dies macht sie nur mit besonderen Botschaften, manche werden sogar explizit von der VCL zu den internen Notifier (CN_XXX) oder Messages (CM_XXX) umgesetzt. Deine Botschaft gehört mit zu den nicht weiter geleiteten. Lösung: Bau dir eine Komponente mit eigenem Fensterhandle und dann bekommst du die Botschaft direkt. Also Leite von TWinControl ab und registriere dich in deiner Komponente selbst als Empfänger und dann bekommst du auch die Botschaft. MfG Muetze1 |
Re: Event wird nicht ausgelöst ?!
Zitat:
MfG - Ghost007 //Edit: Oder meinst du mit registrieren, das einklicken in die clipboardviewer chain ? |
Re: Event wird nicht ausgelöst ?!
Ich glaube dir fehlt noch das Verständnis.
Mit
Delphi-Quellcode:
Sagst du das Self.Handle eine Message bekommen soll. Self.Handle ist aber in diesem Fall dein Form da Self ja für die Instanz des Forms steht und dieses bekommt die Nachricht auch.
SetClipboardViewer(self.Handle);
Wenn du willst das deine Komponente die Nachricht bekommt darfst du nicht das Handle des Forms angeben sondern musst ein Handle übergeben welches zu deiner Komponente gehört. |
Re: Event wird nicht ausgelöst ?!
Das hab ich spätestens nach dem beitrag von Muetze1 schon verstanden, nur welches handle geb ich der funktion dann ?
Ist meine erste kompo kenne mich damit noch nicht so aus :oops: MfG - Ghost007 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:02 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