[Teilweise gelöst] Manuelle Ereignisbehandlung

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
max_itn
Beiträge: 5
Registriert: Di 14. Jul 2015, 13:30
OS, Lazarus, FPC: Windows 7 Lazarus 1.4.0 FPC Version 2.6.4
CPU-Target: xxBit

[Teilweise gelöst] Manuelle Ereignisbehandlung

Beitrag von max_itn »

Hallo Leute,
ich bin von Haus aus Java-Entwickler und möchte mich näher mit Turbo-Pascal beschäftigen.
Ich möchte gern einen eigenen Editor entwickeln, mit eigenen Bedienelementen.
Zum Beispiel einem Label für Beschriftungen.
Damit der spätere Editor weiß, dass die Maus auf einem Label steht, soll dieser Zustand in einer boolschen Variable abgelegt werden.
Das Label selbst hat Methoden um den Zustand dieser Variabel zu verändern.

Meine Überlegung war, im Hauptprogramm erst die entsprechende Methode dem Methodenzeiger OnMouseEnter zu übergeben.

Code: Alles auswählen

LblMyLabel1.OnMouseEnter := LblMyLabel1.MyMouseEnter;
Dabei treten folgende zwei Fehlermeldungen auf:
test_eigenes_label2_unit2.pas(86,17) Error: identifier idents no member "OnMouseEnter"
test_eigenes_label2_unit2.pas(86,45) Error: Wrong number of parameters specified for call to "MyMouseEnter"

Zur zweiten Fehlermeldung:
Ich weiß was ich als Parameter übergeben soll, zumal ich mich an diesem Beispiel orientiert habe:
http://www.delphi-treff.de/object-pasca ... denzeiger/
Hierbei wurde nur der Methodenname übergeben.
Als Anlage noch meine Unit in der das Label definiert wurde.
Mfg Max_itn
Dateianhänge
projekt2_bedienelemente1.pas
Definition für das eigene Label
(847 Bytes) 52-mal heruntergeladen
Zuletzt geändert von max_itn am Di 28. Jul 2015, 15:07, insgesamt 1-mal geändert.

baumina
Beiträge: 152
Registriert: Mo 3. Feb 2014, 14:07
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Manuelle Ereignisbehandlung

Beitrag von baumina »

Zu Fehlermeldung 1: Da du von TCustomLabel statt von TLabel ableitest, sind einige Eigenschaften (z.B. auch OnMouseEnter) nicht published. Hier ein Blick auf die Klasse TLabel

Code: Alles auswählen

  TLabel = class(TCustomLabel)
  published
    property Align;
    property Alignment;
    property Anchors;
    property AutoSize;
    property BiDiMode;
    property Caption;
    property Color nodefault;
    property Constraints;
    property DragCursor;
    property DragKind;
    property DragMode;
    property EllipsisPosition;
    property Enabled;
    property FocusControl;
    property Font;
    property GlowSize; // Windows Vista only
    property ParentBiDiMode;
    property ParentColor;
    property ParentFont;
    property ParentShowHint;
    property PopupMenu;
    property ShowAccelChar;
    property ShowHint;
    property Touch;
    property Transparent;
    property Layout;
    property Visible;
    property WordWrap;
    property OnClick;
    property OnContextPopup;
    property OnDblClick;
    property OnDragDrop;
    property OnDragOver;
    property OnEndDock;
    property OnEndDrag;
    property OnGesture;
    property OnMouseActivate;
    property OnMouseDown;
    property OnMouseMove;
    property OnMouseUp;
    property OnMouseEnter;
    property OnMouseLeave;
    property OnStartDock;
    property OnStartDrag;
  end;
 
Zu Fehlermeldung 2: Lazarus unterscheidet sich hier zu Delphi ein klein wenig, dort musst du die Adresse der Procedure mitgeben.

Code: Alles auswählen

LblMyLabel1.OnMouseEnter := @MyMouseEnter;
 
.

max_itn
Beiträge: 5
Registriert: Di 14. Jul 2015, 13:30
OS, Lazarus, FPC: Windows 7 Lazarus 1.4.0 FPC Version 2.6.4
CPU-Target: xxBit

Re: Manuelle Ereignisbehandlung

Beitrag von max_itn »

Danke Baumina, es hat wunderbar geklappt! :mrgreen:
Mfg max_itn

Antworten