AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Deklarierung einer "function"

Ein Thema von mindforce · begonnen am 7. Jan 2006 · letzter Beitrag vom 8. Jan 2006
Antwort Antwort
mindforce
(Gast)

n/a Beiträge
 
#1

Deklarierung einer "function"

  Alt 7. Jan 2006, 23:22
Da ich noch sehr jung bin, weiss ich natürlich nicht sooooo viel von Delphi. Aber das einzige was ich nicht verstehe kann mir kein Schwein beibringen . Undzwar die Deklarierung von "function"´s.
Wie man eine "procedur" erstellt weiss ich seltsamer weise: Doppelklick auf Item, schon hat er mir eine "procedure" erstellt die ich auch dann in der Unit bearbeiten kann.
Aber wie man eine "function" erstellt bzw. deklariert kann mir das vieleicht jemand erklären?????

Vielen Dank für eure mithilfe.

Achso: Bei meinem letztem beitrag habe ich diese Antwort bekommen:

Zitat von Robert Marquardt:
Bewirb dich bei einer Abbruchfirma.
Aber es geht noch ein Dank an Brainshock der folgendes geschreiben hat:

Zitat von Brainshock:
Die Webseiten von "mindforce" sind auch mal einen Besuch wert!
Delphi Praxis - Wallbreaker
Hoffe das der Link funzt!

-------------------------

Danke für die Antworten. Ich werde es mal ausprobieren.
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Deklarierung einer "function"

  Alt 7. Jan 2006, 23:28
Hallo

Schau in die Open-Source SParte und siehe dier Quelltexte an.

Hier mal ein kleines Beispiel:

Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    // Hier wäre es so "richtig" global deklariert
    // Aufrufen könntest du hier deklarierte Funktionen einfach über ihren Namen
    // und das in jeder Unit, die diese Unit hier eingebunden hat

  private
    { Private-Deklarationen }

    // Nur in dieser Unit sichtbar
    // Man muss sie hier nicht deklarieren, wenn du die Funktion über denen
    // implementiert, die diese Aufrufen
    procedure Foo(A: Integer);
    function Blubb(A: String): Integer;

  public
    { Public-Deklarationen }

    // im ganzen Programm sichtbar
    // Aufruf über
    // Form1.xyz
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

// Prozedur
procedure TForm1.Foo(A: Integer);
begin
  ShowMessage(IntToSTr(A));
end;

// Funktion
function TForm1.Blubb (A: String): Integer;
begin
  result := Length(A);
end;

end.
  Mit Zitat antworten Zitat
Benutzerbild von malo
malo

Registriert seit: 19. Sep 2004
2.115 Beiträge
 
#3

Re: Deklarierung einer "function"

  Alt 7. Jan 2006, 23:36
Ich empfehle dir auch Das
  Mit Zitat antworten Zitat
emteg

Registriert seit: 16. Jun 2005
71 Beiträge
 
Delphi 2009 Architect
 
#4

Re: Deklarierung einer "function"

  Alt 8. Jan 2006, 02:23
Zitat:
Aber wie man eine "function" erstellt bzw. deklariert kann mir das vieleicht jemand erklären?????
Ist ganz einfach: eine function ist eine procedure, die einen wert zurückliefert. Genau wie procedures, kannst du das beliebig in deinen quelltext reinpacken:

Delphi-Quellcode:
type
  TForm1 = class(TForm)
  procedure ZeigeNachricht(Text: string);
  function Addieren(a: integer; b: integer): integer;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

{...}

procedure TForm1.ZeigeNachricht(Text: string);
begin
  ShowMessage(Text);
end;

function TForm1.Addieren(a: integer; b: integer): integer;
begin
  Result:=0; //Bei functions wird das ergebnis über die feste variable Result gesetzt.
  Result:=a+b;
