Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Tastaureingabe bei dyn. erstellter Form überwachen (https://www.delphipraxis.net/43382-tastaureingabe-bei-dyn-erstellter-form-ueberwachen.html)

TeTSuO 3. Apr 2005 08:58


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;

DGL-luke 3. Apr 2005 09:13

Re: Tastaureingabe bei dyn. erstellter Form überwachen
 
Delphi-Quellcode:
form.onkeypress:=keypressevent;
das "form" muss natürlich deine selbst erstellte messagebox sein.

TeTSuO 3. Apr 2005 09:17

Re: Tastaureingabe bei dyn. erstellter Form überwachen
 
Zitat:

Zitat von DGL-luke
Delphi-Quellcode:
form.onkeypress:=keypressevent;
das "form" muss natürlich deine selbst erstellte messagebox sein.

Hab ich doch mit

Delphi-Quellcode:
  with AMsgDialog do
    try
      ...
      OnKeyPress:=KeyPressEvent;    //<------- Das hier funzt net
das iss ja das was net funzt

c113plpbr 3. Apr 2005 09:24

Re: Tastaureingabe bei dyn. erstellter Form überwachen
 
versuchs doch mal mit
Delphi-Quellcode:
@OnKeyPress := @KeyPressEvent;
sollte eigentlich klappen, allerdings bekommst du dann meines Wissens nach KEINE der PARAMETER mit, die eigentlich an OnKeyPress übergeben werden.

ciao, Philipp

TeTSuO 3. Apr 2005 09:29

Re: Tastaureingabe bei dyn. erstellter Form überwachen
 
Zitat:

Zitat von c113plpbr
versuchs doch mal mit
Delphi-Quellcode:
@OnKeyPress := @KeyPressEvent;

Jetzt kann ich zwar kompilieren aber die Procedur wird einfach übersehen (Breakpoint funzt net)
bei Tasteneingabe. :gruebel:

c113plpbr 3. Apr 2005 09:31

Re: Tastaureingabe bei dyn. erstellter Form überwachen
 
Zitat:

Zitat von TeTSuO
Zitat:

Zitat von c113plpbr
versuchs doch mal mit
Delphi-Quellcode:
@OnKeyPress := @KeyPressEvent;

Jetzt kann ich zwar kompilieren aber die Procedur wird einfach übersehen (Breakpoint funzt net)
bei Tasteneingabe. :gruebel:

Nein, übersehen wird sie nicht, nur, wie schon gesagt, bekommst du keine parameter mit, d.h. Key ist immer 0, genauso wie Sender immer nil ist, du wirst also so nur erfahren, dass etwas gedrückt wurde, aber nicht was ...

ciao, Philipp

TeTSuO 3. Apr 2005 09:35

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

SirThornberry 3. Apr 2005 09:52

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)

TeTSuO 3. Apr 2005 10:37

Re: Tastaureingabe bei dyn. erstellter Form überwachen
 
Zitat:

Zitat von SirThornberry
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)

Wie kann ich das am einfachsten programmieren ohne jetz großartig viel zu ändern :?:

malo 3. Apr 2005 11:04

Re: Tastaureingabe bei dyn. erstellter Form überwachen
 
Zitat:

Zitat von TeTSuO
Zitat:

Zitat von SirThornberry
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)

Wie kann ich das am einfachsten programmieren ohne jetz großartig viel zu ändern :?:

Eine Klasse erstellen für dein Form. Im Public-Bereich werden dann alle Procedures und FUnktionen, die etwas mit deinem neuen Form machen deklariert, außerdem musst du deine Prozeduren so definieren:

Delphi-Quellcode:
proecedure TMeinNeuesFormMitEigenerKlasse.MeineProzedur(var EinIntegerParameter: integer);
begin
// hier Code hin
end;
Du solltest aber schon ein wenig Vorkentnisse in OOP haben, die du hier kriegen kannst ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:52 Uhr.
Seite 1 von 2  1 2      

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