Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   2 Proceduren vereinen (https://www.delphipraxis.net/167692-2-proceduren-vereinen.html)

m-werk 13. Apr 2012 10:37

2 Proceduren vereinen
 
Hallo,

ich habe in meinem Formular einen Button, der einen Druckbefehl aufruft OHNE dass das Druckermenü erscheint wo ich den Drucker auswählen kann

Code:
procedure THaupt_Form.BtnPrintClick(Sender: TObject);
var rec : TRect;
begin
 //druckbefehl
end;
In meinem Menü habe ich auch einen Druckbutton, der den gleichen Druckbefehl aufruft, nur dass man dort die Möglichkeit hat, den Drucker auszuwählen:
Code:
procedure THaupt_Form.Drucken1Click(Sender: TObject);
var rec : TRect;
begin
if PrintDialog1.Execute then
  begin
    //druckbefehl
  end;
end;
Ich möchte gerne NUR einen Druckbefehl verwenden, und je nach dem welchen Button der User anklickt, soll der Druckbefehl ausgeführt werden. Entweder mit oder ohne PrintDialog.

Luckie 13. Apr 2012 10:39

AW: 2 Proceduren vereinen
 
Du kannst die Schaltflächen am Sender unterscheiden.

Bernhard Geyer 13. Apr 2012 10:40

AW: 2 Proceduren vereinen
 
//druckbefehl in eine eigene Methode auslagern?

DeddyH 13. Apr 2012 10:41

AW: 2 Proceduren vereinen
 
Quick and Dirty: den Sender auswerten.
Delphi-Quellcode:
if Sender = Drucken1 then
  DoPrint := PrintDialog1.Execute
else
  DoPrint := true;
if DoPrint then
  //Druckbefehl

m-werk 13. Apr 2012 10:46

AW: 2 Proceduren vereinen
 
Wie kann ich das verstehen mit "Schaltflächen am Sender unterscheiden"

Ist dann dies so richtig:
Code:
procedure THaupt_Form.BtnPrintClick(Sender: TObject);
 var rec : TRect;
 begin
   DoPrint := true;
     if Sender = Drucken1Click then
       DoPrint := PrintDialog1.Execute;
     if DoPrint then

end;

p80286 13. Apr 2012 10:47

AW: 2 Proceduren vereinen
 
Delphi-Quellcode:
procedure Drucken(mitMenue:boolean);
begin
  if mitMenue then....
Gruß
K-H

DeddyH 13. Apr 2012 10:49

AW: 2 Proceduren vereinen
 
Wie wäre es mit Ausprobieren? Allerdings fehlt da noch eine lokale Boolean-Variable, und bei mir hieß der auszuwertende Sender anders.

m-werk 13. Apr 2012 10:57

AW: 2 Proceduren vereinen
 
Ich versteh's nicht. Sorry.

himitsu 13. Apr 2012 10:59

AW: 2 Proceduren vereinen
 
Was genau verstehst du denn nicht?


Zitat:

Delphi-Quellcode:
if Sender = Drucken1 then
  DoPrint := PrintDialog1.Execute
else
  DoPrint := true;
if DoPrint then
  //Druckbefehl

Delphi-Quellcode:
if (Sender <> Drucken1) or PrintDialog1.Execute then
  //Druckbefehl

m-werk 13. Apr 2012 11:17

AW: 2 Proceduren vereinen
 
Ok, ich habs jetzt:
Code:
procedure THaupt_Form.Drucken1Click(Sender: TObject);
var rec : TRect;
var DoPrint : boolean;
begin
  if Sender = Drucken1 then
    DoPrint := PrintDialog1.Execute
  else
    DoPrint := true;
  if DoPrint then
    begin
      //Druckbefehl
    end;
end;
Beiden Buttons habe ich bei OnClick dieses Ereignis zugewiesen. Funktionieren tut es jetzt.

Irgendwie gefällt mir das aber nicht, da ich in der Procedure einen Button stehen habe.

Aphton 13. Apr 2012 11:37

AW: 2 Proceduren vereinen
 
Das ist ja grauslich; deshalb macht man soetwas:
Delphi-Quellcode:
procedure THaupt_Form. Druckbefehl;
begin
  {...}
end;

procedure THaupt_Form.BtnPrintClick(Sender: TObject);
begin
  Druckbefehl;
end;

procedure THaupt_Form.Drucken1Click(Sender: TObject);
var rec : TRect;
begin
if PrintDialog1.Execute then
  begin
    Druckbefehl;
  end;
end;

m-werk 13. Apr 2012 11:45

AW: 2 Proceduren vereinen
 
Spitze, genau sowas hab ich gesucht.

Hab es zwar etwas ändern müssen, aber es funktioniert prima.

DANKE nochmals

guinnes 13. Apr 2012 12:17

AW: 2 Proceduren vereinen
 
Zitat:

Zitat von m-werk (Beitrag 1161720)
Spitze, genau sowas hab ich gesucht.

Hattest du das nicht selber im 1. Beitrag so geschrieben ??

DeddyH 13. Apr 2012 12:21

AW: 2 Proceduren vereinen
 
Ja eben, ich dachte, genau das will er nicht :gruebel:

RWarnecke 13. Apr 2012 12:43

AW: 2 Proceduren vereinen
 
Der Unterschied zwischen Beitrag #1 und Beitrag #11 ist, dass er nur einmal die Funktion Druckbefehl pflegen muss.

DeddyH 13. Apr 2012 12:46

AW: 2 Proceduren vereinen
 
Das kommt aber darauf an, was man sich hinter dem Kommentar in #1 vorstellen muss. So etwas kommt halt dabei heraus, wenn man mit Informationen geizt.

himitsu 13. Apr 2012 13:24

AW: 2 Proceduren vereinen
 
Wobei Viele auch gerne sowas machen:
Delphi-Quellcode:
procedure THaupt_Form.BtnPrintClick(Sender: TObject);
begin
  //Druckbefehl
end;

procedure THaupt_Form.Drucken1Click(Sender: TObject);
begin
  if PrintDialog1.Execute then
    BtnPrintClick(nil);
end;
Und das mit dem Button in der Prozedur.
Das ist gäniger Alltag ... schließlich ist der Sender ja dafür da, also daß man ihn verwenden und/oder vergleichen kann.

Man könnte aber auch das Property Tag nutzten, also das Property für den Programmierer, welches man z.B. bei Drucken1 auf 1 setzt und dann abprüft.
Delphi-Quellcode:
procedure THaupt_Form.Drucken1Click(Sender: TObject);
begin
  if ((Sender as TComponent).Tag <> 1) or PrintDialog1.Execute then
  begin
    //Druckbefehl
  end;
end;
Wobei der Vergleich über die Variable aber einfacher, übersichtlicher, verständlicher und vorallem fehlerunanfälliger ist, gegenüber dem Tag.


Aber wenn man die Variante mit
Delphi-Quellcode:
procedure THaupt_Form.Druckbefehl;
OOP-mäßig noch weiter fortführt, dann landet am Ende der komplette Funktions-Code in mindestens einer eigenen Klasse.

guinnes 13. Apr 2012 14:01

AW: 2 Proceduren vereinen
 
Zitat:

Zitat von RWarnecke (Beitrag 1161732)
Der Unterschied zwischen Beitrag #1 und Beitrag #11 ist, dass er nur einmal die Funktion Druckbefehl pflegen muss.

Das ist mir schon klar. Aber, was ist im Beitrag 1 "Druckbefehl" ? Ein einfaches print ? Dann wäre eine eigene Methode eher überflüssig.
Zitat:

Zitat von m-werk (Beitrag 1161690)
Delphi-Quellcode:
procedure THaupt_Form.BtnPrintClick(Sender: TObject);
var rec : TRect;
begin
 //druckbefehl
end;
Delphi-Quellcode:
procedure THaupt_Form.Drucken1Click(Sender: TObject);
var rec : TRect;
begin
if PrintDialog1.Execute then
  begin
    //druckbefehl
  end;
end;


RWarnecke 13. Apr 2012 14:08

AW: 2 Proceduren vereinen
 
Unter "Druckbefehl" habe ich jetzt einfach mal interpretiert, dass er hier noch den Druck irgendwie aufbereitet.


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