AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Var ohne Variable bzw. mit Variablen-Dummy

Ein Thema von Schwedenbitter · begonnen am 14. Sep 2013 · letzter Beitrag vom 14. Sep 2013
Antwort Antwort
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#1

Var ohne Variable bzw. mit Variablen-Dummy

  Alt 14. Sep 2013, 11:17
Hallo,

ich bin mir nicht sicher, ob mein Titel erklärt, was mein Problem ist und ob ich überhaupt in der richtigen Rubrik schreibe. Ich bin aber auch ideenlos, wie man das besser umschreiben könnte.

In einer VCL-Anwendung existiert eine Procedure für das Ereignis OnKeyPress für ein TEdit-Feld. Es ist ein Setup-Fenster und es wid geprüft, ob der Benutzer Änderungen gemacht hat. Diese Procedure wird - weil gleicher Code - von weiteren TEdits aufgerufen. Ich stehe jetzt vor dem Problem, dass ich die Procedure auch von Ereignissen anderen Componenten (TUpDown) aus aufrufen möchte. Dabei stellt sich aber "das Problem", dass OnKeyPress so gestaltet ist, dass eine Rückgabe über Var Key:Char; erfolgt.

Ich kann jetzt natürlich in jeder der aufrufenden Prozeduren eine sinnlose Variable definieren, mitgeben und das Ergebnis nicht beachten. Ich meine aber, mich zu erinnern, dass man das auch eleganter lösen konnte. Leider weiß ich nicht wie und ich weiß auch nicht, nach welchen Stichworten ich suchen muss. Um mein Problem noch anschaulicher zu machen, hier mal quick and dirty folgenden kurzen Code:
Delphi-Quellcode:
Procedure TForm1UpDown1Changing(Sender: TObject);
Var
   Ch : Char;
Begin
   HandleKeyPress(nil, Ch);
End;

// Das möchte ich gern verkürzen in so etwas wie

Procedure TForm1.UpDown1Changing(Sender: TObject);
Begin
   HandleKeyPress(nil, ...);
End;
Geht das überhaupt? Falls ja, wie?

Gruß, Alex
Alex Winzer
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.336 Beiträge
 
Delphi XE2 Professional
 
#2

AW: Var ohne Variable bzw. mit Variablen-Dummy

  Alt 14. Sep 2013, 11:22
Hallo,

wie ist HandleKeyPress definiert?

Ich vermute mal so:
procedure HandleKeyPress(Sender: TObject; c: Char); .

du kannst in der Definition ein "Default" definieren
procedure HandleKeyPress(Sender: TObject; c: Char = '.'); .

Dadurch reicht beim Aufruf (wenn man c nicht braucht):
HandleKeyPress(nil); .
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<

Geändert von Helmi (14. Sep 2013 um 11:36 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#3

AW: Var ohne Variable bzw. mit Variablen-Dummy

  Alt 14. Sep 2013, 12:24
In einer VCL-Anwendung existiert eine Procedure für das Ereignis OnKeyPress für ein TEdit-Feld. Es ist ein Setup-Fenster und es wid geprüft, ob der Benutzer Änderungen gemacht hat. Diese Procedure wird - weil gleicher Code - von weiteren TEdits aufgerufen. Ich stehe jetzt vor dem Problem...
Der Code der sich bislang in der Procedure HandleKeyPress() befindet gehört in eine eigene Methode (Namensvorschlag DataChanged()) ausgelagert.
Delphi-Quellcode:
Procedure TForm1.UpDown1Changing(Sender: TObject);
Begin
   DataChanged;
End;
Die bisherige Methode HandleKeyPress() wird "entkernt" und ruft natürlich auch DataChanged() auf.
Eigentlich ganz einfach.
fork me on Github

Geändert von sx2008 (14. Sep 2013 um 12:27 Uhr)
  Mit Zitat antworten Zitat
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#4

AW: Var ohne Variable bzw. mit Variablen-Dummy

  Alt 14. Sep 2013, 12:25
Danke für die Vorschläge.

wie ist HandleKeyPress definiert?

Ich vermute mal so:
procedure HandleKeyPress(Sender: TObject; c: Char); .
Fast.
Es ist so definiert Procedure AccountChange(Sender: TObject; Var Key: Char);
du kannst in der Definition ein "Default" definieren
procedure HandleKeyPress(Sender: TObject; c: Char = '.'); .
Das klappt leider nicht.
Wenn ich im Interface-Teil die Definition per Hand so ändere Procedure AccountChange(Sender: TObject; Var Key: Char = '.'); , kommt beim Compilieren die Fehlermeldung "E2239: Der Vorgabeparameter 'key' muss als Wert oder Konstante übergeben werden.".

Die Möglichkeit, Code durch z.B. Const Variable: Boolean = True erheblich zu verkürzen, ist mir bekannt. Das klappt aber nach meiner Kenntnis eben nur bei Konstanten und nicht bei Variablen. Ich habe das vorübergehend so "gelöst", dass ich eine globale Variable definiert habe und die dann immer als "Opfergabe" mitschicke.

Immerhin spare ich so mehr als 20 Zeilen Code. Das ist auf den ersten Blick nicht viel. Aber mir geht es insoweit auch um die grundsätzliche Frage, ob so etwas möglich ist. Die Möglichkeit das Auszulagern besteht auch, macht es aber wieder unübersichtlicher.

Gruß, Alex
Alex Winzer
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#5

AW: Var ohne Variable bzw. mit Variablen-Dummy

  Alt 14. Sep 2013, 12:43
Die Möglichkeit das Auszulagern besteht auch, macht es aber wieder unübersichtlicher.
Der Aufruf eines Event-Handlers namens HandleKeyPress mit nicht relevanten Parametern innerhalb eines TUpDown-Changing Events ist an Unübersichtlichkeit kaum zu überbieten.

Das Auslagern der Aktion in eine separate Methode (deren Name das angibt, was sie macht) ist genau der richtige Weg den Code lesbarer und wartbarer zu machen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  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 23:22 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