Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Wie fange ich ESC ab? (https://www.delphipraxis.net/125499-wie-fange-ich-esc-ab.html)

mkmk 7. Dez 2008 14:31


Wie fange ich ESC ab?
 
Guten Tag allerseits

In meinem Program verwende ich die Zeilen aus Schleife per Tastendruck unterbrechen
Nur: in meiner Form habe ich auch ein FormKeyPress, wo ich mit ESC die Application schliesse.
Wenn ich also in meiner Schleife auf PAUSE drücke, dann kann ich aus der Schleife ausbrechen.
Wenn ich aber ESC drücke (Edit: bei ausgeklammerten MessageDlg), schliesst das Programm.

Ich habe dann mal so auf gut Glück in die Funktion EscPressed ein
Delphi-Quellcode:
while PeekMessage(Msg, 0, WM_KEYFIRST, WM_KEYLAST, PM_REMOVE) do;
mit all seinen möglichen Variationen hinzugefügt. Hat aber nichts gebracht. Sobald ich ESC drücke, schliesst das Programm.

Jetzt könnte ich eine globale Variable "beiEscNichtSchliessen" definieren und diese vor der Schleife auf TRUE setzen und diese dann in FormKeyPress testen.
Aber ich bin sicher, dass es eine elegantere Lösung dafür geben muss. Oder?


PS (als Edit): Vielleicht sollte ich erwaehnen, dass die in Schleife per Tastendruck unterbrechen vorgesehene MessageDlg bei mir bei einem ESC nie zum Zuge kommt. Das DialogFenster flackert nur ganz kurz und verschwindet dann. Bei einem Drücken auf PAUSE hingegen funktioniert alles bestens.
Und wenn ich diese Zeilen mit dem MessageDlg ausklammere, schliesst mein Programm bei einem ESC.

Der.Kaktus 7. Dez 2008 14:45

Re: Wie fange ich ESC ab?
 
Hallo,
also wenn Du im ONKEYPRESS Ereignis abfragst
Delphi-Quellcode:
 If Key =#27 then...else Key:=#0
und die entsprechenden Schalter abfragst..sollte das funktionieren.

mkmk 7. Dez 2008 15:00

Re: Wie fange ich ESC ab?
 
@Der Kaktus
Aber genaus das will ich vermeiden: Eine Variable, bei der ich genau weiss, dass ich nach einen halben Jahr mich frage "was war das doch nochmal?"

Matze 7. Dez 2008 15:03

Re: Wie fange ich ESC ab?
 
Hallo,

erstens sind genau dafür Kommentare da

Delphi-Quellcode:
// #27 = Escape-Taste
und zweitens gibt es die entsprechenden Konstanten:

Delphi-Quellcode:
VK_ESCAPE
und drittens könntest du dir diese selbst definieren, falls es keine vordefinierten Konstanten gäbe:

Delphi-Quellcode:
const KEY_ESCAPE = #27;
Grüße, Matze

mkmk 7. Dez 2008 15:11

Re: Wie fange ich ESC ab?
 
@Matze

Mit all den von Dir vorgeschlagenen Konstanten habe ich es natürlich auch schon probiert. Geht nicht.

Ich habe es jetzt so gelöst, dass ich, bevor ich die Schleife betrete, KeyPreView auf FALSE setze und diese in FormKeyPress teste
Delphi-Quellcode:
   if (Key = #27) AND Form1.KeyPreview then
     close;
Nach dem Verlassen der Schleife setze ich KeyPreView wieder auf True.
Nicht gerade der Weisheit letzter Schluss; aber man soll seine Lösüngen seinen Faehigkeiten anpassen. :)

Der.Kaktus 7. Dez 2008 15:15

Re: Wie fange ich ESC ab?
 
Zitat:

Zitat von mkmk
@Matze

Mit all den von Dir vorgeschlagenen Konstanten habe ich es natürlich auch schon probiert. Geht nicht.

Ich habe es jetzt so gelöst, dass ich, bevor ich die Schleife betrete, KeyPreView auf FALSE setze und diese in FormKeyPress teste
Delphi-Quellcode:
   if (Key = #27) AND Form1.KeyPreview then
     close;
Nach dem Verlassen der Schleife setze ich KeyPreView wieder auf True.
Nicht gerade der Weisheit letzter Schluss; aber man soll seine Lösüngen seinen Faehigkeiten anpassen. :)

Gib doch mal ne Tuete Quelltext..das geht vielleicht leichter ;-)

mkmk 7. Dez 2008 15:23

Re: Wie fange ich ESC ab?
 
[quote="Der.Kaktus"]
Zitat:

Zitat von mkmk
@Matze

Gib doch mal ne Tuete Quelltext..das geht vielleicht leichter ;-)

Okay, ich stelle eine einfache Form zusammen. Gib mir ein paar Minuten

Matze 7. Dez 2008 15:52

Re: Wie fange ich ESC ab?
 
Zitat:

Zitat von mkmk
Geht nicht.

Das ist auch immer so wunderbar erklärt. :roll:

Schreibe doch zukünftig ohne Nachfrage, was nicht geht, wie sich das äußert (Fehlermeldung, wenn ja, welche etc.) und immer den relevanten Quelltext. Du möchtest hier die Hilfe, dann bemühe dich da etwas und mach es uns so leicht wie möglich. ;)

Edit: Im OnKeyDown-Ereignis funktioniert das mit aktiviertem KeyPreview bei mir ohne Probleme:

Delphi-Quellcode:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Key = VK_ESCAPE then
  begin
    ShowMessage('Esc');
  end else
    Key := 0;
end;
Grüße

mkmk 7. Dez 2008 16:03

Re: Wie fange ich ESC ab?
 
@Matze
Ich habe ja keine Fehlermeldung oder sowas. Und ich weiss ehrlich gesagt nicht, wie ich mein Problem haette besser beschreiben sollen.
In der Zwischenzeit habe ich das ganze das Ganze auf eine simple Form zusammengekürzt.
Und hier klappt alles. KeyPreview true oder false spielt - wie bei dir - keine Rolle.

Aber in meiner Application klappt es nicht. Sehe aber nirgends einen Unterschied.
Ich melde mich wieder ...

Der.Kaktus 7. Dez 2008 16:06

Re: Wie fange ich ESC ab?
 
Zitat:

Zitat von mkmk
@Matze
Ich habe ja keine Fehlermeldung oder sowas. Und ich weiss ehrlich gesagt nicht, wie ich mein Problem haette besser beschreiben sollen.
In der Zwischenzeit habe ich das ganze das Ganze auf eine simple Form zusammengekürzt.
Und hier klappt alles. KeyPreview true oder false spielt - wie bei dir - keine Rolle.

Aber in meiner Application klappt es nicht. Sehe aber nirgends einen Unterschied.
Ich melde mich wieder ...


..Roter Kasten


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:57 Uhr.
Seite 1 von 4  1 23     Letzte »    

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-2025 by Thomas Breitkreuz