Autor Beitrag
motion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 295

XP, Linux
D7 Prof
BeitragVerfasst: Fr 18.02.05 01:15 
Form A enthält eine Action, welche auf den ShortCut "Esc" die Close Methode ausführt.
Form B das gleiche.

Form A ruft Form B modal auf. Wird in Form B die ESC-Taste einmal gedrückt, so schließt Form B und gleich darauf Form A.

Wie läßt sich das verhindern?

mfG
Gunther
jaevencooler
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 166
Erhaltene Danke: 6

MS-DOS,Win32, Win95, Win 98, Me,XP, Linux, NT4.0, NT 2000-2008, Vista, Windows 7
Turbo Pascal,D1 Enter,D2 Enter,D3 Enter,D5 Enter, Kylix, D2007, PL/SQL, MS/SQL, Delphi 2010, Delphi XE
BeitragVerfasst: Fr 18.02.05 09:40 
Titel: Re: Shortcuts lösen Actions auch in übergeordnetn Formularen
Guten Morgen,

motion hat folgendes geschrieben:
Form A enthält eine Action, welche auf den ShortCut "Esc" die Close Methode ausführt.
Form B das gleiche.

Form A ruft Form B modal auf. Wird in Form B die ESC-Taste einmal gedrückt, so schließt Form B und gleich darauf Form A.

Wie läßt sich das verhindern?


Du musst das Key-Event auf Null (0) setzen.
Also wenn Du abfragst if key = vk_escape then
blablabla
key := 0;

Ciao Michael

_________________
Wissen ist Macht, nichts wissen macht auch nichts...
motion Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 295

XP, Linux
D7 Prof
BeitragVerfasst: Fr 18.02.05 15:56 
Michael,
theoretisch schon, aber ich arbeite hier mit Actions und ActionsLists, erzeuge also überhaupt keine Events auf KeyDown/Keyup/Keypressed. Deshalb habe ich da direkt keinen Eingreifpunkt, um die Keyboard Events abzufangen.
Aber ich habe einen Tip von einem Arbeitskollegen bekommen, in der ESC-Action einfach die Keyboard Buffer zu leeren durch ...
hier ein kurzes Codes-Snippet:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure TfrmZuteilenFuerMaschine.ClearKeyboardAndMouseBuffer;
var
  Msg: TMsg;
begin
  //Tastaturspeicher leeren...
  while PeekMessage(Msg, Handle, WM_KEYFIRST, WM_KEYLAST, PM_REMOVE) do
  begin
  end; // of while (PeekMessage(Msg, Handle, WM_KEYFIRST, WM_KEYLAST,
PM_REMOVE) <> 0) do
  //Mausaktionen löschen...
  while PeekMessage(Msg, Handle, WM_MOUSEFIRST, WM_MOUSELAST, PM_REMOVE) do
  begin
  end; // of while PeekMessage(Msg, Handle, WM_MOUSEFIRST, WM_MOUSELAST,
PM_REMOVE) do
end; // of procedure ClearKeyboardAndMouseBuffer


Ich werde das mal heute abend testen und dann hier berichten.

Moderiert von user profile iconraziel: Code- durch Delphi-Tags ersetzt.
motion Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 295

XP, Linux
D7 Prof
BeitragVerfasst: Sa 19.02.05 19:07 
Nein, das hat leider auch nicht geholfen.

Es ist mir auch nicht gelungen das Fehlverhalten in einem leeren Testprojekt nachzubilden.
Irgendwo in meiner Applikation ist also der Wurm drin.
Also heißt es: Weitersuchen!
motion Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 295

XP, Linux
D7 Prof
BeitragVerfasst: Sa 19.02.05 22:33 
Ich glaube den Verursacher habe ich gefunden:
Der Fehler tritt nur auf, bei Auslösen einer Action per Shortcut, wenn der Focus auf einem Edit-Feld von TMS-Software steht (AdvEdit). Mit der Standard Borland TEdit tritt der Fehler nicht auf.
Okay, also werde ich mal versuchen, ein kleines Demo-Projekt aufzusetzen, welches das Fehlverhalten zeigt. Dann zu TMS schicken und schauen, wie sich der Fehler beseitigen läßt.