![]() |
Methode in Consolenanwendung erstellen
Hi,
ich habe ein Consolenanwendung. In der erzeuge ich ein Object und möchte nun einem Event des Objects eine Methode zuweisen. Geht nicht, weil ich nur prozeduren habe. Wie erstellt man in einer Cosolenanwendung eine Methode? Object:
Delphi-Quellcode:
Consolenanwendung:
unit uTestObject;
interface type TOnLog=procedure(Sender: TObject; LogText: string) of object; TTestObject=class private FOnLog: TOnLog; procedure DoLog(LogText: string); public procdure MachWas; published property OnLog: TOnLog read FOnLog write FOnLog; end; Implementation proceudre TTestObject.DoLog(LogText: string); begin if Assigned(FOnLog) then FOnLog(self, LogText); end; procedure TTestObject.MachWas; begin DoLog('TestLogText'); end; end.
Delphi-Quellcode:
program CMDTest;
{$APPTYPE CONSOLE} {$R *.res} uses uTestObject in 'uTestObject.pas'; var TestObject: TTestObject; proceudre LogMsg(Sender: TObject; LogText: string); begin MachIrgendwasMitLogText; end; begin TestObject:=TTestObject.Create; try TestObject.OnLog:=LogMsg; //<---Das wird nicht compiliert: [dcc32 Fehler] CMDTest.dpr(104): E2009 Inkompatible Typen: 'Methodenzeiger und reguläre Prozedur' TestObject.MachWas; finally TestObject.free; end; end. |
AW: Methode in Consolenanwendung erstellen
Delphi-Quellcode:
Alternative:
type
TOnLog=procedure(Sender: TObject; LogText: string); // of object; -> brauchste hier nicht
Delphi-Quellcode:
Zum Weiterlesen:
type
TOnLog = reference to procedure(Sender: TObject; LogText: string); // -> geht dann Beides ![]() |
AW: Methode in Consolenanwendung erstellen
Wenn ich das mache, wie veröffentliche ich dann meine Property bekannt?
Delphi-Quellcode:
[dcc32 Fehler] uTestObject.pas(28): E2188 Published-Eigenschaft 'OnLog' kann nicht vom Typ PROCEDURE sein
|
AW: Methode in Consolenanwendung erstellen
Wozu brauchst du denn published? Das ist doch kein Control - oder?
|
AW: Methode in Consolenanwendung erstellen
Ah...danke für den letzten Hinweis. Jetzt funktioniert's.
Danke TiGü und Freimatz |
AW: Methode in Consolenanwendung erstellen
Zeiger vom Typ
Delphi-Quellcode:
nehmen nicht nur Methoden, sondern auch Klassenmethoden an.
procedure of object
Delphi-Quellcode:
Niemand verbietet in Konsolenanwendungen Klassen zu benutzen.
type
TMyClass = class abstract // abstract muß nicht,aber wenn wir die Instanz eh nie erstellen wollen... class procedure DoLog; end; Also könntest du dir auch eine Klasse, mit oder ohne Instanz, für deine Hilfsfunktionen (ala DoLog) erstellen.
Delphi-Quellcode:
TestObject.OnLog := TMyClass.LogMsg;
Hier wirklich TMyClass mit T, weil Class-Function und damit keine Instanz nötig, im Gegensatz zu deinem TTestObject.OnLog/MachWas in Post #1, wo das T falsch ist. |
AW: Methode in Consolenanwendung erstellen
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:42 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz