![]() |
Button Click aus VCL-Komponente heraus
Hallo Gemeinde,
ich habe eine Komponente, die von einer TScrollbox abgeleitet wird. Diese enthält auch ein Panel. Jetzt möchte ich gerne auf einen Mausklick auf das Panel reagieren. Dummerweise aber habe ich wieder mal einen Blackout, wie das zu realisieren sei. Mausklick, genauer gesagt MouseUp funktioniert. Aber eben nur auf der Basisklasse TScrollbox. Wenn ich auf das Panel klicke, passiert natürlich nichts. Ich habe mich auch schon mal mit dem Tutorial von S.Grabaum beschäftigt "Komponenten zur Laufzeit erstellen", möchte es auch schon mal lobend erwähnen. Aber irgendwie hab ich es damit nicht geschafft.
Code:
Große Frage nun, wie stelle ich es an, damit ich auf das Panel zugreifen kann. Ich muss die Information noch nicht mal nach aussen tragen. Hauptsache die Info dringt bis irgendwo in die Scrollbox durch.protected procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); Override; public Danke schon mal für eure Bemühungen. |
AW: Button Click aus VCL-Komponente heraus
Im einfachen Fall weist Du dem Panel ein OnMouseUp-Event zu welches Du in Deiner Scollboxableitung deklariert/implementiert hast.
so als PseudoCode
Delphi-Quellcode:
Oder Du legst in der Komponente noch eine WrapperKlasse für Dein Panel an und implementierst dort eine Behandlung von WM_LButtonUp und reichst diese ganze durch an Deine Komponente.
procedure TMyScollBox.PanelMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin .... end; ....... constructor TMyScollBox.Create(AOwner:TComponent); begin ...... FMyPanel.OnMouseUp:=PanelMouseUp; end; |
AW: Button Click aus VCL-Komponente heraus
Danke Bummi,
gesegnet seien die, die Lesen können. Ich hatte die Lösung in der Hand, die wird dort auch so beschrieben. Ich hab's nur einfach nicht richtig umgesetzt. Mittlerweile läufts. Wollte es gerade mitteilen. Durch deine Antwort bin ich jetzt aber neugierig geworden. Thema Wrapper-Klasse hatte ich bislang noch nicht. Hast du zufällig ein Snippet zur Hand? Würde mich dem Thema gerne widmen. Zumindest der Begriff ist mir schon öfter zu Ohren gekommen. Danke |
AW: Button Click aus VCL-Komponente heraus
Du machst einfach Dinge sichtbar die nicht sichtbar sind, oder implementiert neue Methoden ohne gleich eine Komponente schreiben zu müssen. Das Prinzip ist dasselbe. Ein Beispiel wäre hier ein Panel auf dessen Canvas man normalerweise nicht direkt zugreifen kann und welches kein OnPaintEvent hat.
Wenn man das ganze zwischendurch doch mal brauchen sollte kann man sowas machen:
Delphi-Quellcode:
unit Unit6;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls; type TPanel = Class(ExtCtrls.TPanel) private FPaint: TNotifyEvent; protected Procedure Paint; override; public Property Canvas; Property OnPaint: TNotifyEvent read FPaint Write FPaint; End; TForm6 = class(TForm) Panel1: TPanel; procedure FormCreate(Sender: TObject); private procedure PanelPaint(Sender: TObject); { Private-Deklarationen } public { Public-Deklarationen } end; var Form6: TForm6; implementation {$R *.dfm} { TPanel } procedure TPanel.Paint; begin inherited; if Assigned(FPaint) then FPaint(self); end; procedure TForm6.PanelPaint(Sender: TObject); begin TPanel(Sender).Canvas.Ellipse(0, 0, 100, 100); end; procedure TForm6.FormCreate(Sender: TObject); begin Panel1.OnPaint := PanelPaint; end; end. |
AW: Button Click aus VCL-Komponente heraus
Super,
danke erst mal für das Snippet. Und ich hab mir so 'nen Kopf gemacht, wie schwierig das denn wieder wird. Habs sogar auf Anhieb verstanden. Danke dir, war echt Klasse |
AW: Button Click aus VCL-Komponente heraus
immer gerne ...:thumb:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:43 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