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
quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#1

Re: mit den Cursortasten zum nächstliegen Control springen

  Alt 25. Mai 2009, 12:30
Eventuell wäre eine Visualisierung hilfreich.
Das du nur auf die obersten Komponente des Planes springst kommt daher, das du dem Parent den Fokus gibst. Du müsstest dann innerhalb des nächsten TPlanGame das gewünschte Unterelement noch direkt anvisieren.

Wenn ich mich nicht vertan habe, ist das hier selbiger Code wie oben nur etwas übersichtlicher. Auch nutze ich eine andere Technik der Einrückung.

Delphi-Quellcode:
var
  i: Integer;
  TmpObj, TPGObj : TPlanGame;
begin
  TmpObj := nil;

  for i := 0 to Parent.ComponentCount - 1 do
    if Parent.Components[i].ClassType = TPlanGame then
    begin
      TPGObj := Parent.Components[i];
      if TPGObj.Enabled and TPGObj.Visible then
        case Key of
          VK_RIGHT :
            begin
              if TPGObj.Left > Self.Left then
                if Obj = nil then
                  TmpObj := TPGObj
                else
                begin
                  if TPGObj.Left < TmpObj.Left then
                    TmpObj := TPGObj
                  else
                  if TPGObj.Left = TmpObj.Left then
                    if TPGObj.Top < TmpObj.Top then
                      TmpObj := TPGObj;
                end;
            end;

          VK_LEFT :
            begin
              if TPGObj.Left < Self.Left then
                if TmpObj = nil then
                  TmpObj := TPGObj
                else
                begin
                  if TPGObj.Left > TmpObj.Left then
                    TmpObj := TPGObj
                  else
                  if TPGObj.Left = TmpObj.Left then
                    if TPGObj.Top < TmpObj.Top then
                      TmpObj := TPGObj;
                end;
            end;

          VK_UP :
            begin
              if TPGObj.TabOrder = Self.TabOrder - 1 then
                TmpObj := TPGObj;
            end;

          VK_DOWN :
            begin
              if TPGObj.TabOrder = Self.TabOrder + 1 then
                TmpObj := TPGObj;
            end;
        end;
    end;

    if TmpObj <> nil then
      if TmpObj.Enabled and TmpObj.Visible then
        TmpObj.SetFocus;
  inherited;
end;
Edit: inherited sollte schon noch in der Prozedur liegen
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  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 18:19 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