AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

public function

Ein Thema von rotte · begonnen am 2. Jun 2009 · letzter Beitrag vom 2. Jun 2009
Antwort Antwort
Seite 1 von 2  1 2   
rotte

Registriert seit: 21. Mai 2009
9 Beiträge
 
#1

public function

  Alt 2. Jun 2009, 15:47
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:
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
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: public function

  Alt 2. Jun 2009, 15:52
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).
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
rotte

Registriert seit: 21. Mai 2009
9 Beiträge
 
#3

Re: public function

  Alt 2. Jun 2009, 16:01
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.

Sorry, wenn ich mich vielleicht ein bisschen blöd anstelle
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: public function

  Alt 2. Jun 2009, 16:02
Du musst dich entscheiden: Klassenmethode oder Funktion. Im ersteren Fall muss es in der Implementation auch heißen "class function TFormMain.Test: Boolean;".
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.859 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: public function

  Alt 2. Jun 2009, 16:03
function TFormMain.Test():boolean;
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von mleyen
mleyen

Registriert seit: 10. Aug 2007
609 Beiträge
 
FreePascal / Lazarus
 
#6

Re: public function

  Alt 2. Jun 2009, 16:07
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.
  Mit Zitat antworten Zitat
rotte

Registriert seit: 21. Mai 2009
9 Beiträge
 
#7

Re: public function

  Alt 2. Jun 2009, 16:14
Hmh, ich bekomme immer noch die Selbe Fehlermeldung.
Bin langsam am verzweifeln. Habe jetzt genau das aus dem Quellcode auf mich angewendet.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.859 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: public function

  Alt 2. Jun 2009, 16:15
Zeige mal deinen aktuellen Code.
Markus Kinzler
  Mit Zitat antworten Zitat
rotte

Registriert seit: 21. Mai 2009
9 Beiträge
 
#9

Re: public function

  Alt 2. Jun 2009, 16:17
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;
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.859 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: public function

  Alt 2. Jun 2009, 16:19
Du hast die Änderungen auch nicht durchgeführt
Delphi-Quellcode:
function TFormMain.test:boolean;
begin
    showMessage('test');
end;
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 10:26 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