AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi mit den Cursortasten zum nächstliegen Control springen
Thema durchsuchen
Ansicht
Themen-Optionen

mit den Cursortasten zum nächstliegen Control springen

Ein Thema von Optiplex · begonnen am 11. Mai 2009 · letzter Beitrag vom 2. Jun 2009
Antwort Antwort
Optiplex

Registriert seit: 5. Mär 2008
131 Beiträge
 
Delphi 2005 Personal
 
#1

Re: mit den Cursortasten zum nächstliegen Control springen

  Alt 2. Jun 2009, 08:15
So und hier wie versprochen die komplette Procedure, ich hoffe, dass einige von euch sie gebrauchen können, wenn jemand noch eine Verbesserung sieht oder macht gebt mir bitte Bescheid.

In die Komponente wurde eine besondere Tastatursteuerung integriert damit diese
einwandfrei funktioniert ist folgendes zu beachten:
1- mit den Cursortasten kann nur innerhalb der Komponentenklasse gesprungen
werden
2- mit den Cursortasten rechts und links kann jeweils auf die oberste
Komponente in der nächsten Reihe rechts oder Links gesprungen werden.
3- mit den Cursortasten rauf und runter kann dann in der Reihe eine
Komponente nach oben oder unten gesprungen werden.Damit dies Funktioniert
müssen die Komponenten innerhalb der Reihe den gleichen X-Achsenwert
(Left) haben.
4- mit der Space-Taste wird das Click-Ereignis ausgelöst.
5- die Tab-Taste funktioniert wie bisher nach der Taborder.
Delphi-Quellcode:
////////////////////////////////////////////////////////////////////////////////
// Die neuen Tastatur Ereignisse
//
procedure TPlanGame.KeyDown(var Key: Word; Shift: TShiftState);
var iii:integer;
  obj: tObject;
begin
  obj:=nil;
  If (Key=vk_Right) or (Key=vk_Left) or (Key=vk_Down) or (Key=vk_up)then begin
    for iii :=0 to Parent.ComponentCount-1 do
      if Parent.Components[iii].classtype=TPlanGame then begin
        if TPlanGame(Parent.Components[iii]).enabled and
          TPlanGame(Parent.Components[iii]).Visible then //begin
          case Key of
            vk_Right:
              begin
                if TPlanGame(Parent.Components[iii]).Left > Left then
                  if obj=nil then obj:= Parent.Components[iii]
                else begin
                  if (TPlanGame(Parent.Components[iii]).Left < TPlanGame(obj).Left) then obj:=Parent.Components[iii];
                  if (TPlanGame(Parent.Components[iii]).Left = TPlanGame(obj).Left) then
                    if (TPlanGame(Parent.Components[iii]).Top < TPlanGame(obj).Top)then obj:=Parent.Components[iii];
                end;
              end;
            vk_Left:
              begin
                if TPlanGame(Parent.Components[iii]).Left < Left then
                  if obj=nil then obj:= Parent.Components[iii]
                else begin
                  if (TPlanGame(Parent.Components[iii]).Left > TPlanGame(obj).Left) then obj:=Parent.Components[iii];
                  if (TPlanGame(Parent.Components[iii]).Left = TPlanGame(obj).Left) then
                    if (TPlanGame(Parent.Components[iii]).Top < TPlanGame(obj).Top)then obj:=Parent.Components[iii];
                end;
              end;
            vk_Down:
              begin
                if (TPlanGame(Parent.Components[iii]).Left = Left) and
                  (TPlanGame(Parent.Components[iii]).Top > Top)then
                  if obj=nil then obj:= Parent.Components[iii]
                else
                  if (TPlanGame(Parent.Components[iii]).Top < TPlanGame(obj).Top) then obj:=Parent.Components[iii];
              end;
            vk_up:
              begin
                if (TPlanGame(Parent.Components[iii]).Left = Left) and
                  (TPlanGame(Parent.Components[iii]).Top < Top)then
                  if obj=nil then obj:= Parent.Components[iii]
                else
                  if (TPlanGame(Parent.Components[iii]).Top > TPlanGame(obj).Top) then obj:=Parent.Components[iii];
              end;

          end;
        //end;
      end;
      if obj<>nil then
        if TPlanGame(obj).Enabled and TPlanGame(obj).Visible then TPlanGame(obj).Setfocus;
  end;
  if Key=VK_Space then Click;
  inherited;
end;
//===
Gruss und Danke Dieter
  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 16:00 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