Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Form reagiert nicht auf Sender in der procedure onkeypress (https://www.delphipraxis.net/1841-form-reagiert-nicht-auf-sender-der-procedure-onkeypress.html)

Philippe Sch. 27. Dez 2002 08:40


Form reagiert nicht auf Sender in der procedure onkeypress
 
Ich habe ein seltsames Problem. Bei der Routine onkeypress des Formulars möchte ich je nach Sender eine andere Routine abarbeiten. Aber der Sender (Absender) wird nicht erkannt, also z.b. if sender =maskedit1 then... wird schlicht übergangen. Gibt's irgendeine Einstellung, die vielleicht falsch ist? Gelegentlich (bei anderen Routinen in kleinen Testprogrammen) hat diese Anweisung funktioniert.

sakura 27. Dez 2002 08:56

Du musst die Eigenschaft KeyPreview des Forms auf True setzen.

Philippe Sch. 27. Dez 2002 09:28

die Eigenschaft keypreview ist auf true. Funktioniert trotzdem nicht.

[Flox]Cauchy 27. Dez 2002 09:34

Ich verstehe nicht, wie das funktionieren soll. Der Sender, der bei einem OnClick-Ereignis übergeben wird, ist doch immer das Objekt, auf das geklickt wurde. Das ist in diesem Fall immer das Formular, so daß es meiner Meinung nach gar keinen Sinn macht, den Sender mit irgendeinem Objekt zu vergleichen. Oder sehe ich das falsch?

sakura 27. Dez 2002 09:37

Oops, ich glaube ich habe da was überlesen. Wenn es Dir um den Sender geht, so müsste dieser im Form1.OnKeyPress immer das Form sein, da dessen Eireignisschleife dieses Ereignis feuert. Erst die Handler für die einzelnen Objekte setzen den Sender entsprechend. Versuch mal den aktuellen "Sender-Möchte-Ich" über Form1.ActiveControl zu ermitteln.

Philippe Sch. 27. Dez 2002 10:14

danke für die Tips. Tatsächlich ist immer das Formular Sender, wenn ich den Sender abfrage. Da bin ich völlig schief gelegen und habe das falsch verstanden... Wozu dient denn eigentlich diese Abfrage nach dem Sender?

sakura 27. Dez 2002 10:18

Die Abfrage nach dem Sender wird in dem Moment interessant, wenn man mehreren Objekten die gleiche Ereignisroutine zuweist. Z.B.: Du hast mehrere Editfelder, wo die Werte numerisch sein müssen dann kannst Du folgendes im OnExit Ereignis machen
Delphi-Quellcode:
procedure Form1.NumEditOnExit(Sender: TObject);
begin
  if Sender is TEdit then
  try
    StrToInt(TEdit(Sender).Text);
  except
    ShowMessage('Der angegebene Wert ist nicht numerisch!');
    TEdit(Sender).SetFocus;
  end
end;

Philippe Sch. 27. Dez 2002 12:49

klappt tatsächlich so. merci


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