Delphi-PRAXiS

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

omata 7. Dez 2008 16:09

Re: Wie fange ich ESC ab?
 
Stichwort: Debugger

Wenn dein Programm nicht das macht, was du willst, dann wird wohl irgendwo ein Unterschied zwischen dem sein, was du haben möchtest und dem, was du bekommst. Also gehe deinen Quellcode Schritt für Schritt, also Zeile für Zeile durch und drücke dabei nicht einfach immer F8 bzw. F7 sondern überlege dir vorher, was als nächstes passieren soll. Passiert etwas abweichendes -> herausfinden warum und dann erhälst du auch deinen AHA-Effekt und die Funktionalität, die du dir gewünscht hast.
Also setzte Breakpoints und verstehe deinen Quellcode.

Der.Kaktus 7. Dez 2008 16:18

Re: Wie fange ich ESC ab?
 
Zitat:

Zitat von omata
Stichwort: Debugger

Wenn dein Programm nicht das macht, was du willst, dann wird wohl irgendwo ein Unterschied zwischen dem sein, was du haben möchtest und dem, was du bekommst. Also gehe deinen Quellcode Schritt für Schritt, also Zeile für Zeile durch und drücke dabei nicht einfach immer F8 bzw. F7 sondern überlege dir vorher, was als nächstes passieren soll. Passiert etwas abweichendes -> herausfinden warum und dann erhälst du auch deinen AHA-Effekt und die Funktionalität, die du dir gewünscht hast.
Also setzte Breakpoints und verstehe deinen Quellcode.

Hau, ich habe gesprochen :-D ....kannst Du nicht jedem schreiben..einer programmiert seit 30 Jahren..einer paar Monate..nur mal so beilaeufig erwaehne;-)

mkinzler 7. Dez 2008 16:18

Re: Wie fange ich ESC ab?
 
Mit einem sogenannten Schreibtischtest kann man Algorithmen auch im Trockenen testen

Der.Kaktus 7. Dez 2008 16:20

Re: Wie fange ich ESC ab?
 
Zitat:

Zitat von mkinzler
Mit einem sogenannten Schreibtischtest kann man Algorithmen auch im Trockenen testen

Es gibt Leute..die wollen programmieren..andere die muessen programmieren..gewisse Unterschiede muss man schon machen und auch akzeptieren ;-)

omata 7. Dez 2008 16:21

Re: Wie fange ich ESC ab?
 
@Der.Kaktus: Da hast du natürlich recht. Also vergesst einfach den Debugger. Warum etwas dazulernen, geht bestimmt auch anders. Sorry das ich was gesagt habe, bitte ignorieren.

Der.Kaktus 7. Dez 2008 16:23

Re: Wie fange ich ESC ab?
 
Zitat:

Zitat von omata
@Der.Kaktus: Da hast du natürlich recht. Also vergesst einfach den Debugger. Warum etwas dazulernen, geht bestimmt auch anders. Sorry das ich was gesagt habe, bitte ignorieren.

sehe es nicht als "falschaussage" ich meine nur..vielleicht muss er eine Aufgabe loesen ohne Lust auf Delphi..siehe nachfolgende Antwort an mkinzler meinerseits.

mkinzler 7. Dez 2008 16:27

Re: Wie fange ich ESC ab?
 
@Der.Kaktus: Ich muss auch viel, was ich nicht will. Das ist kein Grund, höchstenst eine Ausrede!

Der.Kaktus 7. Dez 2008 16:29

Re: Wie fange ich ESC ab?
 
Zitat:

Zitat von mkinzler
@Der.Kaktus: Ich muss auch viel, was ich nicht will. Das ist kein Grund, höchstenst eine Ausrede!

Jaaa..stimmt..ich meinte ja nur....menno..bekommt Ihr heute alles innen falschen Hals? :gruebel:

mkmk 7. Dez 2008 16:34

Re: Wie fange ich ESC ab?
 
:D also die IDE von Delphi scheint mir nicht ganz koscher zu sein.
Es gibt ja diese berühmten Witz mit den 3 Ingenieuren (Elektro Ing., Maschinen Ing. und Informatiker) die mit dem Wagen unterwegs sind und eine Panne haben.
Nachdem der Elektro-Ing und er Maschinen-Ing ihr Glück versucht hatten, kommt die Reihe an den Informatiker: "Okay, jetzt steigen wir alle zusammen nochmals in den Wagen ein, steigen dann nochmals zusammen aus und versuchen erst dann den Wagen zu starten."

