Vererbung von Click; und MouseDown; Fail bei MouseDown

Rund um die LCL und andere Komponenten
Antworten
schuermr
Beiträge: 2
Registriert: Mo 15. Aug 2022, 12:24

Vererbung von Click; und MouseDown; Fail bei MouseDown

Beitrag von schuermr »

Hallo, liebe Gemeinde,
ich bin erst seit heute dabei, um eine Frage zu stellen. Bisher habe ich hier im Forum immer nur lesend teilgenommen und oft hilfreiche Hinweise erhalten. Ich selbst darf mich als erfahrenen Delphi-Programmierer bezeichnen bin seit Turbopascal Ver. 1.0 für DOS (80er Jahre) dabei und mit Pascal/Delphi und nun Lazarus alt (bin nun 63:-) geworden. Habe viel mit Datenbanken gearbeitet und will mich nun auf meine alten Tage in die Komponentenprogrammierung einarbeiten. Mit den Eigenheiten der IDE von Lazarus betr. Bibliothek, Packages etc. bin ich nicht wirklich vertraut.

Zum Problem:
type

TTest = class(TCustomControl)
private
protected
public
procedure click; override;
procedure MouseDown; override;
published
end;

Vorstehende (Rumpf-)Deklaration lässt sich bei mir nicht kompilieren: Während "Click" klaglos vom Compiler akzeptiert wird, lehnt er MouseDown mit der Meldung ab, dass es hierzu keine überschreibbare Vorgänger-Methode gäbe (Error: There is no method in an ancestor class to be overridden: "MouseDown;" ). Merkwürdig, zumal meine Nachforschungen erben haben, dass sowohl "Click" als auch "Mousedown" als virtual in TControl deklariert werden. Und TControl ist in der Ahnenreihe von TCustomControl. Was läuft da schief?

PS: Ich verwende Lararus 2.0.12, FPC 3.2.0 und habe einige vorgefertigte Komponenten mit eingebunden (z. B. EpicTimer)

Benutzeravatar
theo
Beiträge: 10468
Registriert: Mo 11. Sep 2006, 19:01

Re: Vererbung von Click; und MouseDown; Fail bei MouseDown

Beitrag von theo »

Die Deklaration muss schon übereinstimmen.
So sollte es gehen:

Code: Alles auswählen

procedure MouseDown(Button: TMouseButton; Shift:TShiftState; X,Y:Integer); override;   

schuermr
Beiträge: 2
Registriert: Mo 15. Aug 2022, 12:24

Re: Vererbung von Click; und MouseDown; Fail bei MouseDown

Beitrag von schuermr »

Tatsache, läuft! Vielen Dank!

Irgendwie komme ich damit noch nicht so gut klar, wann man die Parameter der Methode weglässt und wann nicht.

Nochmals Danke!

Benutzeravatar
theo
Beiträge: 10468
Registriert: Mo 11. Sep 2006, 19:01

Re: Vererbung von Click; und MouseDown; Fail bei MouseDown

Beitrag von theo »

schuermr hat geschrieben:
Mo 15. Aug 2022, 14:30
Irgendwie komme ich damit noch nicht so gut klar, wann man die Parameter der Methode weglässt und wann nicht.
Du musst die gar nie weglassen.
procedure Click ist ohne Parameter deklariert in TControl (Controls.pas)

Code: Alles auswählen

  protected
    // key and mouse
    procedure Click; virtual;     

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Vererbung von Click; und MouseDown; Fail bei MouseDown

Beitrag von wp_xyz »

Wenn du die Komponente so wie im 1. Beitrag deklariert hast, kannst du auf das Wort "MouseDown" mit gedrückter Ctrl-Taste klicken, und die IDE öffnet die Deklaration des Vorgängers. Dann siehst du genau, welche Argumente die Prozedur benötigt (geht übrigens auch bei Delphi).

Benutzeravatar
theo
Beiträge: 10468
Registriert: Mo 11. Sep 2006, 19:01

Re: Vererbung von Click; und MouseDown; Fail bei MouseDown

Beitrag von theo »

wp_xyz hat geschrieben:
Mo 15. Aug 2022, 15:13
Wenn du die Komponente so wie im 1. Beitrag deklariert hast, kannst du auf das Wort "MouseDown" mit gedrückter Ctrl-Taste klicken, und die IDE öffnet die Deklaration des Vorgängers. Dann siehst du genau, welche Argumente die Prozedur benötigt (geht übrigens auch bei Delphi).
Genau.
Ich mache meistens Rechtsklick -> "Finde Deklaration von MouseDown" Bzw. "Alt+Hoch". Das geht auch.
Gibt es eigentlich einen funktionalen Unterschied zw. "Alt+Hoch" und "Ctrl+Klick"?

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Vererbung von Click; und MouseDown; Fail bei MouseDown

Beitrag von wp_xyz »

theo hat geschrieben:
Mo 15. Aug 2022, 15:25
Gibt es eigentlich einen funktionalen Unterschied zw. "Alt+Hoch" und "Ctrl+Klick"?
Ich denke nicht. Gewöhnungssache. Das "Alt+Hoch" scheidet bei mir z.B. aus, weil ich immer mit dem klassischen Tastatur-Layout arbeite, und so hat sich das "Ctrl+Klick" eingebrannt.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Vererbung von Click; und MouseDown; Fail bei MouseDown

Beitrag von af0815 »

Man muss sich auch daran gewöhnen, das bei Lazarus (und fpc) ALLE Sorcen dabei sind. Und man wirklich überall sich die Deklarationen ansehen kann. Es gibt hier nichts, was aus kommerziellen Gründen versteckt wurde. Das sollte auch mal gesagt werden.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Antworten