Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Prozedur aus einer anderen Prozedur aufrufen (https://www.delphipraxis.net/93940-prozedur-aus-einer-anderen-prozedur-aufrufen.html)

Honigdachs 13. Jun 2007 15:42


Prozedur aus einer anderen Prozedur aufrufen
 
Hallo,

so, Honigdachs hat noch mal eine Frage, diesmal ist es allerdings echt peinlich :oops:

Ich kriegs einfach nicht auf die Reihe, eine Procedure aus einer Procedure aufzurufen.
D.h., ich habe
Delphi-Quellcode:
Procedure TForm1.Button1Click(Sender: TObject);
begin
  ??? // hier will ich die andere Prozedur aufrufen
end;
ist wahrscheinlich ganz einfach, aber ich kriegs echt nicht hin :duck:

MfG

Honigdachs

SirThornberry 13. Jun 2007 15:44

Re: Prozedur aus einer anderen Prozedur aufrufen
 
ganze einfach:
Delphi-Quellcode:
Procedure TForm1.Button1Click(Sender: TObject);
begin
  NameDeinerProcedure(Parameter1, Parameter2, Parameter3,...);
end;

Honigdachs 13. Jun 2007 15:53

Re: Prozedur aus einer anderen Prozedur aufrufen
 
Und was hat das genau mit den Parametern auf sich?
Wenn die Prozedur bspw. TEST heißt, also
Delphi-Quellcode:
procedure TEST;
begin
  ShowMessage('Prozedur Test');
end;
wie muss ich das dann genau mit den Parametern machen um es in der anderen Prozedur aufzurufen?

MfG,

Honigdachs

SirThornberry 13. Jun 2007 15:54

Re: Prozedur aus einer anderen Prozedur aufrufen
 
dann hat deine procedure keine Parameter
Delphi-Quellcode:
test();
ShowMessage ist übrigens auch eine funktion/procedure und die rufst du auch bereits auf :wink:

Honigdachs 13. Jun 2007 15:59

Re: Prozedur aus einer anderen Prozedur aufrufen
 
Ok, jetzt habe ich das Problem, dass
Delphi-Quellcode:
[Fehler] Unit1.pas(19): Ungenügende Forward- oder External-Deklaration: 'TForm1.TEST'
auftritt, sobald ich das compilieren will. Ich weiß echt nicht mehr weiter.

zecke 13. Jun 2007 16:17

Re: Prozedur aus einer anderen Prozedur aufrufen
 
Probier es mit Form1.Test nicht TForm1.Test.

Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure test;
begin
  showmessage('blöa');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
test;
end;


end.
funktioniert bei mir einwandfrei :)

edit: schreibungsrechtfehler

Honigdachs 13. Jun 2007 16:43

Re: Prozedur aus einer anderen Prozedur aufrufen
 
Also mit Delphi 5 gehts leider nicht. :cry:

Dax 13. Jun 2007 16:48

Re: Prozedur aus einer anderen Prozedur aufrufen
 
Kuck dir mal dies hier an, dort ist alles genau beschrieben.

Honigdachs 13. Jun 2007 16:58

Re: Prozedur aus einer anderen Prozedur aufrufen
 
Erstmal vielen Dank für die vielen Beiträge!
Ich habe es folgendermaßen gelöst:
Delphi-Quellcode:
procedure test();
begin
  ShowMessage('Test');
end;

procedure Tform1.button1click(sender: tobject);
begin
  test();
end;
Also im Wesentlichen zecke's Lösung, jedoch mit den "Parametern ()". Scheint wohl bei Delphi 5 nötig zu sein.

MfG,

Honigdachs

leddl 13. Jun 2007 17:02

Re: Prozedur aus einer anderen Prozedur aufrufen
 
Zitat:

Zitat von Honigdachs
Also im Wesentlichen zecke's Lösung, jedoch mit den "Parametern ()". Scheint wohl bei Delphi 5 nötig zu sein.

Das hat dir SirThornberry doch bereits in Beitrag #4 vorgeschlagen :gruebel:

Honigdachs 13. Jun 2007 17:45

Re: Prozedur aus einer anderen Prozedur aufrufen
 
Zitat:

Zitat von leddl
Zitat:

Zitat von Honigdachs
Also im Wesentlichen zecke's Lösung, jedoch mit den "Parametern ()". Scheint wohl bei Delphi 5 nötig zu sein.

Das hat dir SirThornberry doch bereits in Beitrag #4 vorgeschlagen :gruebel:

Schon, aber zecke's Lösung war dann doch anwenderfreundlicher bzw. für einen Anfänger verständlicher.

MfG

Honigdachs

