AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi NONVCL: Dialog mit ENTER bzw. ESCAPE schliessen
Thema durchsuchen
Ansicht
Themen-Optionen

NONVCL: Dialog mit ENTER bzw. ESCAPE schliessen

Ein Thema von OLLI_T · begonnen am 1. Dez 2004 · letzter Beitrag vom 1. Dez 2004
Antwort Antwort
OLLI_T

Registriert seit: 13. Okt 2003
Ort: Nähe Wetzlar / Hessen
143 Beiträge
 
Delphi 5 Enterprise
 
#1

NONVCL: Dialog mit ENTER bzw. ESCAPE schliessen

  Alt 1. Dez 2004, 12:21
Hallo Leute!

Habe hier eine mittlerweile recht grosse NonVCL-Anwendung mit NonWindows graphischer Benutzeroberfläche gebastelt.

Die Dialoge erstelle ich mit DialogBoxParam. Die Steuerelemente werden in WM_INITDIALOG erzeugt. Es gibt eine Reihe Steuerelemente, die kein Fensterhandle aufweisen. Kann man mit dem VCL Konstrukt [b]vergleichen. Es gibt also auch Dialoge, die ausser dem Dialog selber kein Fensterhandle mehr mitbringen. Das nur so als Einleitung.

Nun möchte ich ermöglichen, dass die Dialoge alternativ auch mit Return (OK) und Escape (Abbrechen) geschlossen werden können. Ich reagiere dazu auf die Message WM_COMMAND:

Delphi-Quellcode:
      WM_COMMAND: Begin
        Case LoWord(wParam) of
          1: EndDialog(AWnd,1);
          2: EndDialog(AWnd,0);
        End;
      End;
Diese Vorgehensweise funktioniert in der laufenden Anwendung genau ein einziges Mal. Danach höre ich auf jeden weiteren Tastendruck nur Ping Ping Ping. Dieses Phänomen ist unabhängig davon, ob die dasselbe Fenster oder ein anderes öffne. WM_KEYDOWN oder WM_KEYUP kann ich nicht verwenden, da die Messages nicht mehr zum Dialog durchdringen, sobald ich ein Control mit Fensterhandle verwende.

Freue mich auf jeden Hinweis! Werde derweil versuchen, ob ich mit ner Accelerator Tabelle ne Lösung hinbekomme ...

Mahlzeit

Der OLLI
No Pain No Gain!
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#2

Re: NONVCL: Dialog mit ENTER bzw. ESCAPE schliessen

  Alt 1. Dez 2004, 12:28
Brauchst du nicht. Guckst du mal bei Luckie in die Tutorials rein? Kapitel über Dialoge. ENTER geht, wenn du den Default-Button setzt; sprich: der OK-Button (oder welcher auch immer) muss den Default-Stil haben. Und ESC geht über WM_COMMAND. Habe ich aber gerade nicht zur Hand ... *such*


Oh, there it is:
Zitat:
Ihnen ist sicher bekannt, dass sich die meisten Dialogboxen mit der ESC-Taste einfach schließen lassen. Diese Funktionalität fehlt bisher noch, lässt sich aber recht einfach nachrüsten. Wenn Sie auf ESC drücken, sendet das System die Nachricht "WM_COMMAND". Der wParam enthält dann den Wert IDCANCEL, so dass Sie nur wie folgt reagieren müssen:
Delphi-Quellcode:
WM_COMMAND:
  if(wParam = IDCANCEL) then SendMessage(hDlg,WM_CLOSE,0,0)
    else { ... }
Mehr ist nicht erforderlich.
Is´ nämlich sogar von mir, der Absatz, frech reingeschrieben ... und Luckie kriegt immer das Lob für so was.
  Mit Zitat antworten Zitat
OLLI_T

Registriert seit: 13. Okt 2003
Ort: Nähe Wetzlar / Hessen
143 Beiträge
 
