AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi gemeinsamer Event Handler für viele Objekte?
Thema durchsuchen
Ansicht
Themen-Optionen

gemeinsamer Event Handler für viele Objekte?

Ein Thema von Antigo · begonnen am 28. Mär 2005 · letzter Beitrag vom 28. Mär 2005
Antwort Antwort
Antigo

Registriert seit: 14. Mär 2005
274 Beiträge
 
#1

gemeinsamer Event Handler für viele Objekte?

  Alt 28. Mär 2005, 18:46
Hi,
Ich habe auf meinem Formular ca. 40 Edit Felder in die aber nur Zahlen eingegeben werden dürfen. Jetzt möchte ich nicht für jedes einzelne ein eiegenes onChange Event deklarieren, sondern das ganze lieber pauschal lösen.
In meinem Buch Delphi 7 - Grundlagen und Profiwissen wird das so gelöst:

Delphi-Quellcode:

var edField: TEdit;
...
procedure TForm1.EditClick(Sender: TObject); (* gemeinsamer Event-Handler für
                                                 alle Editierfelder *)

begin
 edField:=TEdit(Sender); (* auf dieses Feld wurde geklickt *)
 edField.Color:=clYellow (* gelbe Markierung *)
 (* edField.Free geht leider hier nicht, da eine Komponente nicht innerhalb ihres
    eigenen Event-Handlers entfernt werden darf!!! *)


end;
allerdings müsste das ganze dann doch tierisch ressourcen verbrauchen, wenn jedesman wenn das Event auftritt ein neuer Zeiger erstellt wird der auf das Objekt zeigt oder nicht? Die Zeiger werden ja nicht entfernt, oder hab ich da etwas falsch verstanden?
Ich bin nicht so ganz fitt in Objektorientierung.


schonmal danke für eure hilfe
Michael
"How should I know if it works? That's what beta testers are for. I only coded it."
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: gemeinsamer Event Handler für viele Objekte?

  Alt 28. Mär 2005, 18:52
der ressourcenverbrauch ist der gleiche. In dem Quellcode des edits steht sinngemäß sowas:
Zitat:
Wenn eine onKlick-Methode zugewiesen wurde dann rufe diese auf.
der Zeiger für die OnClick-Methode ist immer vorhanden, wenn du keine OnClick-Procedure zweist ist dieser nil, ansonsten eben die adresse der procedure...

Was mit in dem buch des öfteren aufgefallen ist, das mit globalen Variablen gearbeitet wird. Wenn du dir das allerdings angewöhnst wirst du dich bei vielen sehr unbeliebt machen (hat nämlich nix mit objektorientierung zu tun.)

änder einfach
Delphi-Quellcode:
var edField: TEdit;
...
procedure TForm1.EditClick(Sender: TObject);
begin
  edField:=TEdit(Sender);
  edField.Color:=clYellow;
end;
in
Delphi-Quellcode:
procedure TForm1.EditClick(Sender: TObject);
var edField: TEdit; //also local in der Procedure definieren, das reicht voll aus
begin
  edField:=TEdit(Sender);
  edField.Color:=clYellow;
end;
um und du wirst hier in der DP und eventuell bei deinem späteren Arbeitgeber mehr freunde haben.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Antigo

Registriert seit: 14. Mär 2005
274 Beiträge
 
#3

Re: gemeinsamer Event Handler für viele Objekte?

  Alt 28. Mär 2005, 19:24
jo das hab ich auch gemerkt und genau so umgesetzt wie du es geschrieben hast. Ich kann globale Variablen ohnehin nicht leiden.

und danke für deine Info, das ganze klappt prima, ich mag gar nicht dran denken wenn ich das alles hätte einzeln deklarieren müssen
Michael
"How should I know if it works? That's what beta testers are for. I only coded it."
  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 21:32 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