AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Unter einer Procedure eine andere Procedur aufrufen
Thema durchsuchen
Ansicht
Themen-Optionen

Unter einer Procedure eine andere Procedur aufrufen

Ein Thema von EMS · begonnen am 30. Dez 2012 · letzter Beitrag vom 1. Jan 2013
Antwort Antwort
Seite 1 von 2  1 2      
EMS

Registriert seit: 19. Dez 2012
97 Beiträge
 
#1

Unter einer Procedure eine andere Procedur aufrufen

  Alt 30. Dez 2012, 15:13
Delphi-Version: 5
Hallo
Wie oben schon geschrieben.
Ich habe nun eine Prozedure fertig die funktioniert.
Diese möchte ich nun zusätzlich in einer anderen aufrufen.
wie muss ich das programmieren?

procedure TForm1.Button2Click(Sender: TObject);
begin
...
...
procedure TForm1.Button3Click(Sender: TObject);
...
...
...
end;

funktioniert nicht?
Was mach ich hier falsch?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.539 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Unter einer Procedure eine andere Procedur aufrufen

  Alt 30. Dez 2012, 15:16
Die Methode heißt Button3Click und hat einen TObject-Parameter, und so muss sie auch aufgerufen werden.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#3

AW: Unter einer Procedure eine andere Procedur aufrufen

  Alt 30. Dez 2012, 15:19
Da gibt es zwei Möglichkeiten.

Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
begin
...
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  Button2Click(nil);
end;
oder

Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
begin
...
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  Button2Click(Sender);
end;
Sender ist das Objekt von der die Prozedur aufgerufen hat. Bei Button3Click wahrscheinlich Button3. Das kann man ganz sicher erkennen mit

Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
begin
  if Sender = Button3 then ShowMessage('Button3 wurde geklickt');
Somit ist die zweite Methode allgemein nicht falsch. Wenn es aber keine Rolle spielt, dann einfach nil als Parameter mitschicken.
  Mit Zitat antworten Zitat
terence14
(Gast)

n/a Beiträge
 
#4

AW: Unter einer Procedure eine andere Procedur aufrufen

  Alt 30. Dez 2012, 15:30
Ich verwende folgende Möglichkeiten:

Delphi-Quellcode:

procedure TForm1._procedure1(Sender: TObject);
begin
// mach was
end;

procedure TForm1._procedure2;
begin
//mach was
end;

procedure _procedure3;
begin
//mach was
end;

procedure TForm1.bButton1Click(Sender: TObject);
begin
_procedure1(Sender);

_procedure2;

_procedure3;
end;
MfG,
terence
  Mit Zitat antworten Zitat
delnu
(Gast)

n/a Beiträge
 
#5

AW: Unter einer Procedure eine andere Procedur aufrufen

  Alt 30. Dez 2012, 20:19
Zitat:
procedure TForm1.Button2Click(Sender: TObject);
begin
...
...
procedure TForm1.Button3Click(Sender: TObject);
...
...
...
end;
Was daran falsch ist ? Nun, vor der zweiten Prozedur fehlt das "end" der ersten, und zu Beginn der zweiten das "begin" !

Um lokale Funktionen/Prozeduren innnerhalb einer anderen unterzubringen, kann dies z.B. so aussehen :
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);

procedure local_proc;
begin
end;

fuction local_func: boolean;
begin
 local_func:=true;
end;

begin { Hier beginnt Button2Click }
 if local_func then local_proc; // Wenn das Ergebnis von "local_func" true ist, "local_proc" aufrufen
end;
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

AW: Unter einer Procedure eine andere Procedur aufrufen

  Alt 31. Dez 2012, 01:56
Da jetzt die Lösung klar ist, noch etwas zum Programmierstil. Ich halte das für schlechten Programmierstil. Zum einem wird da etwas in die GUI gewurschtelt, was da nicht hingehört und zum anderen leidet dabei die Übersichtlichkeit. Besser wäre es die Routine auszulagern in eine separate Routine und diese dann von beiden Ereignissen aufzurufen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#7

AW: Unter einer Procedure eine andere Procedur aufrufen

  Alt 31. Dez 2012, 09:37
Ob schlechter Programmierstil, das ist eine Sache für sich, aber es wird irgendwann unpraktisch. Denn nicht selten überlegt man es sich anders und was mal in Prozedur für Button1 lag, ist plötzlich etwas fehl am Platz, wenn man es sich anders überlegt und den Button entfernt, weil man z. B. den Aufruf jetzt über Menü durchführt. Und plötzlich steht da Button1Click und es gibt keinen Button.
Delphi-Quellcode:
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    procedure ButtonClick(Sender: TObject);
  end;

...

procedure TForm1.ButtonClick(Sender: TObject);
begin
  if Sender = Button1 then
    ShowMessage('Hallo Welt!');

  if Sender = Button2 then
    ShowMessage('Hallo Galaxis!');
end;

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

procedure TForm1.Button2Click(Sender: TObject);
begin
  ButtonClick(Sender);
end;
  Mit Zitat antworten Zitat
delnu
(Gast)

n/a Beiträge
 
#8

