AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Non-Visual-Komponente > Ereignisse im OI verknüpfen
Thema durchsuchen
Ansicht
Themen-Optionen

Non-Visual-Komponente > Ereignisse im OI verknüpfen

Ein Thema von himitsu · begonnen am 10. Nov 2010 · letzter Beitrag vom 12. Nov 2010
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.116 Beiträge
 
Delphi 12 Athens
 
#1

Non-Visual-Komponente > Ereignisse im OI verknüpfen

  Alt 10. Nov 2010, 10:48
Moin,

irgendwie hab ich grade ein kleines Problemchen mit meiner kleinen nichtvisuellen Komponente.

Und zwar aktuell speziell mit den Ereignis-Property.

Der relevante Teil sieht so aus:
Delphi-Quellcode:
THIDDeviceEx = Class(TComponent)
Published
  Property OnRecive: THIDEOnRecive Read FOnRecive Write FOnRecive;
End;
Als Callback wurde es so deklariert:
Delphi-Quellcode:
THIDEOnRecive = Reference to Procedure(Sender: THIDDeviceEx; Const Data; Len: Integer);
.
Leider kann man so im OI keine Methode zuordnen.
Weder eine Existierende auswählen, noch wird per Doppelklick eine erstellt.

OK, da es auch schon andere Problemchen mit dem "reference to" habe, wollte ich es mal "normal" gestalten und hab es so versucht.
Delphi-Quellcode:
THIDEOnRecive = Procedure(Sender: THIDDeviceEx; Const Data; Len: Integer) of Object;
.
Problem hierbei ist, daß dieses Property so überhaupt nicht im OI angezeigt wird.



Also, wie macht man es nun richtig?

Oder hat jemand eine Lösung, wie man das mit "reference to" zum Laufen bekommen könnte?
Eigentlich wäre es ja schön, wenn man so eine recht offene Schnittstelle bieten könnte.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  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: Non-Visual-Komponente > Ereignisse im OI verknüpfen

  Alt 10. Nov 2010, 10:55
was sollte Dir denn der OI zur Auswahl anbieten?
Ich bezweifle dass sowas machbar ist.
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 mleyen
mleyen

Registriert seit: 10. Aug 2007
609 Beiträge
 
FreePascal / Lazarus
 
#3

AW: Non-Visual-Komponente > Ereignisse im OI verknüpfen

  Alt 10. Nov 2010, 10:58
Delphi-Quellcode:
THIDEOnRecive = Procedure(Sender: THIDDeviceEx; Const Data; Len: Integer) of Object;
.
Problem hierbei ist, daß dieses Property so überhaupt nicht im OI angezeigt wird.
Altes Package deinstallieren. Relevante DCUs löschen. Pakage neu erzeugen + installieren. Evtl noch IDE neu starten.
Spätestens so hat es bei mir immer funktioniert.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.116 Beiträge
 
Delphi 12 Athens
 
#4

AW: Non-Visual-Komponente > Ereignisse im OI verknüpfen

  Alt 10. Nov 2010, 11:19
@mleyen: Sowas hab ich schon versucht, aber ich versuch es noch weiter.

@Bummi: Also, da "reference to" alles aufnehmen kann, und "procedure of object" somit enthalten ist, sollten mindestens die Methoden der Form auswählbar sein.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  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
 
#5

AW: Non-Visual-Komponente > Ereignisse im OI verknüpfen

  Alt 10. Nov 2010, 11:34
meine Zweifel bezogen sich nicht auf:
THIDEOnRecive = Procedure(Sender: THIDDeviceEx; Const Data; Len: Integer) of Object;
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 himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.116 Beiträge
 
Delphi 12 Athens
 
#6

AW: Non-Visual-Komponente > Ereignisse im OI verknüpfen

  Alt 10. Nov 2010, 11:47
meine Zweifel bezogen sich nicht auf
Ich weiß.
"reference to" kann aber auch Objekt-Methoden aufnehmen,
sowie einfache Prozeduren, Klassen-Methoden, anonyme Methoden usw.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.116 Beiträge
 
