AGB  ·  Datenschutz  ·  Impressum  







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

[gelöst] Cursortasten von Buttons fernhalten

Ein Thema von Schwedenbitter · begonnen am 19. Sep 2017 · letzter Beitrag vom 20. Sep 2017
Antwort Antwort
nahpets
(Gast)

n/a Beiträge
 
#1

AW: [gelöst] Cursortasten von Buttons fernhalten

  Alt 20. Sep 2017, 09:13
Noch ein bisserl kürzer:
Delphi-Quellcode:

procedure TForm1.ApplicationEvents1ShortCut(var Msg: TWMKey; var Handled: Boolean);
begin
   if (ActiveControl is TButton) then
   begin
      Handled:= True;
      case Msg.CharCode of
         VK_LEFT : (ActiveControl as TButton).Left := (ActiveControl as TButton).Left - 16;
         VK_UP : (ActiveControl as TButton).Top := (ActiveControl as TButton).Top - 16;
         VK_RIGHT : (ActiveControl as TButton).Left := (ActiveControl as TButton).Left + 16;
         VK_DOWN : (ActiveControl as TButton).Top := (ActiveControl as TButton).Top + 16;
      else
         Handled := False;
      end
   end;
end;
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.666 Beiträge
 
Delphi 12 Athens
 
#2

AW: [gelöst] Cursortasten von Buttons fernhalten

  Alt 20. Sep 2017, 10:01
Oder auch
Delphi-Quellcode:
procedure TForm1.ApplicationEvents1ShortCut(var Msg: TWMKey; var Handled: Boolean);
const
  STEP = 16;
var
  Button: TButton;
begin
  if (ActiveControl is TButton) then
    begin
      Button := TButton(ActiveControl);
      Handled := true;
      case Msg.CharCode of
         VK_LEFT : Button.Left := Button.Left - STEP;
         VK_UP : Button.Top := Button.Top - STEP;
         VK_RIGHT : Button.Left := Button.Left + STEP;
         VK_DOWN : Button.Top := Button.Top + STEP;
      else
         Handled := False;
      end;
    end;
end;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#3

AW: [gelöst] Cursortasten von Buttons fernhalten

  Alt 20. Sep 2017, 10:11
Noch ein bisserl kürzer:
...
Das stimmt! Ich wusste nicht, dass von Hause aus gilt Handled:= False; . Ich werde gleich mal den Code anpassen. Ich habe es übrigens bei mir auch mit einer Variable besser lesbar gemacht.

Allerdings ist die Lösung doch (noch) nicht perfekt:
Wenn ich jetzt ein weiteres Fenster öffne und dort mit den Cursortasten rumhantiere, dann bewegt sich munter der jeweils auf dem Hauptform befindliche, aktive TButton. Auf dem Kindfenster passiert hingegen nichts mehr Das ist sehr ungünstig. Daher noch ein weiteres Codeschnipsel :
Delphi-Quellcode:
procedure TForm1.ApplicationEvents1ShortCut(var Msg: TWMKey; var Handled: Boolean);
const
  STEP = 16;
var
  Button: TButton;
begin
  if (Screen.ActiveForm = self) and // Ist das gewünschte Fenster aktiv?
     (ActiveControl is TButton) then
    begin
      Button := TButton(ActiveControl);
      Handled := true;
      case Msg.CharCode of
         VK_LEFT : Button.Left := Button.Left - STEP;
         VK_UP : Button.Top := Button.Top - STEP;
         VK_RIGHT : Button.Left := Button.Left + STEP;
         VK_DOWN : Button.Top := Button.Top + STEP;
      else
         Handled := False;
      end;
    end;
end;
Alex Winzer
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#4

AW: [gelöst] Cursortasten von Buttons fernhalten

  Alt 20. Sep 2017, 10:44
Passen wir es nochmal an (dann können wir auf die implizit gemachte Annahme über den Wert von Handled verzichten):
Delphi-Quellcode:
procedure TForm1.ApplicationEvents1ShortCut(var Msg: TWMKey; var Handled: Boolean);
const
  STEP = 16;
var
  Button: TButton;
begin
  Handled := False;
  if (Screen.ActiveForm = self) and // Ist das gewünschte Fenster aktiv?
     (ActiveControl is TButton) then
    begin
      Button := TButton(ActiveControl);
      Handled := true;
      case Msg.CharCode of
         VK_LEFT : Button.Left := Button.Left - STEP;
         VK_UP : Button.Top := Button.Top - STEP;
         VK_RIGHT : Button.Left := Button.Left + STEP;
         VK_DOWN : Button.Top := Button.Top + STEP;
      else
         Handled := False;
      end;
    end;
end;
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
989 Beiträge
 
Delphi 6 Professional
 
#5

AW: [gelöst] Cursortasten von Buttons fernhalten

  Alt 20. Sep 2017, 11:58
Hmm..

Oder noch einfacher, damit dies nur auf dem einen Formular läuft:

OnShortCut vom Formular verwenden, dann brauchst Du kein ApplicationEvents.
  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 09:31 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