Improve company productivity with a Business Account.Sign Up

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 550
  • Last Modified:

Problem with TAB on a form

On form1 I drop about 10 Edit Controls. I move to controls with TAB key. When I'm on the 10th edit, I go to the first with tab.OK.

Next, I create  form2 as child (like a toolbar) of form1.
Now , when I'm on the 10th edit, if I press TAB, I go to the form2, then (next tab) to the first edit.

How avoid this ?
How exclude the form2 from the "tab circle" ?
I want to never set the focus to the form2 when I press TAB.
0
jpdupont
Asked:
jpdupont
  • 5
  • 3
1 Solution
 
vladikaCommented:
property TabStop
0
 
jpdupontAuthor Commented:
A form had a TabStop property ???
0
 
vladikaCommented:
Yes, in run-time mode

Any WinControl has TabStop property (see in help)
Some controls has public TabStop property
others controls has published TabStop property

Form has PUBLIC TabStop property

write handler OnFormCreate
  Form.TabStop := False;

0
Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

 
vladikaCommented:
Also you can override procedure GetTabOrderList(List: TList)

For example
type
  TForm1 = class(TForm)
  public
    procedure GetTabOrderList(List: TList); override;
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.GetTabOrderList(List: TList);
var
  I: Integer;
  P: TWinControl;
begin
  inherited GetTabOrderList(List);
  if (ActiveControl = nil) or (ActiveControl.Parent = nil) then Exit;
  P := ActiveControl.Parent;
  for I := List.Count-1 downto 0 do
    if P <> TControl(List[I]).Parent then List.Delete(I);
end;
// In this example "tab circle" is controls which have same parent as ActiveControl

0
 
jpdupontAuthor Commented:
Vladika,

Thanks for the help.
1/I just try the TabStop property (OnCreate ...) : don'twork.
2/I see your comment, and I try this as soon as possible.

Thanks again
Jean-Pol
0
 
jpdupontAuthor Commented:
Hi,
Your code don't work.
I put this in the code to create a child window :

procedure TWCombo.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);
  with Params do begin
    Style := (Style or WS_CHILD) and (not WS_POPUP);
    WndParent := Application.MainForm.Handle;
  end;
  Parent := Application.MainForm;
end;

Correct ?

Regards,
JP
0
 
vladikaCommented:
Hi!

1) From which is TWCombo inherited?
2) Is TWCombo design-time component?
3) I think CreateParams should look as

procedure TWCombo.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);
  with Params do
    Style := (Style or WS_CHILD) and (not WS_POPUP);
end;

. and when you create TWCombo ...
W := TWCombo.Create(Form1);
W.TabStop := False;
W.Parent := Form1;
......... W initialization (set height, width etc)........

4) if you wish you can send me program by email demon@dezcom.mephi.ru or
Dmitri_Ulitski@dialogbank.com and I try to help you
5) sorry for english :)

0
 
vladikaCommented:
Answer is
1) use TabStop property to exclude/include control from/in "tab circle"
2) use GetTabOrderList for full "tab circle" control


0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

  • 5
  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now