Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi procedure aufrufen! (https://www.delphipraxis.net/13291-procedure-aufrufen.html)

fredel007 15. Dez 2003 15:44


procedure aufrufen!
 
Hi Leute, ich hab da nen problem,...
Ich hab mir ne eigene Funktion (Aufruf) erstellt und deklariert,
nun will ich sie ganz einfach bei einem klick auf nen Button
aufrufen!
und es klappt net!
bitte helft mir!



Delphi-Quellcode:
  type
  TForm1 = class(TForm)

  procedure Aufruf(Sender: TObject)

  private
   { Private declarations }
  public
    { Public declarations }
  end;


var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ButtonClick(Sender: TObject);
begin
  Aufruf;
end;

procedure TForm1.Aufruf(Sender: TObject);
begin
 \\source
end;

end.
Danke

Matze 15. Dez 2003 15:49

Re: procedure aufrufen!
 
unter private oder public gehört noch:
Delphi-Quellcode:
procedure Aufruf(Sender: TObject);
[Edit]Sry, müsste anders (also ganz oben, wie du's hast) auch gehen. :oops: [/Edit]

ims 15. Dez 2003 15:50

Re: procedure aufrufen!
 
//vergiss es... war schmarrn...

Christian Seehase 15. Dez 2003 15:51

Re: procedure aufrufen!
 
Moin Fredel,

sieht soweit richtig aus.
Könntest Du vielleicht mal das "klappt net" näher spezifizieren?

Matze 15. Dez 2003 15:51

Re: procedure aufrufen!
 
Also bei mir ist die Reihenfolge egal... :gruebel:

Matze 15. Dez 2003 15:52

Re: procedure aufrufen!
 
du musst schreiben:
Delphi-Quellcode:
procedure TForm1.ButtonClick(Sender: TObject);
begin
  Aufruf(Sender);
end;

Nalincah 15. Dez 2003 15:52

Re: procedure aufrufen!
 
1. Die Function/Procedure unter private oder public packen (Muss dann mit TForm1.Aufruf aufgerufen werden) (Sie "gehört" dann praktisch zu der Form1. So kannst du die Proceduren auch aus anderen Units aufrufen.
oder unter private public packen dann wird sie ohne "TForm1." aufgerufen.

2. Semikolon hinter Deklaration

3. Kommentare mit // nicht mit \\

4. Deine Procedure verlangt Parameter. Sender ist die Komponenten die das ganze aufruft. Also z.b.

Delphi-Quellcode:
Aufruf(Button1);
Muss aber nicht sein, du kannst das auch so schreiben:

Delphi-Quellcode:
function test;
....
function test;
begin
end;
So klappt es:

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 declarations }
  public
    { Public declarations }
    procedure Aufruf(Sender: TObject);
  end;


var
  Form1: TForm1;

implementation

{$R *.dfm}

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

procedure TForm1.Aufruf(Sender: TObject);
begin
  ShowMessage('Klappt');
end;

end.

ims 15. Dez 2003 15:53

Re: procedure aufrufen!
 
hast recht matze.

@fredel007: poste immer deine fehlermeldun(en) dazu!! sonst ists rätselraten...

gruss, ims

Tyrael Y. 15. Dez 2003 15:55

Re: procedure aufrufen!
 
Delphi-Quellcode:
  procedure Aufruf(Sender: TObject)

  private
   { Private declarations }
  public
    { Public declarations }
  end;


var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ButtonClick(Sender: TObject);
begin
  Aufruf(Sender);    // <--- den Parameter mit übergeben ;)
end;

procedure TForm1.Aufruf(Sender: TObject);
begin
\\source
end;

end.
;) Gruß

Edit: Mist schon wieder zu langsam :mrgreen:

Nalincah 15. Dez 2003 15:55

Re: procedure aufrufen!
 
Also bei sowas braucht es eigentlich keine Fehlermeldung, das sollte man auch so erkennen

ims 15. Dez 2003 15:56

Re: procedure aufrufen!
 
ja, hier ist es so... aber das ist längst nicht immer so... am besten gleich angewöhnen.

gruss, ims

Nalincah 15. Dez 2003 15:58

Re: procedure aufrufen!
 
Verdammt. Wo ich angefangen hab meine erste Antwort zu tippen waren da noch keine anderen. Und nach dem abschicken waren schon 5 antworten da..bin echt zu langsam geworden

fredel007 15. Dez 2003 15:59

Re: procedure aufrufen!
 
Vielen Dank,....
jetzt klappts!

schöne tage noch!

Nalincah 15. Dez 2003 16:00

Re: procedure aufrufen!
 
poste nochmal deinen source
haste es mal mit meinem probiert?

Matze 15. Dez 2003 16:01

Re: procedure aufrufen!
 
@General2003:
Tyrael Y. war noch langsamer :mrgreen:
Du hast aber eine sehr gute Erläuterung dazugegeben. :thumb:

Matze 15. Dez 2003 16:03

Re: procedure aufrufen!
 
Hier mal ein beispiel, bei mir geht das:
Delphi-Quellcode:
unit Unit1;

interface

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

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

var
  Form1: TForm1;

implementation

{$R *.dfm}

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

procedure TForm1.Farbe(Sender: TObject);
begin
  Color:=clNavy;
end;

end.

Nalincah 15. Dez 2003 16:06

Re: procedure aufrufen!
 
Zitat:

Zitat von Matze
@General2003:
Tyrael Y. war noch langsamer :mrgreen:
Du hast aber eine sehr gute Erläuterung dazugegeben. :thumb:

Mich würd mal interessieren ob das alles richtig war was ich geschrieben hab (Hab grad den Punkt 1 nochmal editiert)

Matze 15. Dez 2003 16:10

Re: procedure aufrufen!
 
Zitat:

Zitat von General2003
1. Die Function/Procedure unter private oder public packen (Muss dann mit TForm1.Aufruf aufgerufen werden) (Sie "gehört" dann praktisch zu der Form1. So kannst du die Proceduren auch aus anderen Units aufrufen.
oder unter private public packen dann wird sie ohne "TForm1." aufgerufen.

also, wenn es so deklariert ist:
Delphi-Quellcode:
private
    { Private-Deklarationen }
    procedure Zeichne;
oder so:
Delphi-Quellcode:
public
    { Public-Deklarationen }
    procedure Zeichne;
und die Procedure so aussieht:
Delphi-Quellcode:
procedure Zeichne;
begin

end;
dann erfolgt der Aufruf mit:
Delphi-Quellcode:
TForm1.Zeichne;
sieht die Procedure jedoch so aus:
Delphi-Quellcode:
procedure TForm1.Zeichne;
begin

end;
dann erfolgt der Aufruf mit:
Delphi-Quellcode:
Zeichne;
Äh, kappiert? :mrgreen:

[Edit]Falls du das so gemeint hast, dann stimmt's ;) Der Rest müsste auch stimmen![/Edit]

Christian Seehase 15. Dez 2003 16:14

Re: procedure aufrufen!
 
Moin Sebastian,

Zitat:

Zitat von General2003
1. Die Function/Procedure unter private oder public packen (Muss dann mit TForm1.Aufruf aufgerufen werden) (Sie "gehört" dann praktisch zu der Form1. So kannst du die Proceduren auch aus anderen Units aufrufen.
oder unter private public packen dann wird sie ohne "TForm1." aufgerufen.

Die Stelle an der die Deklaration stand war schon richtig, obwohl natürlich auch eine andere Stelle möglich gewesen wäre.
Aus anderen Units heraus aufgerufen werden kann sie aber nicht, wenn sie unter private steht. Das geht nur innerhalb der Unit in der sie deklariert wurde.
Die Angabe von TForm ist, unabhängig davon, wo die Deklaration steht, bei der Implementierung immer erforderlich, und die Angabe von Form1 immer ausserhalb der Methoden.

Nalincah 15. Dez 2003 16:15

Re: procedure aufrufen!
 
Wenn ich das so mache:

Delphi-Quellcode:
  public
    { Public declarations }
    procedure Aufruf;
  end;


var
  Form1: TForm1;

implementation

{$R *.dfm}

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

procedure Aufruf;
begin
  ShowMessage('Klappt');
end;
Dann sagt der

Delphi-Quellcode:
[Fehler] Unit1.pas(33): Diese Form des Methodenaufrufs ist nur für Klassenmethoden erlaubt
[Fehler] Unit1.pas(20): Ungenügende Forward- oder External-Deklaration: 'TForm1.Aufruf'
Habs bis jetzt auch noch nie so gemacht. nur andersrum
Delphi-Quellcode:
procedure TForm1.Aufruf;
begin
  // Source
end;
und aufruf mit
Delphi-Quellcode:
begin
  Aufruf;
end;
Ist das ein Fehler von dir oder von mir? Wenn von mir: Wo liegt der Fehler und der Unterschied zwischen den beiden Möglichkeiten?

Matze 15. Dez 2003 16:18

Re: procedure aufrufen!
 
Du hast Recht, es muss:
Delphi-Quellcode:
procedure TForm1.Aufruf;
heißen.

bei
Delphi-Quellcode:
procedure TForm1.Aufruf;
"kennt" deine Procedure das Formular, anders nicht


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