Nachdem ich mit der Testform den Fehler nicht wiederholen konnte, habe ich in meiner Wut die IDE aus Versehen beendet.
Als ich dann wieder die IDE gestartet habe, um dann in meiner Applikation alle Testschritte nochmals von vorne zu beginnen, habe ich bald einmal gemerkt, dass alles genauso funktioniert wie es sollte.

Zwar waere hier an dieser Stelle eine Entschuldigung faellig, dafür, dass ich Eure Zeit unnötigerweise in Anspruch genommen habe, was ich hiermit auch tue ... aber einer Schuld bin ich mir ehrlich gesagt nicht bewusst.
Aber trozdem: sorry und danke für den Beistand.

@omata und @Dr. Kaktus:
Ich programmiere seit ca. 34 Jahren. Hauptberuflich. Dass ich erst so spaet in die Gemeinschaft der Delphianer stosse und mit dem einen oder aderem, dass ihr aus dem Stehgreif beherrscht, noch meine Mühe habe, sollte Euch nicht dazu verleiten, abschaetzige Bemerkungen zu machen.

Der.Kaktus 7. Dez 2008 16:38

Re: Wie fange ich ESC ab?
 
Zitat:

Zitat von mkmk@omata und @Dr. Kaktus
Ich programmiere seit ca. 34 Jahren. Hauptberuflich. Dass ich erst so spaet in die Gemeinschaft der Delphianer stosse und mit dem einen oder aderem, dass ihr aus dem Stehgreif beherrscht, noch meine Mühe habe, sollte Euch nicht dazu verleiten, abschaetzige Bemerkungen zu machen.

Ich auch seit 32 Jahren programmiere..und mir niemals ne "abschuessige Bemerkung" erlauben wuerde..es war eine "Vermutung"..nichts fuer Ungut ;-) und das "Dr." kannste lassen *motz*

mkmk 7. Dez 2008 16:40

Re: Wie fange ich ESC ab?
 
Zitat:

Zitat von Der.Kaktus

Ich auch seit 32 Jahren programmiere..und mir niemals ne "abschuessige Bemerkung" erlauben wuerde..es war eine "Vermutung"..nichts fuer Ungut ;-)

Okay, akzeptiert.

omata 7. Dez 2008 16:43

Re: Wie fange ich ESC ab?
 
Mein Hinweis sollte nicht abschätzig klingen.
Das ist doch ein ganz normaler Vorgang, wenn mein Programm, das ich gerade schreibe, nicht das macht, was ich will, dann muss ich schauen was da nicht mit meinen Vorstellungen übereinstimmt. Und das geht nunmal nur über ein ordentliches debuggen.

Einen Debugger gab es schon in Turbo Pascal von 1983 also das ist jetzt nichts neues.

Wie gesagt, das war nur ein gut gemeinter Rat, den ich auch immer wieder beherzige. Ich stelle mich hier nicht hin behaupte, dass ich einfach mal ein Programm so runtertippe, es starte und alles geht so wie ich mir das vorgestellt habe. Da gibt es immer wieder Dinge, die man nicht bedenkt und dann muss man verstehen, was da nicht geht.

Also ich verstehe euch hier nicht, werde mir das aber merken und beim nächsten Mal einfach die Fresse halten.

Nach meinem alten Motto: Macht doch was ihr wollt.

Der.Kaktus 7. Dez 2008 16:49

Re: Wie fange ich ESC ab?
 
Zitat:

Zitat von omata
Mein Hinweis sollte nicht abschätzig klingen.
Das ist doch ein ganz normaler Vorgang, wenn mein Programm, das ich gerade schreibe, nicht das macht, was ich will, dann muss ich schauen was da nicht mit meinen Vorstellungen übereinstimmt. Und das geht nunmal nur über ein ordentliches debuggen.

Einen Debugger gab es schon in Turbo Pascal von 1983 also das ist jetzt nichts neues.

Wie gesagt, das war nur ein gut gemeinter Rat, den ich auch immer wieder beherzige. Ich stelle mich hier nicht hin behaupte, dass ich einfach mal ein Programm so runtertippe, es starte und alles geht so wie ich mir das vorgestellt habe. Da gibt es immer wieder Dinge, die man nicht bedenkt und dann muss man verstehen, was da nicht geht.

