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
Benutzerbild von Luckie
Luckie

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

AW: Unter einer Procedure eine andere Procedur aufrufen

  Alt 31. Dez 2012, 02: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
 
#2

AW: Unter einer Procedure eine andere Procedur aufrufen

  Alt 31. Dez 2012, 10: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
 
#3

AW: Unter einer Procedure eine andere Procedur aufrufen

  Alt 31. Dez 2012, 20: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
 
#4

AW: Unter einer Procedure eine andere Procedur aufrufen

  Alt 31. Dez 2012, 21: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.687 Beiträge
 
Delphi 2007 Enterprise
 
#5

AW: Unter einer Procedure eine andere Procedur aufrufen

  Alt 1. Jan 2013, 07: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
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.656 Beiträge
 
Delphi 12 Athens
 
#6

AW: Unter einer Procedure eine andere Procedur aufrufen

  Alt 1. Jan 2013, 16:38
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.
Das ist ja ein Hammer-Argument , zumal es so etwas wie Variablen ja gar nicht gibt.
Delphi-Quellcode:
var
  DS: TDataset;
begin
  DS := DataModule1.Dataset1;
  DS.Close;
  DS.SelectSQL.Clear;
  //etc. blabla
end;
Ist auch nicht wirklich länger, lässt sich debuggen, und die Code-Vervollständigung tut auch. Prinzipiell geht mir das ja auch hinten vorbei, ob jemand meint, with nutzen zu müssen, die Übersicht leidet aber meistens enorm, von den anderen Nachteilen ganz abgesehen.
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
 
#7

AW: Unter einer Procedure eine andere Procedur aufrufen

  Alt 1. Jan 2013, 22:13
"With" grundsätzlich nicht zu benutzen, das ist ja auch völlig überzogen. Man schaue sich das mal an :
Wenn wir schon bei With sind, das geht wahrscheinlich noch kürzer (natürlich ohne Schießgewehr).
Delphi-Quellcode:
procedure TAusg.FormShow(Sender: TObject);
begin
  with DataModule1.Dataset1, SelectSQL do begin
    Close;
    Clear;
    Add ('SELECT A.NR,A.BEZ, SP.* FROM ART8 A,')
    Add ('A1,')
    Add ('A2,')
...
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#8

AW: Unter einer Procedure eine andere Procedur aufrufen

  Alt 1. Jan 2013, 23:12
Vielleicht sollten wir zum Thema With/Witz einen eigenen OT - Thread aufmachen.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  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 04:28 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