vložil Radek Červinka
13. prosince 2012 00:43
V současné době je ovládání programu čistě za pomoci klávesnice podceňované. Ale věřte, že existují uživatelé, kteří na tu krysu nebo touchpad (trackpoint) nešáhnou, jak je den dlouhý. Proto není vhodné podceňovat takové aspekty návrhu UI jako je i TabOrder.
Při zobrazení formuláře je vybrán (focus) prvek, který je povolený a má nejmenší TabOrder a povolený TabStop. Programově se dá focus změnit za pomoci volání metody SetFocus, kterou mají následníci TWinControl (což je předchůdce většiny vizuálních komponent).
if edt.CanFocus then
edt.SetFocus;
Pokud chcete ovšem něco podobného provést před zobrazením okna (nebo podle mne i nastavit focus prvku, který je např. na neaktivní záložce TPageControl) tak se dostane do problémů s vyjímkou Cannot focus a disabled or invisible window.
A tím se dostávám k jádru. V takovém případě stačí nastavit property ActiveControl dotyčného formuláře a změna bude po zobrazení aktivní.
procedure TForm4.Button1Click(Sender: TObject);
begin
with TForm1.Create(nil) do
begin
try
// Button1.SetFocus; // bug
ActiveControl := Button1;
ShowModal;
finally
Free;
end;
end;
end;