![]() |
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; ![]() |
Re: Tastaureingabe bei dyn. erstellter Form überwachen
Zitat:
Ich hab aber gedacht ob es vielleicht so geht damit ich nicht so viel proggen muss
Delphi-Quellcode:
Dann klappt das aber nicht mehr mit Type TMsgForm = class(TForm) published property OnKeyPress: TKeyPressEvent; End; Var AMsgDialog : TMsgForm;
Delphi-Quellcode:
Das wäre das einfachste wenn einer ne idee hätte wie das funzt
AMsgDialog := CreateMessageDialog(Cap, GetmtType(uType), Getbtns(uType));
|
Re: Tastaureingabe bei dyn. erstellter Form überwachen
Darf ich fragen, WAS nicht klappt?
|
Re: Tastaureingabe bei dyn. erstellter Form überwachen
Zitat:
Delphi-Quellcode:
Steht im Meldungsfenster
AMsgDialog := CreateMessageDialog(Cap, GetmtType(uType), Getbtns(uType));
[Fehler] MsgBox.pas(47): Inkompatible Typen: 'TMsgForm' und 'TForm' |
Re: Tastaureingabe bei dyn. erstellter Form überwachen
Zeig uns doch mal die Funktion CreateMessageDialog ;)
Ich hab dieses seltsame Gefühl, dass sie als Rückgabewert "TForm" hat ;) |
Re: Tastaureingabe bei dyn. erstellter Form überwachen
Die Function ist in Delphi integriert in der Unit Dialogs und mit dem Hint hab ich gesehen das Sie TForm zurückgibt. :pale:
Was Jetzt |
Re: Tastaureingabe bei dyn. erstellter Form überwachen
du musst die methode auch nicht unbedingt in diese Klasse packen. Du kannst die Methode auch in dein MainForm packen.
|
Re: Tastaureingabe bei dyn. erstellter Form überwachen
In diesem Fenster wird aber auch der Esc Button schon abgefragt ich muss es also über das Fenster der MessageBox machen und dem kann ich die Prozedur nicht zuweisen bzw. auslesen
|
Re: Tastaureingabe bei dyn. erstellter Form überwachen
musst du nicht
Delphi-Quellcode:
type
TYourMainForm = class(TFrom) [...] private procedure FOnKeyPressFuerMsgDlg(Sender: TObject; var Key: Char); [...] end; [...] procedure TYourMainForm.FOnKeyPressFuerMsgDlg(Sender: TObject; var Key: Char); begin //das ist nun die OnKeyPress für dein Dialog end; [...] var AMsgDialog: TForm; begin AMsgDialog := CreateMessageDialog(Cap, GetmtType(uType), Getbtns(uType)); AMsgDialog.OnKeyPress := FOnKeyPressFuerMsgDlg; [...] |
Re: Tastaureingabe bei dyn. erstellter Form überwachen
Zitat:
Dann muus ich aber wenn ich die Unit in ner anderen App benutze das OnKeyPressEvent anpassen und auch die zuweisung zum Event ändern. |
Re: Tastaureingabe bei dyn. erstellter Form überwachen
hättest du bei deinem ausgangsposting auch gemusst, ansonsten würde nur CreateMessageDialog neu zu schreiben übrig bleiben.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:02 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