Delphi 12 Athens
 
#7

AW: Non-Visual-Komponente > Ereignisse im OI verknüpfen

  Alt 10. Nov 2010, 18:01
Hab hier mal beide Varianten zusammengestellt.

Wie gesagt, bei "procedure of object" zeigt der OI die Property nicht an
und bei "reference to procedure" kann man via OI nichts zuweisen.

Die Komponente selber hat keine Funktion.
(Wurde wegen eines Fehlers im HIDControler deaktivert, nicht daß die IDE nochmal verreckt)

Aktuell wäre der Code wohl unter DelphiXE, Delphi2010 und vermutlich auch noch Delphi2009 kompilierbar.

Wobei die String-Operationen inzwischen so umgestellt wurden, daß sie auch für Nicht-Unicode-Delphis geeignet wären.
Wenn alles läuft, werd' ich mal sehn, wie ich das mit den anonymen Methoden und den Generics umgehe.
Nja, und der HID-Controler hat halt noch ein kleines Problem ... bin noch nicht mit der Umstellung auf die RAWInputs fertig (hab wohl irgendwo was vergessen).
Und das Problem mit den "reference to" ist auch noch nicht gelöst.
Angehängte Dateien
Dateityp: 7z HIDCtrl_OfObject.7z (19,4 KB, 4x aufgerufen)
Dateityp: 7z HIDCtrl_ReferenceTo.7z (19,4 KB, 1x aufgerufen)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (10. Nov 2010 um 18:03 Uhr)
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#8

AW: Non-Visual-Komponente > Ereignisse im OI verknüpfen

  Alt 10. Nov 2010, 18:22
Ich würde bei "procedure of Object", also intern Datentyp TMethod, bleiben.
Diese Art von Events sind deutlich schneller und schlanker als das neue "reference to procedure" (auch bekannt als Closures).

Closures wurden IHMO nie als Ersatz für Events entwickelt.
Ausserdem können mit Closures unerwarte Dinge passieren, weil der Compiler die lokalen Variablen zum Zeitpunkt der Erzeugung des Closure "reinwurstelt".
Beispiel:
Delphi-Quellcode:
procedure TMyClass.DoStuff;
var
  j: integer;
  ShowCounter: TProc; // Method without parameter.
begin
  ShowCounter :=
    procedure
    begin
      // j is known here because it is wrapped in a closure
      // and made available to us!
      writeln(IntToStr(j));
    end;

  for j := 1 to 10 do
    ShowCounter;
end;
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.116 Beiträge
 
Delphi 12 Athens
 
#9

AW: Non-Visual-Komponente > Ereignisse im OI verknüpfen

  Alt 10. Nov 2010, 18:29
Dafür wäre es aber praktisch, wenn der OI diese "of Object" dann auch anzeigt, was er leider nicht macht.

Obwohl er es doch eigentlich zun sollte.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#10

AW: Non-Visual-Komponente > Ereignisse im OI verknüpfen

  Alt 10. Nov 2010, 19:07
...wenn der OI diese "of Object" dann auch anzeigt, was er leider nicht macht...
"Eigentlich" sollten die Events angezeigt werden.
Delphi-Quellcode:
Property OnRecive: THIDEOnRecive Read FOnRecive Write FOnRecive;
Property OnArrival: THIDENotifyEvent Read FOnRemoval Write FOnRemoval;
Property OnRemoval: THIDENotifyEvent Read FOnRemoval Write FOnRemoval;
FOnRemoval wurde doppelt verwendet; das ist nicht ganz richtig.

Mir fällt auch auf:
Du hast 10 Konstruktoren, wobei man bei Komponenten nur einen Konstruktor verwenden darf/sollte:
constructor Create(AOwner: TComponent);override; Nur ein Konstruktor mit dieser Signatur wird von der VCL aufgerufen.
Andreas
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 03:20 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