AW: Unter einer Procedure eine andere Procedur aufrufen

  Alt 31. Dez 2012, 19:48
Das interessante Beispiel gerade läßt sich noch vereinfachen, indem "ButtonClick" gleich direkt jedem Button zugewiesen wird. Sowas in der Art habe ich mal mit dem "tag"-Attribut anstelle der "Sender"-Abfrage gemacht - und prompt wurde mir "schlechter Programmierstil" vorgeworfen. Statt "if ... then" läßt sich meist auch das übersichtlichere und einfachere "case" benutzen.

Jeder wird im Umlaufe der Jahre seine Lieblingsmethoden entwickeln. In jedem Fall dürfte es sinnvoll sein, immer wieder benutzte Methoden in eine Unit oder notfalls sogar als Include-Datei auszulagern.

Sehr schön finde ich auch immer, wenn man Prozeduren nicht spezifisch ans jeweilige Programm bindet, so daß bei der Deklaration z.B. das vorangestellte "TForm1" oder was auch immer entfallen kann.

Statt z.B. ein im Formular vorhandenes StringGrid direkt anzusprechen, kann man es als Parameter übergeben und hat dadurch gleich was Universelles, das sich auslagern läßt. Dann läßt sich auch gut mit dem bei manchen verpönten "with" arbeiten.
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#9

AW: Unter einer Procedure eine andere Procedur aufrufen

  Alt 31. Dez 2012, 20:43
Dann läßt sich auch gut mit dem bei manchen verpönten "with" arbeiten.
"With" grundsätzlich nicht zu benutzen, das ist ja auch völlig überzogen. Man schaue sich das mal an :

Delphi-Quellcode:
procedure TAusg.FormShow(Sender: TObject);
begin
  with DataModule1.Dataset1 do begin
    Close;
    SelectSQL.Clear;
    SelectSQL.Add ('SELECT A.NR,A.BEZ, SP.* FROM ART8 A,')
    SelectSQL.Add ('A1,')
    SelectSQL.Add ('A2,')
...
    SelectSQL.Add ('SONDER8 SP ');
    SelectSQL.Add ('WHERE (A.ID = SP.ID_ART) AND...');
    SelectSQL.Add ('AND A.NR >= :VonArtNr');
    SelectSQL.Add ('AND A.NR <= :BisArtNr');
    SelectSQL.Add ('ORDER BY A.NR');
    ParamByName...
    ParamByName...
    ParamByName...
    Open;
  end;
  inherited; // erst hier, sonst DS noch nicht besetzt
end;
Und dann das :

Delphi-Quellcode:
procedure TAusg.FormShow(Sender: TObject);
begin
  DataModule1.Dataset1.Close;
  DataModule1.Dataset1.SelectSQL.Clear;
  DataModule1.Dataset1.SelectSQL.Add ('SELECT A.NR,A.BEZ, SP.* FROM ART8 A,')
  DataModule1.Dataset1.SelectSQL.Add ('A1,')
  DataModule1.Dataset1.SelectSQL.Add ('A2,')
...
  DataModule1.Dataset1.SelectSQL.Add ('SHOPKUSONDER8 SP ');
  DataModule1.Dataset1.SelectSQL.Add ('WHERE (A.ID = SP.ID_ART) AND...');
  DataModule1.Dataset1.SelectSQL.Add ('AND A.NR >= :VonArtNr');
  DataModule1.Dataset1.SelectSQL.Add ('AND A.NR <= :BisArtNr');
  DataModule1.Dataset1.SelectSQL.Add ('ORDER BY A.NR');
  DataModule1.Dataset1.ParamByName...
  DataModule1.Dataset1.ParamByName...
  DataModule1.Dataset1.ParamByName...
  DataModule1.Dataset1.Open;
  inherited; // erst hier, sonst DS noch nicht besetzt
end;
Wer da das with ignoriert und alles ausschreibt, der ist selber Schuld. So etwas hilft höchstens den Monitorherstellern. Für unnötigerweise lange Zeilen hilft ja schon ein 32" Monitor, um alles direkt zu sehen. Beim Drucken gehts dann eben wieder von vorne los.
Gruß
Hansa
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#10

AW: Unter einer Procedure eine andere Procedur aufrufen

  Alt 1. Jan 2013, 06:09
Das hängt mit einer Sache zusammen, die ich in #Develop lieben gelernt habe (mag in anderen IDEs auch gegeben sein, in Delphi nicht): Wenn ich in einer neuen Zeile etwas schreibe, wird mir gleich alles im Scope als Autovervollständigung geboten, noch vor dem ersten Punkt-Operator, und zwar in der Reihenfolge der zuletzt häufigsten Benutzung. Damit ist das Schreiben von z.B. "DataModule1" nach dem ersten Mal eine Sache von (wie eingetippt) "D." und fertig. Selbiges zieht sich auch nach dem "." durch, so dass ein with am Ende fast noch umständlicher zu schreiben wäre. Letztlich also alles eine Frage der IDE Unterstützung. (Und ich würde in Delphi gerne öfter weniger dazu verleitet sein es zu nutzen.)
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 11:51 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