Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Prozedur dopelt nutzen (https://www.delphipraxis.net/31159-prozedur-dopelt-nutzen.html)

Hansa 5. Okt 2004 12:00


Prozedur dopelt nutzen
 
Hi,

ich hoffe, daß das hier jemand versteht. :lol:

mit folgender Prozedur drucke ich etwas aus und/oder schreibe es in eine Listbox.

Delphi-Quellcode:
procedure TfrmAusf.druckln (var lbox : TListBox;st : string);
begin
  if AufDrucker then
    println (st);
  if AufBildschirm then
    lbox.Items.Add (st);
end;
Diese Prozedur ist abgeleitet von einer Methode aus einer anderen Klasse. Diese sieht so aus :

Delphi-Quellcode:
procedure Tfrm.druckln (st : string);
begin
  if AufDrucker then
    println (st);
end;
In der Ursprungsklasse existiert nun eine weitere Prozedur, die intern druckln aufruft. Meine Frage ist nun, wie ich die Parameter behandeln soll. DIe Ursprungsklasse kann ja nicht wissen, daß später ein zweiter Parameter eingeführt wird.

Meine Überlegung ist jetz, direkt 2 Parameter zu benutzen, aber wie behandele ich dann eine nicht vorhandene Listbox ? :shock:

Steve 5. Okt 2004 12:03

Re: Prozedur dopelt nutzen
 
Zitat:

Zitat von Hansa
Meine Überlegung ist jetz, direkt 2 Parameter zu benutzen, aber wie behandele ich dann eine nicht vorhandene Listbox ? :shock:

Ich würd im einfachsten Fall auf lbox=NIL prüfen..

Gruß
Stephan

fiasko 5. Okt 2004 12:05

Re: Prozedur dopelt nutzen
 
Hallo,

die "Nachkommen-Funktion" muß Parameterkompatibel sein. Denn überall wo eine Vorgängerklasse verwendet wird, muß auch eine Nachkommenklasse zumindest syntaktisch Korrekt verwendet werden können.

Mach doch einfach eine neue Funktion, die das Zeug für die Listbox macht und für den rest die alte druckln Aufruft. Es ist meist nicht sinnvoll den gleichen Code nochmal in einem Nachkomnmen zu schreiben.

Muetze1 5. Okt 2004 12:20

Re: Prozedur dopelt nutzen
 
Moin!

Wie schon gesagt: mach es gleich in der Basisklasse:

Delphi-Quellcode:
procedure Tfrm.druckln (Const st : string; Abox : TStrings = Nil);
begin
  if AufDrucker then
    println (st);
  if AufBildschirm And Assigned(Abox) then
    Abox.Add (st);
end;
Der 2. Parameter ist so optional und wenn du ihn angibst, dann z.b. von einer ListBox nur noch das ListBox1.Items angeben, weil durch das TStrings kannst du dort auch einfach z.B. die Lines eines Memos oder sonstiges übergeben und bist nicht mehr so steif auf eine ListBox festgelegt...

MfG
Muetze1

Hansa 5. Okt 2004 12:31

Re: Prozedur dopelt nutzen
 
Das mit dem NIL, ja da bin ich hängen geblieben :

Delphi-Quellcode:
druckln (nil,'');
in diesem Fall also eine Leerzeile, geht nicht !

Muetze1 5. Okt 2004 13:01

Re: Prozedur dopelt nutzen
 
Moin!

Falls das der Aufruf zu meiner Procedure sein soll, dann schau nochmal in die Parameterliste: ich habe die Reihenfolge vertauscht. Erst der String und dann, optional, die ListBox.Items.

Delphi-Quellcode:
druckln('', Nil);
MfG
Muetze1

Hansa 5. Okt 2004 14:38

Re: Prozedur dopelt nutzen
 
Thx, es geht jetzt doch. Die falschen Parameter habe ich schon gesehen. Aber man sollte es vermeiden VAR-Parameter mit NIL zu besetzen. Das kann ja wohl nicht gehen. :mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:27 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 by Thomas Breitkreuz