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;