Forward type not resolved ?

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Beitrag von schnullerbacke »

@pluto

Für solche Fälle richte ich mir immer ne Unit mit Event-Deklarationen ein die man überall zuladen kann. Da könnte man dann sowas wie:

typ

TDataTransfer = procedure(Sender: TObject; Origin: integer; var Data) of object;

derklarieren. Das kann dann überall benutzt werden wo man es braucht. Also ganz einfach.
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

pluto
Lazarusforum e. V.
Beiträge: 7180
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

ja währe eine idee !
das stimmt... in meinen fall wollte ich eine procedure aus eine andren klasse aufrufen... also keine daten weiter geben....
MFG
Michael Springwald

schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Beitrag von schnullerbacke »

@pluto

TNotifyEvent, der ist so deklariert:

TNotifyEvent = procedure(Sender: TObject) of object;

und gilt überall da, wo Classes geladen ist. Also praktisch überall. Den kann man immer nehmen wenn nicht zusätzliche Daten übergeben muß.
Über:

TThisClass(Sender)^.

kann man dann auf alles zugreifen was als public oder published deklariert ist. Vorher sollte man aber testen welchen Typ Sender wirklich hat. Dafür kann man den Klassen-Namen abfragen. Dann kann man entscheiden was TThisClass wirklich sein soll. Dafür geht mein ich:

TObject(Sender)^.ClassName

oder so ähnlich. Mußt Du mal probieren. Dann bekommst Du den tatsächlichen Klassennamen von dem Objekt und kannst dann auch an die Daten ran. Damit wäre dann auch Dein Problem gelöst ohne da was schwieriges bauen zu müssen.
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

pluto
Lazarusforum e. V.
Beiträge: 7180
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

ich mache das jetzt mit einem ereignis was ich auslöse weil es ja nicht anderes geht:
TonChangeValue = procedure of object ich brauche keine variabeln *G*
und dieses ereignis wird dann direckt mit einer procedre zugeiwesen in der eigentlichen klasse die probleme gemacht hat !

achja vohrer solltes du noch prüfen ob das ereignis überhaupt belegt ist weil ich habe im lazarus qullcodes zwischendurch stellen gesehen dort wird ein ereinigs aufgerufen aber es wird nicht geprüft ob es belegt ist !
ich finde das ist ein bug weil meiner meinung nach ist/war dieses ergnis nicht zwingend ervorderlich für die procedure....

und solche stellen treffe ich immer wieder !
unter delphi ging das übring so(meine ich)

if sender is TObject wobei ich immer mit is durcheinander komme und mit der reinfolge: erst variabeln name oder erst klasse namen ?
MFG
Michael Springwald

schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Beitrag von schnullerbacke »

Schon richtig so, so kann man das auch machen. Vor dem Aufruf, also im Aufrufer sollte man auch immer noch ein:

if Assigned(FEventName) then EventName(Self);

veranstalten um sicher zu gehen das es auch nen Empfänger gibt. Events ohne Absender (Self) sollte man nicht machen. Das kann Probleme geben, schließlich könnte ja eine ganze Liste von Objekten den Event ansprechen. Dann brauchst du den Absender um auch das richtige Objekt in der Liste rauszukriegen.
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

pluto
Lazarusforum e. V.
Beiträge: 7180
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

die frage ist nur warum passiert das nicht in denn qullcode von lazarus ?
ich such dir mal morgen eine beispiel datei wo das z.b. nicht passiert !
MFG
Michael Springwald

Antworten