Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi public function (https://www.delphipraxis.net/134978-public-function.html)

rotte 2. Jun 2009 14:47


public function
 
Hallo,

ich habe mal wieder eine Frage. Zu dem Thema habe ich weder im Internet noch in der Suchfunktion etwas Passendes gefunden.
Aus anderen Programmiersprachen kenne ich Klassen, die man aus jedem anderen Programmteil wieder aufrufen kann.
Ich habe herausgefunden, dass das bei Delphi function heißt.
Wenn ich nun in der Unit der Form1 eine function erstelle, kann ich diese aber nicht, zum Beispiel, in der Unit der Form2 benutzen.

In meiner Unit1 steht:
Delphi-Quellcode:
function Test():boolean;
begin
 showMessage('test');
end;
In einer anderen Unit will ich jetzt diese function benutzen. Hier steht:
Delphi-Quellcode:
Form1.Test();
Das funktioniert allerdings nicht.
Wie funktioniert das ganze??
Bei Java z.B. kan man Funktionen als public oder private deklarieren.
Bei Delphi soll das auch möglich sein -> nur darauf, wie das genau geht komme ich irgendwie nicht.

Ich hoffe ihr könnt mir helfen.
Für produktive Antworten wäre ich sehr sehr dankbar.

Mit freundlichen Grüßen
rotte

sirius 2. Jun 2009 14:52

Re: public function
 
Schreibe den Funktionsheader noch in den Interface-Teil.

btw. Das ist keine Klasse, sondern eine simple Funktion. Sowas gibt es in Java nicht (mehr), da Java rein objektorintiert handelt. Es gibt dort nur Klassen, und um in Java ganz simple Funktionen (z.B. java.math) zu generieren nutzt man statische public Methoden.

Letzteres geht in Delphi auch:
Delphi-Quellcode:
type
    TMath=class
     public
      class function Max(a,b:Double):Double;
      ...
    end;
So etwas macht aber keiner, da hier der prozedurale Ansatz einfach angenehmer ist (ist Ansichtssache).

rotte 2. Jun 2009 15:01

Re: public function
 
Wow. Das ging aber schnell.
Danke für die Antwort.
Habe das ganze jetzt mal ausprobiert, bekomme aber eine Fehlermeldung:
[Error] UnitMain.pas(22): Unsatisfied forward or external declaration: 'TFormMain.Test'

im Header meiner UnitMain steht:
Delphi-Quellcode:
...
type
  TFormMain = class(TForm)
    Button1: TButton;
    Button2: TButton;
    LabelHeader: TLabel;
    Label1: TLabel;
    Image1: TImage;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    class function Test():boolean;
  end;
...
function Test():boolean;
begin
 showMessage('test');
end;
Und in der anderen Unit steht das bereits im letzten Post erwähnte.

Wo liegt der Fehler. :wiejetzt:

Sorry, wenn ich mich vielleicht ein bisschen blöd anstelle :oops:

Apollonius 2. Jun 2009 15:02

Re: public function
 
Du musst dich entscheiden: Klassenmethode oder Funktion. Im ersteren Fall muss es in der Implementation auch heißen "class function TFormMain.Test: Boolean;".

mkinzler 2. Jun 2009 15:03

Re: public function
 
Delphi-Quellcode:
function TFormMain.Test():boolean;

mleyen 2. Jun 2009 15:07

Re: public function
 
hier etwas zum nachlesen.
und Codebeispiele helfen immer:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Classes, Controls, Forms;

type
  TFoo = TObject;

  TForm1 = class(TForm)
  private
    { Private-Deklarationen }
  public
    function ObjPublicFunc: TFoo; // Im Objekt public
    { Public-Deklarationen }
  end;

  function TotalPublicFunc: TFoo; // Ich bin auch ohne ein Objekt in allen Units sichtbar

var
  Form1: TForm1;

implementation

{$R *.dfm}

function TotalPublicFunc: TFoo;
begin
  Result := nil;
end;

{ TForm1 }

function TForm1.ObjPublicFunc: TFoo;
begin
  Result := nil;
end;

end.

rotte 2. Jun 2009 15:14

Re: public function
 
Hmh, ich bekomme immer noch die Selbe Fehlermeldung.
Bin langsam am verzweifeln. Habe jetzt genau das aus dem Quellcode auf mich angewendet.

mkinzler 2. Jun 2009 15:15

Re: public function
 
Zeige mal deinen aktuellen Code.

rotte 2. Jun 2009 15:17

Re: public function
 
Delphi-Quellcode:
unit UnitMain;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, jpeg, ExtCtrls;

type
  TFormMain = class(TForm)
    Button1: TButton;
    Button2: TButton;
    LabelHeader: TLabel;
    Label1: TLabel;
    Image1: TImage;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    function test:boolean;
  end;

  function test:boolean;

var
  FormMain: TFormMain;
  datei: textfile;

implementation

uses UnitMenu;

{$R *.dfm}

function test:boolean;
begin
 showMessage('test');
end;

mkinzler 2. Jun 2009 15:19

Re: public function
 
Du hast die Änderungen auch nicht durchgeführt
Delphi-Quellcode:
function TFormMain.test:boolean;
begin
    showMessage('test');
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:36 Uhr.
Seite 1 von 2  1 2      

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