Zapamiętanie który komponent ma aktualnie fokus

0

Cześć,

Mam aplikację z interfejsem dotykowym. Na formie są dwa pola edit w których mogę coś wpisać. Jest też komponent ToggleSwitch (z pakietu Windows 10). Chciałbym aby po zmianie stanu tego komponentu (palcem) w momencie gdy go opuszczam fokus wrócił mi na poprzedni element Edit.
Macie pomysł jak to zrobić?

1

Oprogramuj odpowiednie zdarzenie/zdarzenia. Nie wiem jakie są w ToggleSwitch, ale pewnie typu OnChange, OnOn / OnOff itp.
Tam wpisz coś w stylu Edit1.SetFocus

0

Dobra zrobiłem ale trochę mi się to nie podoba (dobrze że chociaż działa). Dla potomnych (lub lepiej dla konstruktywnych krytyków):

var Fokus: string;

procedure TfrmMain.edtScaleEnter(Sender: TObject);
begin
  Fokus := TControl(Sender).Name;
end;

procedure TfrmMain.edtProductNameEnter(Sender: TObject);
begin
  Fokus := TControl(Sender).Name;
end;

procedure TfrmMain.swAutomaticModeClick(Sender: TObject);
begin
  tmr1.Enabled := True;
end;

procedure TfrmMain.tmr1Timer(Sender: TObject); // interval 500 ms
begin
  if Fokus = 'edtProductName' then
    edtProductName.SetFocus;
  if Fokus = 'edtScale' then
    edtScale.SetFocus;
  tmr1.Enabled := False;
end;
3

A tak nie byłby prościej?

var obj : TEdit;

procedure TForm4.EditEnter(Sender: TObject);
begin
  obj := Sender as tedit;
end;

procedure TForm4.ToggleSwitch1Click(Sender: TObject);
begin
  obj.SetFocus;
end;
4

@robertz68: nie używaj nazw komponentów, a referencji — zmienisz nazwę komponentu i kod szlag trafi. Natomiast do fokusowania kontrolki użyj metody SetFocusedControl, podając jej w parametrze referencję komponentu.

4

https://docwiki.embarcadero.com/Libraries/Sydney/en/Vcl.Forms.TScreen.OnActiveControlChange + to co w "See Also"
a dalej co z tym zrobić to już chyba wiadomo.

1 użytkowników online, w tym zalogowanych: 0, gości: 1