Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Function Aufruf aus andere Unit (https://www.delphipraxis.net/204917-function-aufruf-aus-andere-unit.html)

akuk 14. Jul 2020 09:02

Function Aufruf aus andere Unit
 
Hallo, bitte kann mir da jemand helfen ?

In unit1 (OptiNumericComm)deklariert als public:

TOptiNumericComm = class(TObject)
private
comPort : TComPort;
susiAPI : TSusiAPI;
public
OutInt : integer;
InpType : byte;
sim_on :boolean;
constructor Create;
function initOptiNumericComm(ComNo : integer) : boolean;
function checkCommActive : boolean;
procedure receiveMessage(sim_on:boolean;var Itype: byte);
function transmitMessage(OutType : Byte; var MldgOK:boolean ) : boolean;
end;

In unit 2 aufgerufen :
if TOptiNumericComm.checkCommActive then
WriteXY(32,25,'CNC Schnittstelle inaktiv') //Fehler Balken
else WriteXY(32,25,'CNC Schnittstelle aktiv');

In unit2 (MenueRefMan) als uses ist OptiNumericCom deklariert

Fehler :
[Fehler] MenueRefMan.pas(152): Diese Form des Methodenaufrufs ist nur für Klassenmethoden erlaubt

checkCommActive ist ja klassenmethode !
Was ist da falsch ??

Danke für voraus

DeddyH 14. Jul 2020 09:04

AW: Function Aufruf aus andere Unit
 
Nein, das ist keine Klassenmethode. Klassenmethoden werden als class procedure bzw, class function deklariert und kommen ohne Instanz aus.

Dalai 14. Jul 2020 09:07

AW: Function Aufruf aus andere Unit
 
Wenn du keine Klassenmethode haben willst, musst du (ganz klassisch) eine Variable vom Typ TOptiNumericComm deklarieren und benutzen, und mit deren Instanz dann die Methode checkCommActive rufen.

Grüße
Dalai

DeddyH 14. Jul 2020 09:19

AW: Function Aufruf aus andere Unit
 
Zur Veranschaulichung:
Delphi-Quellcode:
type
  TDingens = class
  public
    // Methode
    procedure TuWas;
    // Klassenmethode
    class procedure TuwasAnderes;
  end;

...

procedure TDingens.TuWas;
begin
  ShowMessage('Ich bin die Methode einer Instanz von TDingens');
end;

class procedure TDingens.TuwasAnderes;
begin
  ShowMessage('Ich bin eine Klassenmethode und brauche keine Instanz');
end;
Aufrufe:
Delphi-Quellcode:
procedure TSomeForm.Tuwas;
var
  Dingens: TDingens;
begin
  // Instanz erzeugen, benutzen und freigeben
  Dingens := TDingens.Create;
  try
    Dingens.TuWas;
  finally
    Dingens.Free;
  end;
end;

procedure TSomeForm.TuwasAnderes;
begin
  // Geht auch ohne Instanz
  TDingens.TuwasAnderes;
end;

akuk 14. Jul 2020 09:30

AW: Function Aufruf aus andere Unit
 
Habe ich etwas nicht verstanden:
function checkCommActive gehört doch zu Klasse TOptiNumericComm ? oder etwa nicht ?

DeddyH 14. Jul 2020 10:01

AW: Function Aufruf aus andere Unit
 
Jede Instanz, die Du von dieser Klasse erzeugst, verfügt über diese Methode. Aber Du musst so eine Instanz auch erst einmal erzeugen. War mein Beispiel so unverständlich?

hoika 14. Jul 2020 10:10

AW: Function Aufruf aus andere Unit
 
Hallo,
Zitat:

gehört doch zu Klasse
schau dir das Bsp von DeddyH genau an.

Objekt erzeugen (Dingens:= TDingens.Create)
Dingens.TuWas;

Klasse muss nicht erzeugt werden
TDingens.TuwasAnderes;

Eine class-Methode wird ohne Objekt benutzt.

class-Methode <> Methode einer Klasse

akuk 14. Jul 2020 10:26

AW: Function Aufruf aus andere Unit
 
Hallo DeddyH
Zuerst danke,so weit habe ich Dein Beispiel verstanden, ich meinte habe es genau so gemacht, also die methode in unit1 als nicht klassenMethode, dafür mit Instanziern im unit2.
Aber es ist nach wie vor der gleiche fehler.

//in der unit2
procedure Man;

Var i :integer;
OptiNumericComm :TOptiNumericComm;

begin
OptiNumericComm := TOptiNumericComm.Create;
Init_IstWerte(IstWerte_Alt);
//usw ....
//der Aufruf
if TOptiNumericComm.checkCommActive then
WriteXY(32,25,'CNC Schnittstelle aktiv') //Fehler Balken
else WriteXY(32,25,'CNC Schnittstelle inaktiv');
//.....
[Fehler] MenueRefMan.pas(152): Diese Form des Methodenaufrufs ist nur für Klassenmethoden erlaubt

akuk 14. Jul 2020 10:47

AW: Function Aufruf aus andere Unit
 
jetzt ist es gegangen, der Aufruf musste sein :

if OptiNumericComm.checkCommActive then

Vielen Dank Euch allen

Hobbycoder 14. Jul 2020 18:20

AW: Function Aufruf aus andere Unit
 
Falls du es noch nicht weißt, es gibt die Möglichkeit beim Verfassen eines Posts, den Delphi-Quelltext zu formatieren, so wie es die antwortenden User auch machen.
Der Vorteil ist, dass es einfach besser und schneller lesbar ist (keine Proportionalschrift und führende Leerzeichen werden angezeigt).

Das ist das Symbol mit dem gelben Helm.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:03 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