AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

NONVCL: Dialog und Accelerator

Ein Thema von OLLI_T · begonnen am 3. Dez 2004 · letzter Beitrag vom 6. 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 und Accelerator

  Alt 3. Dez 2004, 08:43
Guten Morgen Allerseits!

Ich werd noch bekloppt!

In einem Dialog sollen diverse Einstellungen, die graphisch dargestellt werden, schnell via Tastatur ausgewählt werden.

Also hab ich munter meine Ressourcen um eine Accelerator Tabelle erweitert und die Mainloop des Programms entsprechend aufgebohrt. AccelWnd ist das Handle des Fensters, das den Tastendruck verarbeiten soll.

Delphi-Quellcode:
    If (TranslateAccelerator(AccelWnd,Accel,Msg)=0) Then Begin
      TranslateMessage(Msg);
      DispatchMessage(Msg);
    End;
Funktioniert bis dahin alles wunderbar. Der Accelerator hat ein gültiges Handle und das Hauptfenster meiner Anwendung bekommt Post in Form einer WM_COMMAND Message. Dieses Fenster wird übrigens mit CreateWindowEx erzeugt ...

Das Dumme ist nur, dass die Accelerator-Geschichte für eine Dialog gedacht, ist der vom Hauptfenster mit DialogBoxParam geöffnet wird. Tja und an dieser Stelle schweigt der Accelerator. Hat sich was mit WM_COMMAND. (Wobei ESCAPE und ENTER wunderbar funktionieren).

Was ist da los? Wollen Accelerator und Dialoge nicht miteinander?

Vielen Dank schon mal

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

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

Re: NONVCL: Dialog und Accelerator

  Alt 3. Dez 2004, 11:21
Habe einen Workaround gestrickt, der mir alle WM_CHAR Messages brav an eine Prozedur weiterleitet.

Trotzdem würde mich brennend interessieren, ob Dialoge nix mit Accelerators anfangen können!
No Pain No Gain!
  Mit Zitat antworten Zitat
Assarbad
(Gast)

n/a Beiträge
 
#3

Re: NONVCL: Dialog und Accelerator

  Alt 5. Dez 2004, 21:58
Schonmal versucht mit TranslateAccelerator() und IsDialogMessage() in Folge eine eigene Message-Loop für den Dialog aufzubauen? Also statt der Loop, die von DialogBoxParam() und Konsorten vorgegeben werden?
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: NONVCL: Dialog und Accelerator

  Alt 6. Dez 2004, 01:21
So sollte das Hauptprogramm aussehen:
Delphi-Quellcode:
begin
  { tooltips }
  InitCommonControls;

  CreateDialog(hInstance, MAKEINTRESOURCE(100), 0, @dlgfunc);
  { load acceltable }
  hAccelTbl := LoadAccelerators(hInstance, MAKEINTRESOURCE(4000));

  while true do
  begin
    if not GetMessage(msg, 0, 0, 0) then
      break;
    { no accel was pressed, go ahead }
    if TranslateAccelerator(hApp, hAccelTbl, msg) = 0 then
    { it is no dialog message, go ahead }
      if IsDialogMessage(hApp, msg) = FALSE then
      begin
        TranslateMessage(msg);
        DispatchMessage(msg);
      end;
  end;
  ExitCode := msg.wParam;
end.
Die Shortcuts werden dabei aus einem Acceleratortable aus der Resource geladen.
WM_COMMAND dann entsprechend:
Delphi-Quellcode:
    WM_COMMAND:
      begin
      { accel for closing the dialog with ESC }
        if wParam = ID_CANCEL then
          SendMessage(hDlg, WM_CLOSE, 0, 0);
      { button and menu clicks }
        if hiword(wParam) = BN_CLICKED then
        begin
          case LoWord(wParam) of
            IDC_BTNABOUT: MyMessageBox(hDlg, APPNAME, INFO_TEXT, 2);
            IDC_BTNCLOSE: SendMessage(hDlg, WM_CLOSE, 0, 0);
          end;
        end;
      { accelerators }
        if hiword(wParam) = 1 then
        begin
          case loword(wParam) of
            ID_ACCEL_CLOSE: SendMessage(hDlg, WM_CLOSE, 0, 0);
          end;
        end;
      end
Michael
Ein Teil meines Codes würde euch verunsichern.
  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 05:45 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