AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Button Click aus VCL-Komponente heraus

Ein Thema von Ookami · begonnen am 17. Apr 2013 · letzter Beitrag vom 17. Apr 2013
Antwort Antwort
Benutzerbild von Ookami
Ookami

Registriert seit: 20. Nov 2009
Ort: Baden Württemberg
77 Beiträge
 
Delphi 2009 Architect
 
#1

Button Click aus VCL-Komponente heraus

  Alt 17. Apr 2013, 21:00
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.
Wolfgang
Grüße und Danke
Wolfgang
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#2

AW: Button Click aus VCL-Komponente heraus

  Alt 17. Apr 2013, 22:02
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.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von Ookami
Ookami

Registriert seit: 20. Nov 2009
Ort: Baden Württemberg
77 Beiträge
 
Delphi 2009 Architect
 
#3

AW: Button Click aus VCL-Komponente heraus

  Alt 17. Apr 2013, 22:38
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
Wolfgang
Grüße und Danke
Wolfgang
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#4

AW: Button Click aus VCL-Komponente heraus

  Alt 17. Apr 2013, 22:53
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.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von Ookami
Ookami

Registriert seit: 20. Nov 2009
Ort: Baden Württemberg
77 Beiträge
 
Delphi 2009 Architect
 
#5

AW: Button Click aus VCL-Komponente heraus

  Alt 17. Apr 2013, 23:35
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
Wolfgang
Grüße und Danke
Wolfgang
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#6

AW: Button Click aus VCL-Komponente heraus

  Alt 17. Apr 2013, 23:48
immer gerne ...
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:16 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