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/)
-   -   Delphi Neue Komponete mit Canvas, KeyPress und Click.... (https://www.delphipraxis.net/25391-neue-komponete-mit-canvas-keypress-und-click.html)

Der_Ventilator 5. Jul 2004 21:41


Neue Komponete mit Canvas, KeyPress und Click....
 
HI

Ich hab die Suchfunktion genutzt, das hat mir aber nit wirklich weitergeholfen; also:

Ich möchte eine neue Komponente entwickeln.
Diese Komponente benötigt folgendes:

- Sie muss den Fokus erhalten können und dann auf Tastendrücke reagieren können
- Sie benötigt eine Zeichenfläche
- Sie muss auf Mausklicke (Links, Rechts, Doppelt) und MouseMove/Enter reagieren können


Es wird eine Art Listbox, die etwas schöner aussehen soll (z.B die Darstellungsart und die Scrollbars)

Von welcher Komponente muss ich die ableiten?

Ich hab das mit TScrollingWinControl probiert, aber das funktioniert nicht mit der Vererbung des entsprechenden Events:

[Warnung] : Methode 'KeyDown' verbirgt virtuelle Methode vom Basistyp 'TWinControl'


Delphi-Quellcode:

type
  TGLKeyDownEvent = procedure (Sender: TObject; var Key: Word;
                    Shift: TShiftState) of object;

type
  TScrollingWinControl1 = class(TScrollingWinControl)
  private
    { Private-Deklarationen }
  protected
    { Protected-Deklarationen }
    procedure KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
  public
    { Public-Deklarationen }
  published
    { Published-Deklarationen }
   property OnKeyDown : TSliKeyDownEvent read FOnKeyDown write FOnKeyDown;
  end;


implementation

   
procedure TGl.KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  inherited;
  If Assigned(FOnKeyDown) then
    FOnKeyDown(self, Key, Shift);
end;
Wie muss ich das abändern, dass es wie beschrieben funktioniert?

Ich hab von Verebung nicht viel Ahnung, mein bescheidenes Wissen kommt aus dem wenig hilfreichen Doberez Delphi 7 Grundlagen und Profiwissen.

Vielen Dank im Voraus.

Niko 5. Jul 2004 22:03

Re: Neue Komponete mit Canvas, KeyPress und Click....
 
Hi,

grundsätzlich ist TScrollingWindow als Vorfahre nicht verkehrt, wenn du aber auch die Scrollbars verändern möchtest, wirst du diese sowieso selbst Zeichnen müssen und leitest dann besser von TCustomControl ab, zumal dieses die Methode Paint besitzt und damit das Zeichnen des Fensterinhalts einfacher wird.


Möchtest du das Event OnKeyDown für Nutzer deiner Komponente zugänglich machen, schreibst du einfach
Delphi-Quellcode:
// ...
published
  { Published-Deklarationen }
  property OnKeyDown;
end;
Extra aufrufen musst du OnKeyDown nicht, da das bereits von der Vorfahrklasse erledigt wird.

Wenn du zusätzlich auch noch in der Komponente auf den Tastendruck reagieren willst, musst du die Methode KeyDown überschreiben, das heißt bei deiner Klassendeklaration fehlt noch die Anweisung override hinter KeyDown.


Zitat:

Zitat von Der_Ventilator
Ich hab von Verebung nicht viel Ahnung, mein bescheidenes Wissen kommt aus dem wenig hilfreichen Doberez Delphi 7 Grundlagen und Profiwissen.

Ich finde zumindest die Ausgabe für Delphi 2 nicht schlecht.

Der_Ventilator 9. Jul 2004 15:31

Re: Neue Komponete mit Canvas, KeyPress und Click....
 
Zitat:

Zitat von Niko
grundsätzlich ist TScrollingWindow als Vorfahre nicht verkehrt, wenn du aber auch die Scrollbars verändern möchtest, wirst du diese sowieso selbst Zeichnen müssen und leitest dann besser von TCustomControl ab, zumal dieses die Methode Paint besitzt und damit das Zeichnen des Fensterinhalts einfacher wird.

Danke
Ok, dann mach ich das damit.

Zitat:

Zitat von Niko
Ich finde zumindest die Ausgabe für Delphi 2 nicht schlecht.

Ich bezog mich auf den Vererbungssteil, weil das Beispiel in diesem Buch eine andere Komponetenart beschrieben hat

SirThornberry 9. Jul 2004 15:58

Re: Neue Komponete mit Canvas, KeyPress und Click....
 
Und wie stellt man es jetzt an das die Komponente auch den Focus bekommt?

TheDoctor 9. Jul 2004 20:35

Re: Neue Komponete mit Canvas, KeyPress und Click....
 
Hi,


die lösung lautet:

Delphi-Quellcode:
constructor TIrgendwas.Create(AOwner: TComponent);
begin;
  inherited Create(AOwner);
  TabStop := true; //<- Das hier ist wichtig - sonst nimmt es keinen Focus über z.B. die Tabtaste an :)
end;

SirThornberry 10. Jul 2004 07:55

Re: Neue Komponete mit Canvas, KeyPress und Click....
 
Thx, das habsch schon seit ewigkeiten gesucht


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:22 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