Einzelnen Beitrag anzeigen

quendolineDD

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

Re: mit den Cursortasten zum nächstliegen Control springen

  Alt 25. Mai 2009, 13: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