AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Dynamisch erzeugte Event Handler

Ein Thema von GeorgWa · begonnen am 25. Sep 2013 · letzter Beitrag vom 26. Sep 2013
Antwort Antwort
GeorgWa

Registriert seit: 25. Sep 2013
3 Beiträge
 
#1

Dynamisch erzeugte Event Handler

  Alt 25. Sep 2013, 15:28
Hallo lieber Delphi-Praxis Community,
ich habe eine Klasse die jeweils ein Shape und Ein Timer beinnhaltet.
Diese wird je nach anforderung beliebig oft erzeugt, nun will ich eine OnTimer
Event einfügen was immer eine prozedur auslöst.
Dabei scheiter ich leider aktuell da ich nicht weis wie man einem NotifyEvent eine procedur zuordnet.

Delphi-Quellcode:
 
auto[index].TmrMovement := TTimer.Create(Form1);
  With auto[index].TmrMovement do
  begin
    enabled := true;
    interval := 30;
    name := 'TmrMovement' + IntToSTr(Index);
  end;
mit freundlichen grüßen Georg
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.623 Beiträge
 
Delphi 12 Athens
 
#2

AW: Dynamisch erzeugte Event Handler

  Alt 25. Sep 2013, 15:34
Du kannst einen beliebigen TNotifyEvent nehmen und zuweisen.
Delphi-Quellcode:
type
  TDeineKlasse = class(TIrgendwas)
  private
    procedure TimerProc(Sender: TObject);
  ...
  end;

...

DeinTimer.OnTimer := TimerProc;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
GeorgWa

Registriert seit: 25. Sep 2013
3 Beiträge
 
#3

AW: Dynamisch erzeugte Event Handler

  Alt 26. Sep 2013, 08:14
Das war auch meine erste Idee wobei dann wenn man die
Prozedur Namen mit Klammer schreibt folgender fehler kommt:
[Fehler] Unit1.pas(76): Inkompatible Typen: 'TNotifyEvent' und 'procedure, untyped pointer or untyped parameter' Und wenn man den Prozedur Namen mit Klammern am Ende schreibt:
[Fehler] Unit1.pas(76): Inkompatible Typen: Liste der Parameter ist unterschiedlich
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#4

AW: Dynamisch erzeugte Event Handler

  Alt 26. Sep 2013, 08:15
Wieso schreibst Du das mit Klammer?
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.158 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: Dynamisch erzeugte Event Handler

  Alt 26. Sep 2013, 10:47
Kann es sein, dass du eine klassenlose Prozedur dem Event zuweisen willst? Das geht nämlich nicht. Die Definition von TNotifyEvent ist procedure(Sender: TObject) of object; . Die Methode muss also einen Parameter vom Typ TObject entgegennehmen und eine Instanzmethode einer Klasse sein.

Also nicht
procedure meineTimerProzedur(Sender:TObject) sondern z.B.
procedure TMeinFormular.meineTimerProzedur(Sender:TObject)
Den Grund dafür habe ich nie ganz verstanden. Wäre das nicht so, könnte man auch anonyme Prozeduren als Eventhandler setzen. Vielleicht ist das aber auch besser so. Würde man das brutal ausnutzen wird das sicher unübersichtlich...
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#6

AW: Dynamisch erzeugte Event Handler

  Alt 26. Sep 2013, 11:29
Den Grund dafür habe ich nie ganz verstanden.
Eine TMethod ist einfach etwas anderes als eine TProcedure . Und wir wollen ja nicht mehr prozedural programmieren.

Ich fasse noch einmal zusammen:
Delphi-Quellcode:
...
DeinTimer.OnTimer := TimerProc;
...wobei dann wenn man die Prozedur Namen mit Klammer schreibt folgender fehler kommt:...
Wieso schreibst Du das mit Klammer?
Würde mal denken, es liegt an den Klammern. Seufz.
  Mit Zitat antworten Zitat
GeorgWa

Registriert seit: 25. Sep 2013
3 Beiträge
 
#7

AW: Dynamisch erzeugte Event Handler

  Alt 26. Sep 2013, 20:21
Ok danke
so wie ihr es erklärt habt habe ich es jetzt endlich richtig verstanden
  Mit Zitat antworten Zitat
Antwort Antwort


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 08:38 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