NO1:一个projectGroup 项目中有两个exe程序,怎样在第一个exe启动后,主窗体程序运行前,判断某个条件。如果条件满足,则主窗体继续运行。如果不满足,则运行第二个程序?NO2:reference的含义。有这样一个过程:
procedure ShowFrm(FormClass:TFormClass;var reference);
begin
TForm(reference):=FormClass.create(application);
TForm(reference).showmodual;
TForm(reference).free;
TForm(reference):=nil;
end;这里的reference是什么意思,还有其他的含义和用法吗?而一般情况下,它还可以怎么用?NO3:关于SelectNext;本来这个方法是选择下一个控件,我为了让程序中每个窗体中的TEDIT能用回车键跳转,我在公共单元写了一个这样的过程:
procedure EditKey(Sender:TObject;var Key char);
begin
if key=#13 then
begin
selectNext(((sender) as Twincontrol),true,true);
key=#0;
end;
end;
编译时总是提示SELECTNEXT没有被声明,我在USES子句中加了FORMS,CONTROLS……等都不行,但同样的过程我放到TEDIT的KEYPRESS事件中,运行良好。我想把这个过程放到公共的单元,要怎样处理?
NO4:Creat(),括号中的参数?比如说窗体的创建,有时create可以不带参数,有时可以带Application,有时可以带self。怎样区分,尤其是SELF参数该怎么用?西西~~
我这一百分不太好拿哦?
先谢谢大家了!!

解决方案 »

  1.   

    NO1:
    修改project文件代码
    下面代码中加入API调用,启动第二个程序。
    参考吧
    program Project1;uses
      Forms,
      Dialogs,
      Controls,
      Unit1 in 'Unit1.pas' {Form1};{$R *.res}
    var PassWord: string; //password begin
      if InputQuery('Password','Enter your password',PassWord) then
         if PassWord='www' then
         begin
            Application.Initialize;
            Application.CreateForm(TForm1, Form1);
            Application.Run;
         end
         else
            MessageDlg('Incorrect PassWord!',mtError,[mbok],1);
    end.NO2:以前不知道这种定义也能用。一般定义成TWincontrol型的。NO3:用PostMessage()吧。
    要不就自定义一个selecttext方法。
    NO4:Creat()
    可以写成多种形式,是因为有不同的重载函数。
    效果个人感觉是一样的。
    self是类自身的指针。
    如:
    form1:=Tform1.create(form1)
    form1:=Tform1.create(self)
    是一样的。self实际上就是from1,是指向Tform类的实例form1的指针。
      

  2.   

    问题1:判断条件成立了,主窗体show,不成立的话那就用shellapi这个方法来运行第二个程序。
    问题二:只是写法不一样而已,基本上没有什么区别的
    问题三:换个方法。写个公用的过程
    如:procedure tfrmluru.chagefocus(edt:tcxtextedit;Key: Char);
    begin
      if key=#13 then
       edt.SetFocus;
    end;
    问题四:多种形式,重载的原因。
    实现的结果基本一致
      

  3.   

    No3: 你可以把窗体也作为参数传过去;
    procedure EditKey(Sender:TWinControl; CurEdit: TWinControl;var Key char);
    begin
    if key=#13 then
    begin
      Sender.selectNext((CurEdit,true,true);
      key=#0;
    end;
    end;
      

  4.   

    先谢谢各位。  不好意思,因为我现在很少上网,所以我一般遇上什么问题会先积累下来,等到上网时,在
    一并提问。我的问题虽然多,但是我给出的分数也不是很少哦?所以请大家帮帮忙~ ^-^  对于第一个问题,是我做的一个系统。这个系统有个单独的初始化程序(是动态建立数据库和表)。在主系统运行时会先检测注册表中的一个标志位,如果没有,就在主系统的主窗体运行前运行初始化程序,当初本来想写成DLL形式。但因为初始化程序可是说是一个单独的系统,写成DLL,调用会比较麻烦(也可能是我DLL用的还不是很熟练),所以选择将初始化程序写成一个EXE文件。
      如果哪位有更好的建议,我可以另外开贴给分。谢谢大家了。
      

  5.   

    NO1
    可以在PROGRAM的INITIALIZATION判断.
    NO2:REFERNECE为无类型变量参数,就是可以在函数体中更改初始值.
    NO4,CREATE的参数是指定本身的所有者且所有者一定要为TWINCONTROL派生的控件.
      

  6.   

    对与NO4我试过很多办法都不行,包括所说的加TWINCONTROL,TFORM的控件作为其所有者
    都是说SELECTNEXT没有声明。
    有兴趣的可以建一个UNIT试试。我在UNIT上USES了CONTROLS,不知道是不是少USES什么UNIT?
      

  7.   

    使用一个控件,DOSMOVE,不需要编写,回车、上下左右一样用
      

  8.   

    NO1.方法很多,最简单的就是在项目源文件(使用view source 菜单打开的)在第一个Application.CreateFrom(...)前判断NO2.reference不是什么意思,只是一个变量名而已,使用var前缀,后面不带类型变明该变量是
        一个无类型的变量.
     
    NO3.这个很简单,告诉你找引用文件的方法:  你先在TEdit的OnKeyPress中写下SelectNext
        然后在SelectNext这个单词上点击鼠标右键,在弹出的菜单中选择Find Declaration
        打开的文件就是你需要引用的单元NO4.不太清楚的你疑惑到底是什么.Create()中带不带参数以及带何种参数是根据不同的对象而不
        同的,我可以定义一个新的对象可能需要中Create中传入3个,4个或者更多个参数.问这个问题
        说明你对对象的概念还不太清晰,最好先补一补这方面的知识.
      

  9.   

    谢谢,zwjchina(蒲石) 
    我懂你的意思了~谢谢各位~给分罗~