Delphi 5 Enterprise
 
#3

Re: NONVCL: Dialog mit ENTER bzw. ESCAPE schliessen

  Alt 1. Dez 2004, 13:10
Hallo Mathias

Zitat von MathiasSimmack:
Brauchst du nicht. Guckst du mal bei Luckie in die Tutorials rein? Kapitel über Dialoge. ENTER geht, wenn du den Default-Button setzt; sprich: der OK-Button (oder welcher auch immer) muss den Default-Stil haben. Und ESC geht über WM_COMMAND. Habe ich aber gerade nicht zur Hand ... *such*
Leider hast Du meinen Beitrag nicht richtig gelesen. Wo kein Windows Button da auch kein Default Button ...

Des weiteren entspricht der Code, den Du mir gepostet hast, doch in etwa dem, was ich bisher verwende. In Windows.pas ist IDCANCEL=2 definiert ...

Das Problem ist jedoch nach wie vor, dass der Spass nur GENAU EIN EINZIGES MAL funktioniert!

Gruss

Der OLLI
No Pain No Gain!
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#4

Re: NONVCL: Dialog mit ENTER bzw. ESCAPE schliessen

  Alt 1. Dez 2004, 14:20
Zitat von OLLI_T:
Leider hast Du meinen Beitrag nicht richtig gelesen.
Stimmt wohl. Ich lese nie, was andere hier schreiben.

Zitat:
Wo kein Windows Button da auch kein Default Button ...
Du hast Dialoge ohne Buttons? Jetzt bin ich dran -> What's that all about?
  Mit Zitat antworten Zitat
OLLI_T

Registriert seit: 13. Okt 2003
Ort: Nähe Wetzlar / Hessen
143 Beiträge
 
Delphi 5 Enterprise
 
#5

Re: NONVCL: Dialog mit ENTER bzw. ESCAPE schliessen

  Alt 1. Dez 2004, 15:30
Zitat:
Du hast Dialoge ohne Buttons? Jetzt bin ich dran -> What's that all about?
Stimmt, denn Du hast auch jetzt noch nicht ALLES gelesen. 8)

Man kann auch Buttons ohne die Windows Klasse Button realisieren; siehe Winamp und Konsorten.

Btw: Das Prob hat sich inzwischen erledigt. Ganz profane Geschichte, die im Fenster ohne Controls Not tut:

Delphi-Quellcode:
WM_CREATE: Begin
  ...
  SetFocus(AWnd);
End;
Gruss

Der OLLI
No Pain No Gain!
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

Re: NONVCL: Dialog mit ENTER bzw. ESCAPE schliessen

  Alt 1. Dez 2004, 15:55
Zitat von OLLI_T:
Das Problem ist jedoch nach wie vor, dass der Spass nur GENAU EIN EINZIGES MAL funktioniert!
Das verstehe ich jetzt nicht so ganz. Wie soll es denn ein weiteres mal funktionieren, wenn der Dialog geschlossen wird?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
OLLI_T

Registriert seit: 13. Okt 2003
Ort: Nähe Wetzlar / Hessen
143 Beiträge
 
Delphi 5 Enterprise
 
#7

Re: NONVCL: Dialog mit ENTER bzw. ESCAPE schliessen

  Alt 1. Dez 2004, 16:04
Hallo Luckie!

Also nochmal:
  • 1. Aus Hauptfenster der Anwendung Dialog öffnen.
    2. Escape drücken => Dialog wird geschlossen
    3. Ein weiteres Mal aus dem Hauptfenster der Anwendung Dialog öffnen.
    4. Escape drücken => Ping, Ping, Ping, Ping
Das Prob trat (gottlob Vergangenheit) nur bei Fenstern auf, die keine Controls mit Fenster "Hanteln" enthalten. Den Focus auf den Dialog selber setzen löst das Problem.

Schönen Abend noch

Der OLLI
No Pain No Gain!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:39 Uhr.
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