PS: Kann man eigentlich aus einer anderen Prozedur das FormCreate nochmals aufrufen?

zecke 13. Jun 2007 18:10

Re: Prozedur aus einer anderen Prozedur aufrufen
 
:hi:

Unwahrscheinlich, aber wenn, dann ist es keine gute Lösung (denke ich).

Packe das was du im OnCreate der Form machen willst in eine eigene Funktion, diese kannst du dann im oncreate der form aufrufen und auch sonst im code verwenden.


edit: sowas geht
Delphi-Quellcode:
form1.OnCreate(form1);
finde ich aber wie gesagt, verwirrend und nicht schön. wenns also geht, einfach in eine funktion umlagern. :mrgreen:

Honigdachs 13. Jun 2007 20:07

Re: Prozedur aus einer anderen Prozedur aufrufen
 
Die FormCreate nochmals aufzurufen war halt meine Idee, um die Felder eines Datenbank-Formulars zurückzusetzen (inkl. Image). Mir fiel nichts anderes ein, außer eben das Programm praktisch per FormCreate einfach nochmal zu resetten.

zecke 13. Jun 2007 20:43

Re: Prozedur aus einer anderen Prozedur aufrufen
 
Kannst Du schon so machen, denke ich :)

Honigdachs 13. Jun 2007 21:11

Re: Prozedur aus einer anderen Prozedur aufrufen
 
Oder gibt es eine bessere Möglichkeit, bereits geladene Bilder wieder zu entfernen und in einen leeren Zustand zu versetzen?

MfG,

Honigdachs

Mackhack 13. Jun 2007 21:36

Re: Prozedur aus einer anderen Prozedur aufrufen
 
Was meinst du denn mit einem Leeren Zunstand?

Ne Flasche Bier kann einen Leeren Zustand haben, aber ein Bild? :gruebel:

zecke 13. Jun 2007 22:47

Re: Prozedur aus einer anderen Prozedur aufrufen
 
Ich vermute er meint, wie er ein geladenes Bild wieder aus dem Image herausbekommt. Ich mache das so:
Delphi-Quellcode:
DeinImage.Picture:=nil;

Honigdachs 15. Jun 2007 12:40

Re: Prozedur aus einer anderen Prozedur aufrufen
 
Zitat:

Zitat von zecke
Ich vermute er meint, wie er ein geladenes Bild wieder aus dem Image herausbekommt. Ich mache das so:
Delphi-Quellcode:
DeinImage.Picture:=nil;

Ja, genau das hab ich gemeint :-D Danke!

Nochmals vielen Dank an alle, die geholfen haben!

Erwin Pälzig 11. Mär 2015 17:35

AW: Re: Prozedur aus einer anderen Prozedur aufrufen
 
Zitat:

Zitat von Honigdachs (Beitrag 637913)
Erstmal vielen Dank für die vielen Beiträge!
Ich habe es folgendermaßen gelöst:
Delphi-Quellcode:
procedure test();
begin
  ShowMessage('Test');
end;

procedure Tform1.button1click(sender: tobject);
begin
  test();
end;
Also im Wesentlichen zecke's Lösung, jedoch mit den "Parametern ()". Scheint wohl bei Delphi 5 nötig zu sein.

MfG,

Honigdachs

Besten Dank für den Beitrag, hat mir auch geholfen! :-D

Somit der Hinweis von mir: diese Definition muss auch so in Delphi XE7 umgesetzt werden.
Weiter so!

DeddyH 11. Mär 2015 18:45

AW: Prozedur aus einer anderen Prozedur aufrufen
 
Hab ich was falsch verstanden, wenn wir schon Threadleichen schänden? Ich habe das gerade unter Delphi 5 ausprobiert:
Delphi-Quellcode:
procedure test;
begin
  ShowMessage('Test');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  test();
end;
funktioniert,
Delphi-Quellcode:
procedure test();
begin
  ShowMessage('Test');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  test();
end;
funktioniert auch,
Delphi-Quellcode:
procedure test();
begin
  ShowMessage('Test');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  test;
end;
ebenso. Wo ist das Problem?

PaddyVII 12. Mär 2015 07:18

AW: Prozedur aus einer anderen Prozedur aufrufen
 
in XE6 (meiner Erfahrung nach zumindest) kann man einfach seine Prozedur aufrufen, wenn die parameter hat gibt man sie mit,w enn nicht dann nicht so einfach ist das...oder irre ich mich?!

baumina 12. Mär 2015 07:23

AW: Prozedur aus einer anderen Prozedur aufrufen
 
Das ist schon immer so. Eine Prozedur oder Funktion, die keine Parameter erwartet benötigt beim Aufruf die zwei unnötigen Klammern () nicht. Das brauchen vielleicht andere Programmiersprachen, Pascal zumindest noch nie.