Also ich verstehe euch hier nicht, werde mir das aber merken und beim nächsten Mal einfach die Fresse halten.

Nach meinem alten Motto: Macht doch was ihr wollt.

Ich dachte, meine PN haette gereicht als Klarstellung?
P.S.: "fresse" gehoert nicht in unseren Chagong mal anmerk!!!!

mkmk 7. Dez 2008 16:50

Re: Wie fange ich ESC ab?
 
@omata
Wird zwar langsam etwas off-topic: aber wie um alles in der Welt kommst du zu der Schlussfolgerung, ich würde den Debugger nicht benutzen? Es ist zwar richtig, dass ich dessen Benutzung nirgend explizit erwaehnt habe; aber etwas Selbstverstaendliches zu erwaehnen .... wer kommt schon auf eine solche Idee.

omata 7. Dez 2008 16:51

Re: Wie fange ich ESC ab?
 
Zitat:

Zitat von Der.Kaktus
Ich dachte, meine PN haette gereicht als Klarstellung?

ja ist schon ok, sorry für das "euch". :hi:

@mkmk: ja sorry, ich werde das jetzt immer erstmal annehmen, dass alles menschenerdenkliche getan wurde.

Der.Kaktus 7. Dez 2008 16:52

Re: Wie fange ich ESC ab?
 
Zitat:

Zitat von mkmk
@omata
Wird zwar langsam etwas off-topic: aber wie um alles in der Welt kommst du zu der Schlussfolgerung, ich würde den Debugger nicht benutzen? Es ist zwar richtig, dass ich dessen Benutzung nirgend explizit erwaehnt habe; aber etwas Selbstverstaendliches zu erwaehnen .... wer kommt schon auf eine solche Idee.

Ich glaube, es ist meine Schuld...Omata fuehlt sich etwas auf den Schlips getreten..Sorry..wegen des [OT]

mkmk 7. Dez 2008 16:55

Re: Wie fange ich ESC ab?
 
Okay, ich mache für heute abend Schluss. Danke nochmals für den Beistand. Und sorry, dass ich Anlass zu gewissen Misstönen gegeben habe.

Der.Kaktus 7. Dez 2008 17:04

Re: Wie fange ich ESC ab?
 
Zitat:

Zitat von mkmk
Okay, ich mache für heute abend Schluss. Danke nochmals für den Beistand. Und sorry, dass ich Anlass zu gewissen Misstönen gegeben habe.

Warste nicht...nur gewisse Leute sind heute scheint's empfindlich ;-)..viel Glueck mit Deinem Progi

mkmk 9. Dez 2008 16:18

Re: Wie fange ich ESC ab?
 
Es ist mir gelungen, das Fehlverhalten eindeutig zu reproduzieren.
Mea culpa.
In diesem speziellen Fall empfing ich über die serielle Schnittsellte 907 Pakete.
In der Funktion wurde 907 mal EscPressed() aufgerufen. Und um die Empfangene Daten auf der ListView anzeigen zu können, wurde hin und wieder Application.ProcessMessages aufgerufen.
Und da lag der Hase im Pfeffer. Je nach Zeitpunkt, wann ich ESC drückte, kam entweder EscPressed zum Zuge, oder OnKeyPress der Form.

Edit: Deshalb scheint mir die weiter oben von mir zur Not produzierte Lösung, KeyPreView der Form abzuschalten, der einzig begehbare Weg zu sein.

shmia 9. Dez 2008 16:30

Re: Wie fange ich ESC ab?
 
Zitat:

Zitat von mkmk
Wenn ich aber ESC drücke (Edit: bei ausgeklammerten MessageDlg), schliesst das Programm.

Hast du zufällig einen Button auf deinem Formular, bei dem das Property Cancel auf True steht ?

mkmk 9. Dez 2008 16:44

Re: Wie fange ich ESC ab?
 
:) Ist mir gar nicht aufgefallen diese Property. Aber alle sind auf false.
Ne, ne, wie oben schon geschrieben: Das Problem liegt daran, dass ich hin und wieder Application.ProcessMessages aufrufe.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:45 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-2025 by Thomas Breitkreuz