下面这个是我写的焦点自动移动的方法,我该如何把它定义成一个单元函数或过程放在公共单元里,以后被别的单元USES使用,我要是把form1去掉不能编译,显示不识别FindnextControl标识符,有什么好办法没?
procedure Form1.FindNextCtrl;
begin
  if FindnextControl(activeControl,True,true,False)is TEdit then
    TEdit(FindnextControl(activeControl,True,true,False)).SetFocus
  else if FindnextControl(activeControl,True,true,False)is TCombobox then
    TCombobox(FindnextControl(activeControl,True,true,False)).SetFocus
  else if FindnextControl(activeControl,True,true,False)is TDateTimePicker then
    TDateTimePicker(FindnextControl(activeControl,True,true,False)).SetFocus
  else if FindnextControl(activeControl,True,true,False)is TMemo then
    Tmemo(FindnextControl(activeControl,True,true,False)).SetFocus;
end; 

解决方案 »

  1.   

    焦點轉移不需要這麽複雜的!!你把窗體的Form1的keypreview設為True
    其它所有的可獲取焦點的控制項的TabOrder屬性按順序設置好0,1,2,3...n在窗體(Form1)的KeyDown事件寫上一句話:SelectNext(ActiveControl,true,true);
    這樣就行了,試試吧...
      

  2.   

    你定义的公共单元里里面的函数传个Form的句柄进来,这样应该就可以了。
      

  3.   

    公共单元要uses forms,还有,最好把 form 当作一个参数传过来,比如 procedure FindNextCtrl(frm:TForm);
      

  4.   

    在你的其它单元文件中uses form1的文件名即可。使用时如 form1.FindNextCtrl;
      

  5.   

    还有一个很好的方法:
      windows.PostMessage(Form1.Handle, WM_NEXTDLGCTL, 0, 0);