![]() |
Tastaureingabe bei dyn. erstellter Form überwachen
Hallo erastma
Wie kann ich bei einer dyn. erstellten Form das Ereignis OnKeyPress abfragen mein Quelltext sieht folgendermasen aus:
Delphi-Quellcode:
interface
... Function MsgBoxEx(Cap,Text: String;uType: Integer; var appProperty: Boolean;appIniIdent,cbText: String):Integer; Procedure KeyPressEvent(Sender: TObject; var Key: Char); var AMsgDialog : TForm; implementation Function MsgBoxEx(Cap,Text: String;uType: Integer; var appProperty: Boolean;appIniIdent,cbText: String):Integer; // Eigene MessageBox mit CheckBox die Programmeinstellung anzeigt und setzt // ------------------------------------------------------------------------ // Übergabewerte // ------------- // Cap = Caption // Text = Meldungstext // uType = Erscheinung wie bei MessageBox // appProperty = Programmeinstellung // appIniIdent = unter welchem Eintrag wert in Ini speichern // cbText = Text der CheckBox // // Rückgabewert // ------------ // Je nach Benutzeraktion var ACheckBox : TCheckBox; Begin // Fenster mit Aussehen von MessageBox erstellen AMsgDialog := CreateMessageDialog(Cap, GetmtType(uType), Getbtns(uType)); // CheckBox auf Fenster erstellen ACheckBox := TCheckBox.Create(AMsgDialog); with AMsgDialog do try // Tastatureingaben prüfen KeyPreview:=True; OnKeyPress:=KeyPressEvent; //<------- Das hier funzt net // kein Systemmenü für Form BorderIcons:=[]; // Caption des Fensters auf Übergabewert Caption := Text; // Fenster vergrößern damit platz für Checkbox Height := 159; WITH ACheckBox DO // CheckBox konfigurieren BEGIN // Parent auf Fenster zuweisen Parent := AMsgDialog; // Text auf Übergabewert Caption := cbText; // an/aus auf Übergabewert Checked := appProperty; // positionieren top := 100; Left := 6; END; // Breite seperat auf Fenster setzten ACheckBox.Width := Width; // Fenster anzeigen auf Eingabe warten Result:=ShowModal; // Wenn "Ja","Nein" dann speichern if (Result = mrYes) or (ModalResult = mrNo) Then Begin appProperty:=ACheckBox.Checked; WriteIniB(appIniIdent,appProperty); End; Finally ACheckBox.Free; Free; End; End; Procedure KeyPressEvent(Sender: TObject; var Key: Char); Begin // Wenn Esc bei Meldungsfenster Wert Cancel zurückgeben if Key=#27 then Begin AMsgDialog.ModalResult:=mrCancel; Close; End; End; |
Re: Tastaureingabe bei dyn. erstellter Form überwachen
Delphi-Quellcode:
das "form" muss natürlich deine selbst erstellte messagebox sein.
form.onkeypress:=keypressevent;
|
Re: Tastaureingabe bei dyn. erstellter Form überwachen
Zitat:
Delphi-Quellcode:
das iss ja das was net funzt
with AMsgDialog do
try ... OnKeyPress:=KeyPressEvent; //<------- Das hier funzt net |
Re: Tastaureingabe bei dyn. erstellter Form überwachen
versuchs doch mal mit
Delphi-Quellcode:
sollte eigentlich klappen, allerdings bekommst du dann meines Wissens nach KEINE der PARAMETER mit, die eigentlich an OnKeyPress übergeben werden.
@OnKeyPress := @KeyPressEvent;
ciao, Philipp |
Re: Tastaureingabe bei dyn. erstellter Form überwachen
Zitat:
bei Tasteneingabe. :gruebel: |
Re: Tastaureingabe bei dyn. erstellter Form überwachen
Zitat:
ciao, Philipp |
Re: Tastaureingabe bei dyn. erstellter Form überwachen
Das ist aber nicht das was ich brauche weil ich abfragen muss ob Esc (#27) gedrückt wurde damit die MsgBox einen anderen wert zurückgibt. Danke trotzdem
|
Re: Tastaureingabe bei dyn. erstellter Form überwachen
deine OnKeyPress-Procedure muss eine Methode sein (also eine Procedure die in einer Klasse ist). Dann kannst du die zuweisung auch ohne "@" machen. Im übrigen werden die Parameter schon mitgeliefert, da aber deine procedure vom falschen typ ist stehen die parameter an der falschen Stelle im speicher so das du nicht ran kommst (eventuell zerschießt du dadurch sogar was)
|
Re: Tastaureingabe bei dyn. erstellter Form überwachen
Zitat:
|
Re: Tastaureingabe bei dyn. erstellter Form überwachen
Zitat:
Delphi-Quellcode:
Du solltest aber schon ein wenig Vorkentnisse in OOP haben, die du
proecedure TMeinNeuesFormMitEigenerKlasse.MeineProzedur(var EinIntegerParameter: integer);
begin // hier Code hin end; ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:34 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