Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Button Click aus VCL-Komponente heraus (https://www.delphipraxis.net/174333-button-click-aus-vcl-komponente-heraus.html)

Ookami 17. Apr 2013 20:00

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:
 
        protected
           procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); Override;
         public
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.

Danke schon mal für eure Bemühungen.

Bummi 17. Apr 2013 21:02

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:
  procedure TMyScollBox.PanelMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
   begin
     ....
   end;
   
   .......
   constructor TMyScollBox.Create(AOwner:TComponent);
      begin
       ......
       FMyPanel.OnMouseUp:=PanelMouseUp;
      end;
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.

Ookami 17. Apr 2013 21:38

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

Bummi 17. Apr 2013 21:53

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.

Ookami 17. Apr 2013 22:35

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

Bummi 17. Apr 2013 22:48

AW: Button Click aus VCL-Komponente heraus
 
immer gerne ...:thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:24 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz