一个应用软件有一个主窗体(Mainform)和若干个子窗体(form1,form2,form3....),每个子窗体为了设置Edit控件的ImeMode、ImeName属性值以控制是否打开汉字输入都要在该窗体的OnShow()中写上相同的几个语句很是麻烦,如对于Form1而言:
  for i := 0 to Form1.ComponentCount - 1 do
  if Form1.Components[i].ClassType = TEdit then
  begin
    if TEdit(Form1.Components[i]).ImeMode = imOpen then
      TEdit(Form1.Components[i]).ImeName := '五笔字型'
    else if TEdit(Form1.Components[i]).ImeMode = imAlpha then
      TEdit(Form1.Components[i]).ImeName := '';
  end;不知能否只在Mainform中写一个全局过程/函数,这样只要在每个子窗体的OnShow()中写一条语句调用它(把子窗体的名字作为传递参数)来初始化该子窗体中的所有Edit控件?我自己不会写,还望各位指教。谢谢!

解决方案 »

  1.   

    方法一:
    如楼主说所说,写个通用过程
    procedure SetAllControlIme(AForm:TForm);
    var
      i:integer;
    begin
      for i := 0 to Aform.ComponentCount - 1 do
      if Aform.Components[i].ClassType = TEdit then
      begin
        if TEdit(Aform.Components[i]).ImeMode = imOpen then
          TEdit(Aform.Components[i]).ImeName := '五笔字型'
        else if TEdit(Aform.Components[i]).ImeMode = imAlpha then
          TEdit(Aform.Components[i]).ImeName := '';
      end;
    end;每个子窗体调用它  
    SetAllControlIme(self);方法二:
    写个基类form,如TBaseForm
    通用的过程在TBaseForm里写好,
    每个子窗体继承这个TBaseForm
      

  2.   

    Thanks a lot to MerKey2002!