![]() |
Wie fange ich ESC ab?
Guten Tag allerseits
In meinem Program verwende ich die Zeilen aus ![]() 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:
mit all seinen möglichen Variationen hinzugefügt. Hat aber nichts gebracht. Sobald ich ESC drücke, schliesst das Programm.
while PeekMessage(Msg, 0, WM_KEYFIRST, WM_KEYLAST, PM_REMOVE) do;
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 ![]() Und wenn ich diese Zeilen mit dem MessageDlg ausklammere, schliesst mein Programm bei einem ESC. |
Re: Wie fange ich ESC ab?
Hallo,
also wenn Du im ONKEYPRESS Ereignis abfragst
Delphi-Quellcode:
und die entsprechenden Schalter abfragst..sollte das funktionieren.
If Key =#27 then...else Key:=#0
|
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?" |
Re: Wie fange ich ESC ab?
Hallo,
erstens sind genau dafür Kommentare da
Delphi-Quellcode:
und zweitens gibt es die entsprechenden
// #27 = Escape-Taste
![]()
Delphi-Quellcode:
und drittens könntest du dir diese selbst definieren, falls es keine vordefinierten Konstanten gäbe:
VK_ESCAPE
Delphi-Quellcode:
Grüße, Matze
const KEY_ESCAPE = #27;
|
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:
Nach dem Verlassen der Schleife setze ich KeyPreView wieder auf True.
if (Key = #27) AND Form1.KeyPreview then
close; Nicht gerade der Weisheit letzter Schluss; aber man soll seine Lösüngen seinen Faehigkeiten anpassen. :) |
Re: Wie fange ich ESC ab?
Zitat:
|
Re: Wie fange ich ESC ab?
[quote="Der.Kaktus"]
Zitat:
|
Re: Wie fange ich ESC ab?
Zitat:
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:
Grüße
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState); begin if Key = VK_ESCAPE then begin ShowMessage('Esc'); end else Key := 0; end; |
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 ... |
Re: Wie fange ich ESC ab?
Zitat:
..Roter Kasten |
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. |
Re: Wie fange ich ESC ab?
Zitat:
|
Re: Wie fange ich ESC ab?
Mit einem sogenannten Schreibtischtest kann man Algorithmen auch im Trockenen testen
|
Re: Wie fange ich ESC ab?
Zitat:
|
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.
|
Re: Wie fange ich ESC ab?
Zitat:
|
Re: Wie fange ich ESC ab?
@Der.Kaktus: Ich muss auch viel, was ich nicht will. Das ist kein Grund, höchstenst eine Ausrede!
|
Re: Wie fange ich ESC ab?
Zitat:
|
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. |
Re: Wie fange ich ESC ab?
Zitat:
|
Re: Wie fange ich ESC ab?
Zitat:
|
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. |
Re: Wie fange ich ESC ab?
Zitat:
P.S.: "fresse" gehoert nicht in unseren Chagong mal anmerk!!!! |
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. |
Re: Wie fange ich ESC ab?
Zitat:
@mkmk: ja sorry, ich werde das jetzt immer erstmal annehmen, dass alles menschenerdenkliche getan wurde. |
Re: Wie fange ich ESC ab?
Zitat:
|
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.
|
Re: Wie fange ich ESC ab?
Zitat:
|
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. |
Re: Wie fange ich ESC ab?
Zitat:
|
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