himitsu 12. Mär 2015 07:33

AW: Prozedur aus einer anderen Prozedur aufrufen
 
Das ist auch garantiert mindestens seit Delphi 7 so.

Es gibt Sprachen, da müssen Proceduren/Funktionen immer mit Parametern aufgerufen werden und sei es nur mit leeren
Delphi-Quellcode:
()
.
Die Verwunderung/Frage hier bestand nun nur noch darin, ob das auch in/vor Delphi 5 so war.

Der TE meint es ginge nicht, aber andere Tests belegen, daß es doch ging.
Meine "Vermutung": DiePprozedur wurde "anfangs" nach dem Aufruf deklariert. (nicht davor, bzw. ohne rechtzeitige Forwarddeklaration)

baumina 12. Mär 2015 08:00

AW: Prozedur aus einer anderen Prozedur aufrufen
 
Schon zu TurboPascal-Zeiten konnte man auf leere Klammern () beim Aufruf einer Prozedur verzichten, das ist also nichts delphispezifisches.

Wenn es natürlich mehrere Sachen gibt, die test heißen (z.B. eine procedure und eine Variable), dann kanns natürlich echt zum Chaos kommen.

himitsu 12. Mär 2015 08:35

AW: Prozedur aus einer anderen Prozedur aufrufen
 
Chaos nicht wirklich.
Es wird ja immer das Test genommen, was als letztes sichtbar ist.

Mikkey 12. Mär 2015 13:03

AW: Prozedur aus einer anderen Prozedur aufrufen
 
Zitat:

Zitat von baumina (Beitrag 1293100)
Das ist schon immer so. Eine Prozedur oder Funktion, die keine Parameter erwartet benötigt beim Aufruf die zwei unnötigen Klammern () nicht. Das brauchen vielleicht andere Programmiersprachen, Pascal zumindest noch nie.

Zumindest dort, wo es sich um eine Prozedurvariable handelt, ist beim Aufruf die Klammerung erforderlich, weil der Compiler sonst nicht erkennt, dass hier die referenzierte Prozedur aufgerufen werden soll.

Soviel zu "noch nie" ;-)

baumina 12. Mär 2015 13:16

AW: Prozedur aus einer anderen Prozedur aufrufen
 
Zitat:

Zitat von Mikkey (Beitrag 1293199)
Zitat:

Zitat von baumina (Beitrag 1293100)
Das ist schon immer so. Eine Prozedur oder Funktion, die keine Parameter erwartet benötigt beim Aufruf die zwei unnötigen Klammern () nicht. Das brauchen vielleicht andere Programmiersprachen, Pascal zumindest noch nie.

Zumindest dort, wo es sich um eine Prozedurvariable handelt, ist beim Aufruf die Klammerung erforderlich, weil der Compiler sonst nicht erkennt, dass hier die referenzierte Prozedur aufgerufen werden soll.

Soviel zu "noch nie" ;-)

Was meinst du denn jetzt genau? Hast du dafür mal ein Beispiel?

Mikkey 12. Mär 2015 14:27

AW: Prozedur aus einer anderen Prozedur aufrufen
 
Zitat:

Zitat von baumina (Beitrag 1293202)

Was meinst du denn jetzt genau? Hast du dafür mal ein Beispiel?

Ich meinte sowas:

Delphi-Quellcode:
type
  TFunc=Function(): Integer;

Function Bar(): Integer;
begin
  Result := 42;
end;

var
  pFunc: TFunc;
  funcResult: Integer;
begin
  pFunc := Bar;
  funcResult := pFunc;
end.
Aber mit dem aktuellen XE7 funktioniert das, beim Delphi7 hat er aber AFAIR noch gemault, dass er Typ Funktion nicht in Integer verwandelt könne.

baumina 12. Mär 2015 15:24

AW: Prozedur aus einer anderen Prozedur aufrufen
 
OK, sowas gabs unter TurboPascal noch nicht.

himitsu 12. Mär 2015 17:32

AW: Prozedur aus einer anderen Prozedur aufrufen
 
Delphi führt an vielen Stellen eine automatische (De)Referenzierung durch.

* Prozedurvariablen
* zuweisen von Prozedurzeigern (x:=@proc = x:=proc)
* Record-Pointer ... sobald da ein Punkt folgt, kann man das ^ weglassen (p^.x = p.x)
(nur bei mehrfachen Pointern muß man aufpassen)
Ist vorallem praktisch, da man den Code später fast problemlos auf Daten-Objekte/Interfaces umstellen kann. :angle:


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