end;
Jede function oder procedure, die du selbst definieren möchtest, schreibst du beim type TForm1 einfach rein. Im quelltext musst du bei fenstern noch den namen der unit dazu schreiben. Also in diesem Fall "TForm1." Bei functions sollte man auf jedenfall dem result einen default wert zuweisen, falls irgendetwas schief geht.
Aufrufen kannst du eine function so:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObejct);
begin
  Edit3.Text:=IntToStr(Addieren(StrToInt(Edit1.Text), StrToInt(Edit2.TExt));
end;
Ich hoffe mal, ich konnte dir helfen.
  Mit Zitat antworten Zitat
tigerman33

Registriert seit: 30. Jul 2005
Ort: München
423 Beiträge
 
Delphi 2005 Professional
 
#5

Re: Deklarierung einer "function"

  Alt 8. Jan 2006, 10:57
Das wichtigste ist ja eigentlich schon gesagt worden, aber trotzdem werd ich mal meine 2 cent noch einbringen.

Du unterliegst da einem leichten Irrtum was die procedures angeht. Natürlich hast du recht, dass eine procedure erstellt wird, wenn du doppelt auf eine Komponente klickst. Das ist aber nur ein Teil der Wahrheit. Procedures und Functions kannst du nämlich ebensogut "von Hand" erstellen (und dies wird in den meisten Situationen auch der Fall sein).
Prozeduren und Funktionen sind dazu da, dein Programm in logische Blöcke aufzuspalten. Anstatt alles in eine einzige Hauptprogrammroutine zu schreiben fasst du gewissermaßen zusammen was zusammen gehört. Das macht deinen Quelltext übersichtlicher und auch wiederverwertbarer, weil du gleiche oder ähnliche Dinge nicht mehrmals eintippen musst.

Damit ist denke ich plausibel, dass es zum größten Teil dir überlassen ist, wo und wann du eine procedure/function schreibst. Was die Details zur Deklaration etc angeht verweise ich auf meine Vorredner.
Christian
Der Computer hilft mir, Probleme zu lösen, die ich ohne Computer nicht hätte.
  Mit Zitat antworten Zitat
ichbins

Registriert seit: 9. Jul 2005
Ort: Hohenaltheim
1.001 Beiträge
 
Delphi 2005 Personal
 
#6

Re: Deklarierung einer "function"

  Alt 8. Jan 2006, 11:09
Du kannst eine Funktion oder Prozedur so erstellen:

Entweder, sie gehört dierekt zur Unit, dann deklarierst du sie ausserhalb irgendwelcher Klassendeklarationen:

Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

procedure myprocedure(i:integer);
function myfunction(i:integer):string;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure myprocedure(i:integer);
begin
  dosomething;
end;

function myfunction(i:integer):string;
begin
  dosomethingother;
end;

end.
oder du deklarierst die Funktion/Klasse zu einer Klasse zugehörig, in unserem Falle also TFORM1:

Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    procedure myprocedure(i:integer);
    function myfunction(i:integer):string;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure tform1.myprocedure(i:integer);
begin
  dosomething;
end;

function tform1.myfunction(i:integer):string;
begin
  dosomethingother;
end;

end.
welche Methode von beiden empfehlenswerter ist, überlasse ich dir. Wenn du von der Prozedur/Funktion aus dierekten Zugriff auf die form haben willst (z.B. canvas.rectangle oder label1.caption aufrufen willst, dann solltest du sie in der Form deklarieren, wenn du mehrere Units verwendest, unbedingt ausserhalb der form. Wenn du sie ausserhalb der form deklarierst, musst du label1.caption so aufrufen: form1.label1.caption (da form1 eine Variable ist, die dierekt in der Unit deklariert ist) oder so:

Delphi-Quellcode:
procedure xy;
begin
  with form1 do
  begin
    dosomething;
  end;
end;
Michael Enßlin
Ich, der ich weiß, mir einzubilden, dass ich weiß, nichts zu wissen, weiß, dass ich nichts weiß.
Sokrates
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#7

Re: Deklarierung einer "function"

  Alt 8. Jan 2006, 11:13
Zitat von emteg:
Genau wie procedures, kannst du das beliebig in deinen quelltext reinpacken:

Delphi-Quellcode:
type
  TForm1 = class(TForm)
  procedure ZeigeNachricht(Text: string);
  function Addieren(a: integer; b: integer): integer;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

{...}
Kann man eben nicht. Eine selbstgeschriebene Methode hat nichts unter published zu suchen.
@mindforce: Es gibt generell zwei Typen von Prozeduren: lokale Prozeduren und Methoden. Erstere stehen irgendwo unter implementation. Vereinfacht kann man sagen, dass du hier nicht auf die Formcontrols zugreifen kannst/sollst:
Delphi-Quellcode:
function Add(const a, b: Integer): Integer;
begin
  Result := a + b;
  // Result := StrToInt(Edit1.Text) + a + b
  // geht nicht, bzw. nur über hässliche Irrwege
end;
Außerdem kann man nur in Code unterhalb der Funktion auf diese zugreifen.
Methoden gehören zu deiner Form, du kannst problemlos auf alle Controls der Form zugreifen. Soll die Methode auch von anderen Units/Klassen aufgerufen werden, deklarierst du sie unter public, sonst private.
Delphi-Quellcode:
TForm1 = class(TForm)
private
  function Add(const a: Integer): Integer;
public
  [...]
Den Code schreibst du nun unter implementation, wobei du den Klassennamen vor den Funktionsnamen hängst (bestimmt die Zugehörigkeit der Methode) oder einfach im type-Abschnitt Strg + Shift + C drückst:
Delphi-Quellcode:
function TForm1.Add(const a: Integer): Integer;
begin
  Result := StrToInt(Edit1.Text) + a;
end;
Das war jetzt ziemlich vereinfacht, Genaueres musst du aber erst wissen, wenn du dich intensiver mit OOP beschäftigst.

Zitat:
Im quelltext musst du bei fenstern noch den namen der unit dazu schreiben.
Erstens gilt das für alle Klassen, zweitens ist es der Klassenname.
Zitat:
Bei functions sollte man auf jedenfall dem result einen default wert zuweisen, falls irgendetwas schief geht.
Wenn eine Exception geworfen wird, muss das Ergebnis der Funktion als ungültig betrachtet werden. Etwas wie
Delphi-Quellcode:
function TForm1.Addieren(a: integer; b: integer): integer;
begin
  Result:=0;
  Result:=a+b;
end;
ist völlig unsinnig.

[edit]ichbins war schneller [/edit]
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
ichbins

Registriert seit: 9. Jul 2005
Ort: Hohenaltheim
1.001 Beiträge
 
Delphi 2005 Personal
 
#8

Re: Deklarierung einer "function"

  Alt 8. Jan 2006, 11:23
Zitat von Khabarakh:
...oder einfach im type-Abschnitt Strg + Shift + C drückst:
unter D2005 vllt, aber schon unter D4? unter D3 konnte man ja nochnicht einmal scrollen
Michael Enßlin
Ich, der ich weiß, mir einzubilden, dass ich weiß, nichts zu wissen, weiß, dass ich nichts weiß.
Sokrates
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#9

Re: Deklarierung einer "function"

  Alt 8. Jan 2006, 11:37
Zitat von ichbins:
Zitat von Khabarakh:
...oder einfach im type-Abschnitt Strg + Shift + C drückst:
unter D2005 vllt, aber schon unter D4?
Keine Ahnung, auf jeden Fall ab D6 (AFAIK aber nur für die > Personal-Versionen).
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Antwort Antwort


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 23:48 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