Autor Beitrag
energie
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Mo 08.12.08 18:05 
Hallo Community!

Ich bin neu bei Delphi und habe gleich mal eine Frage zu den Mausereignissen.

Ich würde gerne eigene Mausereignisse für mein TForm festlegen, und zwar in einer extra Klasse CMouse.

Wenn diese Klasse geladen wird, soll sie die Mausereignisse belegen, dazu verwende ich im Konstruktor folgenden Code(wobei mw mein TForm ist):
ausblenden Delphi-Quelltext
1:
2:
3:
mw.OnMouseDown := CMouse.OnMouseDown;
mw.OnMouseUp   := CMouse.OnMouseUp;
mw.OnMouseMove := CMouse.OnMouseMove;

Im Interface von CMouse steht folgendes:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
protected
procedure OnMouseDown(
  Sender: TObject;
  Button: TMouseButton;
  Shift:  TShiftState;
  X, Y:   Integer
);
procedure OnMouseUp(
  Sender: TObject;
  Button: TMouseButton;
  Shift:  TShiftState;
  X, Y:   Integer
);
procedure OnMouseMove(
  Sender: TObject;
  Shift:  TShiftState;
  X, Y:   Integer
);

Die einzelnen Methoden tun im Moment gar nichts, sie sind aber definiert.

Ich dachte eigentlich, dass es so funktionieren müsse, aber Delphi gibt mir bei der Zuweisung im Konstruktor folgende Fehlermeldung:
ausblenden Delphi-Quelltext
1:
E2010 Inkompatible Typen: 'TMouseEvent' und 'Procedure'					


Wie kann ich also die Mausereignisse neu belegen?

MfG

Moderiert von user profile iconNarses: Code- durch Delphi-Tags ersetzt
Moderiert von user profile iconNarses: Topic aus Sonstiges (Delphi) verschoben am Mo 08.12.2008 um 21:21
Boldar
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1555
Erhaltene Danke: 70

Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
BeitragVerfasst: Mo 08.12.08 18:24 
Du musst wahrscheinlich explizit casten:

ausblenden Delphi-Quelltext
1:
2:
mw.OnMouseDown := Tmouseevent(CMouse.OnMouseDown);
...
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 08.12.08 18:31 
Nein, das ist nicht nötig, aber du kannst die Events nicht mit der Methode einer Klasse verknüpfen sondern nur mit den Methoden einer Instanz einer Klasse.
Zum Beispiel im Kontruktor deiner Klasse:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
constructor CMouse.Create;
begin
  mw.OnMouseDown := OnMouseDown;
    // oder Self.OnMouseDown
    // aber nicht CMouse.OnMouseDown
end;
Deine nicht gerade normale Typenbezeichnung fördert natürlich solche Fehler, eigentlich werden Typen und Klassen immer mit T am Anfang gekennzeichnet und Instanzen davon ohne dieses T. So bin ich bei CMouse zunächst davon ausgegangen, dass es eine Variable vom Typ TCMouse sei...

Deine abenteuerliche Codeformatierung ist ja nicht so wichtig solange der Code nicht veröffentlicht werden soll ;-).
energie Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Mo 08.12.08 21:53 
Sehr vielen Dank!
Hat super funktioniert.
Den selben Fehler hatte ich dann auch mit der Tastatur - ist jetzt auch behoben.
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Deine nicht gerade normale Typenbezeichnung fördert natürlich solche Fehler, eigentlich werden Typen und Klassen immer mit T am Anfang gekennzeichnet und Instanzen davon ohne dieses T. So bin ich bei CMouse zunächst davon ausgegangen, dass es eine Variable vom Typ TCMouse sei...

Deine abenteuerliche Codeformatierung ist ja nicht so wichtig solange der Code nicht veröffentlicht werden soll ;-).

:oops: Wie gesagt, habe gerade erst mit Delphi angefangen, der Coding-Style ist mir also noch neu.
Das C steht für Class, aber jetzt hab ichs umgeändert, aber was ist an meiner Codeformatierung abenteuerlich?
Gibt es da Standards, die ich nicht beachtet habe? Wenn ja, wo kann man sich denn mal einlesen?

Nochmals vielen Dank für die schnelle und vor allem gute Hilfe,
MfG
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 08.12.08 22:03 
Naja, der Code, den Delphi selbst erzeugt, der sieht eigentlich ganz gut aus, zum Beispiel habe ich das noch nie gesehen:
user profile iconenergie hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
protected
procedure OnMouseDown(
  Sender: TObject;
  Button: TMouseButton;
  Shift:  TShiftState;
  X, Y:   Integer
);
procedure OnMouseUp(
  Sender: TObject;
  Button: TMouseButton;
  Shift:  TShiftState;
  X, Y:   Integer
);
procedure OnMouseMove(
  Sender: TObject;
  Shift:  TShiftState;
  X, Y:   Integer
);
Das bläht das ganze extrem auf, sobald du ein wenig mehr Code hast musst du ewig scrollen. ;-)
Normalerweise bricht man das bei ca. 80 Zeichen um, damit es auf den Bildschirm gut passt (mit den anderen Bestandteilen der IDE daneben).
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
protected
  procedure OnMouseDown(Sender: TObject; Button: TMouseButton; 
    Shift: TShiftState; X, Y: Integer);
  procedure OnMouseUp(Sender: TObject; Button: TMouseButton; 
    Shift: TShiftState; X, Y: Integer);
  procedure OnMouseMove(Sender: TObject; Shift: TShiftState; 
    X, Y: Integer);
So macht es Delphi selbst auch ;-).

Es gibt auch einen deutschen Styleguide dazu:
www.delphi-treff.de/...leguide/einfuehrung/
und einen auf englisch, der sich an den Regeln der Entwickler von Delphi orientiert:
dn.codegear.com/article/10280
und eine davon abgeleitete Version für das Projekt JEDI:
homepages.borland.co.../jvcl/StyleGuide.htm

Das sind Vorschläge, grundsätzlich geht es darum den Code kompakt und dennoch übersichtlich zu halten. Und je einheitlicher der Code ist, desto besser lesbarer für andere. ;-)

Moderiert von user profile iconNarses: Code- durch Delphi-Tags ersetzt
energie Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Mo 08.12.08 22:25 
Danke für den Styleguide.
Dass es kompakt und lesbar sein soll, ist natürlich klar, ich bin schließlich auch faul und möchte nicht so viel tippen ;)
Dennoch finde ich vertikale Formatierung sehr hübsch und möchte der Lesbarkeit zu Liebe auch nicht alle Parameter so nah beieinander quetschen.

Außerdem finde ich es schöner wenn man bei Methodenaufrufen ein Leerzeichen nach der öffnenden und vor der schließenden Klammer setzt, und viel mehr Tipparbeit ist es auch nicht. Dafür erhöht es m.E. die Lesbarkeit enorm.

<iro>Und auf meinem kleinen Bildschirm kann ich in der großen IDE auch gar nicht bis zur 80. Spalte schreiben, dann sehe ich nur noch die Hälfte</iro>;)

MfG