![]() |
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:
ist wahrscheinlich ganz einfach, aber ich kriegs echt nicht hin :duck:
Procedure TForm1.Button1Click(Sender: TObject);
begin ??? // hier will ich die andere Prozedur aufrufen end; MfG Honigdachs |
Re: Prozedur aus einer anderen Prozedur aufrufen
ganze einfach:
Delphi-Quellcode:
Procedure TForm1.Button1Click(Sender: TObject);
begin NameDeinerProcedure(Parameter1, Parameter2, Parameter3,...); end; |
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:
wie muss ich das dann genau mit den Parametern machen um es in der anderen Prozedur aufzurufen?
procedure TEST;
begin ShowMessage('Prozedur Test'); end; MfG, Honigdachs |
Re: Prozedur aus einer anderen Prozedur aufrufen
dann hat deine procedure keine Parameter
Delphi-Quellcode:
ShowMessage ist übrigens auch eine funktion/procedure und die rufst du auch bereits auf :wink:
test();
|
Re: Prozedur aus einer anderen Prozedur aufrufen
Ok, jetzt habe ich das Problem, dass
Delphi-Quellcode:
auftritt, sobald ich das compilieren will. Ich weiß echt nicht mehr weiter.
[Fehler] Unit1.pas(19): Ungenügende Forward- oder External-Deklaration: 'TForm1.TEST'
|
Re: Prozedur aus einer anderen Prozedur aufrufen
Probier es mit Form1.Test nicht TForm1.Test.
Delphi-Quellcode:
funktioniert bei mir einwandfrei :)
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. edit: schreibungsrechtfehler |
Re: Prozedur aus einer anderen Prozedur aufrufen
Also mit Delphi 5 gehts leider nicht. :cry:
|
Re: Prozedur aus einer anderen Prozedur aufrufen
Kuck dir mal
![]() |
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:
Also im Wesentlichen zecke's Lösung, jedoch mit den "Parametern ()". Scheint wohl bei Delphi 5 nötig zu sein.
procedure test();
begin ShowMessage('Test'); end; procedure Tform1.button1click(sender: tobject); begin test(); end; MfG, Honigdachs |
Re: Prozedur aus einer anderen Prozedur aufrufen
Zitat:
|
Re: Prozedur aus einer anderen Prozedur aufrufen
Zitat:
MfG Honigdachs PS: Kann man eigentlich aus einer anderen Prozedur das FormCreate nochmals aufrufen? |
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:
finde ich aber wie gesagt, verwirrend und nicht schön. wenns also geht, einfach in eine funktion umlagern. :mrgreen:
form1.OnCreate(form1);
|
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.
|
Re: Prozedur aus einer anderen Prozedur aufrufen
Kannst Du schon so machen, denke ich :)
|
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 |
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: |
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;
|
Re: Prozedur aus einer anderen Prozedur aufrufen
Zitat:
Nochmals vielen Dank an alle, die geholfen haben! |
AW: Re: Prozedur aus einer anderen Prozedur aufrufen
Zitat:
Somit der Hinweis von mir: diese Definition muss auch so in Delphi XE7 umgesetzt werden. Weiter so! |
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:
funktioniert,
procedure test;
begin ShowMessage('Test'); end; procedure TForm1.Button1Click(Sender: TObject); begin test(); end;
Delphi-Quellcode:
funktioniert auch,
procedure test();
begin ShowMessage('Test'); end; procedure TForm1.Button1Click(Sender: TObject); begin test(); end;
Delphi-Quellcode:
ebenso. Wo ist das Problem?
procedure test();
begin ShowMessage('Test'); end; procedure TForm1.Button1Click(Sender: TObject); begin test; end; |
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?!
|
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.
|
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) |
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. |
AW: Prozedur aus einer anderen Prozedur aufrufen
Chaos nicht wirklich.
Es wird ja immer das Test genommen, was als letztes sichtbar ist. |
AW: Prozedur aus einer anderen Prozedur aufrufen
Zitat:
Soviel zu "noch nie" ;-) |
AW: Prozedur aus einer anderen Prozedur aufrufen
Zitat:
|
AW: Prozedur aus einer anderen Prozedur aufrufen
Zitat:
Delphi-Quellcode:
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.
type
TFunc=Function(): Integer; Function Bar(): Integer; begin Result := 42; end; var pFunc: TFunc; funcResult: Integer; begin pFunc := Bar; funcResult := pFunc; end. |
AW: Prozedur aus einer anderen Prozedur aufrufen
OK, sowas gabs unter TurboPascal noch nicht.
|
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 01:46 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz