Delphi-PRAXiS
Seite 4 von 6   « Erste     234 56      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi lästiges beepen abstellen ?? (https://www.delphipraxis.net/110-laestiges-beepen-abstellen.html)

Daniel 19. Okt 2002 19:33

Hallo,
Zitat:

Zitat von Christian Seehase
  1. Bei jedem Formular KeyPreview auf true setzen
  2. Bei jedem Formular im Event OnKeyDown EnterTab aufrufen.
EnterTab steht dabei wo immer Du magst, solange jede Formularunit darauf zugreifen kann.

Christian hat Dir doch ein Rezept geliefert, wie Du es anstellen musst:

Du stellt bei jedem Deiner Formulare, auf dem sich die für Dich relevanten Eingabefelder befinden die Eigenschaft "KeyPreview" auf true. Dann setzt Du ebenfalls in jedem dieser Formulare die Ereignis-Routine für das Ereignis "OnKeyDown" auf "Enter-Tab". Und genau damit hast Du die gewünschte Verknüpfung.

Hansa 19. Okt 2002 19:48

Hallo Daniel,

na siehst Du, manchmal sieht man etwas offensichtliches nicht. :mrgreen: Habe mir zwischenzeitlich mal das KeyPreview angesehen, da war es fast klar, aber das hier nicht :

Zitat:

Dann setzt Du ebenfalls in jedem dieser Formulare die Ereignis-Routine für das Ereignis "OnKeyDown" auf "Enter-Tab". :
Hätte ich auch selber drauf kommen können. Oje, getestet ist es noch nicht. Müßte aber wohl so gehen. :coder:

Gruß
Hansa

Hansa 19. Okt 2002 20:10

Hallo,

ihr seit Spitze ! :bounce2: Das geht jetzt einwandfrei. Hatte schon befürchtet, mich mit diesem Kram schon wieder wochenlang aufzuhalten. Aber jetzt habe ich noch bemerkt, daß auf meiner Form die Felder total durcheinander erreicht werden (kreuz und quer). Die Taborder ist also noch verkehrt. :mrgreen: Aber jetzt weiß ich zumindest, wo ich weiter machen muß.

Gruß
Hansa

Hansa 1. Nov 2002 12:51

Hi,

das Thema ist immer noch nicht beendet ! :(

Code:
procedure TKuStamm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  IF NOT KuModul.KuDatenSatz.IsEmpty THEN BEGIN
    if MessageDlg('Soll der Datensatz gespeichert werden ?',
      mtInformation, [mbYes, mbNo], 0) = mrYes then begin
      KuModul.KuDatenSatz.post;
      KuModul.TransAction.Commit;
    END
  END;
  KuModul.Database.close;
end;
Drücke ich auf der Form esc, so kommt obige Abfrage zwar, aber er springt in das letzte "betretene" Feld zurück, anstatt die Form zu schließen. Lasse ich MessageDlg (sonst nichts) weg, klappt es wunderbar. Was kann das denn jetzt noch sein ?

Gruß
Hansa

Christian Seehase 1. Nov 2002 13:05

Moin Hansa,

eine Idee, nur so aus dem Gefühl heraus, ohne dass ich's im Moment begründen könnte.

Tausch' doch mal MessageDlg durch MessageBox aus (nicht Application.MessageBox)

Code:
  [b]if[/b] MessageBox(
    self.Handle,
    'Soll der Datensatz gespeichert werden ?',
    'Fenstertitelzeile',
    MB_ICONQUESTION [b]or[/b] MB_YESNO) = IDYES [b]then[/b]
  [b]begin[/b]
    [color=#000080]// ...[/color]
  [b]end[/b];
BTW:
Hast Du die Möglichkeit des Abbruchs jetzt absichtlich weggelassen?

Hansa 1. Nov 2002 15:27

Hallo Christian,

Zitat:

Hast Du die Möglichkeit des Abbruchs jetzt absichtlich weggelassen?
Das kommt noch, im Moment ist es Absicht. Daran kanns wohl nicht liegen, bzw. Delphi-Bug.

Gruß
Hansa

Hansa 1. Nov 2002 15:35

Nee,

kein Unterschied bis auf die Titelzeile. Werde das jetzt mit einer ganz einfachen Variable durchziehen, die ich im Quelltext setze.

Gruß
Hansa

Hansa 2. Nov 2002 11:18

Hi,

also das muß an MessageDlg liegen. Kann das Verhalten aber noch präzisieren : Drücke ich ESC kommt der Dialog. Egal was ich auswähle lande ich wieder in dem Feld, wo ich ESC drückte. Drücke ich wieder ESC wird die Form geschlossen, eine neuerliche Abfrage kommt nicht. Irgendwas hängt da im "luftleeren Raum". :angle:

Gruß
Hansa

Christian Seehase 2. Nov 2002 11:36

Moin Hansa,

ich hab' eben noch mal zurückgeblättert, und dabei gesehen, dass in der EnterTab Routine (in der ja auch ESC abgefragt wird) Perform verwendet wird.
Meiner Erfahrung nach macht das manchmal Probleme.

Das Perform könntest Du mal gegen

SendMessage(self.Handle,.....

oder

SendMessage(Handle,....

oder

SendMessage(TWinControl.Handle,....

austauschen (für TWinControl natürlich den entsprechenden Namen einsetzen).

Je nachdem, in welcher Form das Perform verwendet wird.

Hansa 2. Nov 2002 17:09

Hallo Christian,

in dem ESC-Teil von EnterTab kommt kein Perform vor, also kann ich es auch nicht ersetzen. Vielleicht ist das aber der Fehler ! Nur was soll ich da hinschreiben ?

Gruß
Hansa


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:04 Uhr.
Seite 4 von 6   « Erste     234 56      

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