1.写一函数,实现给定控件及子控件的Enabled属性赋值
2.动态链接库实际使用中最容易出现问题的情况有哪些?以及解决办法?
3.现在Utils有一个类Ttemp,该类在需要在第一时间创建以方便后面各窗体调用,请问如何才能最早创建出该类的实例?

解决方案 »

  1.   

    1. 控件Components属性3. 可以用initialization
      

  2.   

    1.
    procedure SetCtrsEnable(ctr: TWinControl; Enabled: Bool);
    var
      i: Integer;
    begin
      for i := 0 to ctr.ControlCount -1 do
        ctr.Controls[i].Enabled := Enabled;
      ctr.Enabled := Enabled;
    end;
      

  3.   

    谢谢 deepbluesea(deepbluesea), meiqingsong(阿飛)!!!
    还有第2题,哪位能提供解答?
      

  4.   

    参数的传递的顺序有讲究,不同编译器传递参数的顺序不同,特别是不同编译器之间相互调用dll时
    以及参数的类型,例如字符型不要STRING,用PCHAR
      

  5.   

    没人来的?
    看在美女的份上,回答第一个,答错了楼下修正。
    uses TypInfo;
    procedure TForm1.SetEnabled(sender: TObject);
    begin
      if IsPublishedProp(Sender,'Enabled') then //判断有没有Enabled属性
         SetPropValue(Sender,'Enabled',False);  //设置Enabled为False
    end;调用:
    procedure Button1Click(Sender: TObject);
    begin
      SetEnabled(Button2);
    end;稍加修改就行了……
      

  6.   

    没人来的?
    看在美女的份上,回答第一个,答错了楼下修正。
    uses TypInfo;
    procedure TForm1.SetEnabled(sender: TObject);
    begin
      if IsPublishedProp(Sender,'Enabled') then //判断有没有Enabled属性
         SetPropValue(Sender,'Enabled',False);  //设置Enabled为False
    end;调用:
    procedure Button1Click(Sender: TObject);
    begin
      SetEnabled(Button2);
    end;稍加修改就行了……
      

  7.   

    晕~~MM别怪偶,网络太慢了……[转载]
       尽量使用标准DLL接口。指的是传递的参数类型及函数返回类型不能是Delphi特有的,比如string(AnsiString),以及动态数组和含有这些类型成员的复合类型(如记录),也不能是包含有这些类型成员数据成员的对象类型,以避免可能的错误。如果使用了string类型或动态数组类型,且调用方不是Delphi程序,则基本上会报错。如果调用方是Delphi但调用方或被调用方没有在工程文件的第一包含单元不是ShareMem,也可能会出错。  如果调用方是Delphi应用程序,则可能可以使用不包含禁止类型(string, 动态数组)数据成员的对象作为参数或返回值,但也应尽量避免。  如果调用方与被调用方都是Delphi程序,而且要使用string或动态数组作参数,则双方工程文件的第一包含单元必须是ShareMem。(C++Builder程序的情况可能与此相同,不过没有测试过。)  如果调用方不是Delphi程序,则string、动态数组、包含string或动态数组的复合数据类型及类实例,都不能作为参数及返回值。  因此,为了提高DLL的复用范围,避免可能存在的错误,应当使用标准WIN32 API标准参数类型,以前使用string的变量,可以使用PChar(s)转换。动态数组则转换为指针类型(@array[0]),并加上数组的长度。  如果因为调用方与被调用方都是Delphi程序,为了编写方便,不想进行上述转换,则推荐使用运行时包的形式。运行时包可以保证动态分配数据的正确释放。这样因为其扩展名(.bpl),显出该文件仅限于Delphi/C++Builder使用(不象DLL)。  其次,尽量避免使用overload的函数/过程作输出,如果同一操作有多个方式,则可以让函数/过程名有少许差别,类似于Delphi中的FormatXXXX、CreateXXXX等函数及方法,如CreateByDefaultFile, CreateDefault。  最后,作为DLL的提供者,应当提供直接编程的接口文件,如Delphi中的.pas或.dcu(最好是.pas,因为可以有注释)、C及C++中的.h和.lib。而不是让使用者们自己创建。如果非要有overload的函数/过程,这一点显得特别重要。另外,作为Delphi应用,提供的.pas文件可以是提前连接的(使用external指定DLL中的输出函数),也可以是后期连接的(使用LoadLibrary、GetProcAddress),DLL提供者提供编程接口文件,既显得正式(或HiQoS),又有保障.
      

  8.   

    第二题除了hsmserver(撒哈拉之雨的悲伤) 所说的外,类型是shortstring也是可以的
      

  9.   

    如果子控件的子控件还要设置的话,得用递归
    procedure SetCtrsEnable(ctr: TWinControl; Enabled: Bool);
    var
      i: Integer;
    begin
      ctr.Enabled := Enabled;
      for i := 0 to ctr.ControlCount -1 do
        SetCtrsEnalbe(TWinControl(ctr.Controls[i]), Enabled);
    end;
      

  10.   

    各位大哥,小弟初学Delphi,在这里不知道为什么不能发帖,只好在回复里问了:为什么ToolBar里的TButton设置了caption属性,但是界面上却显示不出来啊??????急!!!
      

  11.   

    1)要看它是否具有Enabled属性的,看是从什么类继承来的
    2)分为静态链接(LoadLibrary,GetProcAddressFreeLibrary),和动态链接,还有一些调用约定等等
    3)initialization
      tempList:=TList.Create;
      ...
      finalization(没写错吧?)
      tempList.Free;
      

  12.   

    嘿嘿,楼上的老兄:
      finalization(没写错吧?)  
      --没写错噢  2)分为静态链接(LoadLibrary,GetProcAddressFreeLibrary),和动态链接,还有一些调用约定等等
      --这个是静态链接吗?LoadLibrary,GetProcAddress,FreeLibrary看MM看走神啦??
      

  13.   

    哈哈简单问题么,这么热闹的http://lysoft.7u7.net
      

  14.   

    1.阿飞已解2.(1)如要用string类型,两端都需要引用shraemem单元,否则用PCHAR(尤其是在语言混用开发时一定要用PCHAR
    (2) 语言混用开发时,函数调用方式应为stdcall
    (3) 引用动态链接时注意区分大小写,DLL是对大小写敏感的,需注意3.在Application中申明并创建全局对象实例PS:
    现在真是的,世风日下,哎
      

  15.   

    To Kevin_Lmx(繁华阅尽) :
      阁下的回答让我受益匪浅,多谢了。
      

  16.   

    To aus(天兵) 为什么你也要谢Kevin_Lmx(繁华阅尽) ?
      

  17.   

    2.引用动态链接时注意区分大小写,DLL是对大小写敏感的
      

  18.   

    哈哈,我这就改ID去,改成什么什么MM的,那样帮我人就多了哈!
      

  19.   

    楼上的一些人,我还真服了你们,常说CSDN上没MM,有MM来诚心向大家请教了,却又这样起哄~~~
    看来我得赶快贴啦^-^
      

  20.   

    请问: AliceFeel(飞过西伯利亚的蝴蝶),你真的是MM吗?
      

  21.   

    1、{使控件设为只读和变换颜色}
    procedure szzdsx(bz: boolean);
    var i:integer;
        xsys:tcolor;
        xsclor:tcolor;
    begin
    if bz then xsys:=clbtnface
          else xsys:=clwindow;
               xsclor:=clbtnface;
         for i:=0 to componentcount-1 do
             begin
                  if components[i] is TDBEdit
                     then begin
                          tdbedit(components[i]).readonly:=bz;
                          tdbedit(components[i]).color:=xsys;
                          end;
                  if components[i] is TDBgrid
                     then begin
                          tdbgrid(components[i]).readonly:=bz;
                          tdbgrid(components[i]).color:=xsys;
                          end;
                  if components[i] is TDBComboBox
                     then begin
                          TDBComboBox(components[i]).readonly:=bz;
                          TDBComboBox(components[i]).color:=xsys;
                          end;
                  if components[i] is TDBmemo
                     then begin
                          TDBmemo(components[i]).readonly:=bz;
                          TDBmemo(components[i]).color:=xsys;
                          end;
                  if components[i] is TDBimage
                     then begin
                          TDBimage(components[i]).readonly:=bz;
                          TDBimage(components[i]).color:=xsys;
                          end;
                  if components[i] is TDBCheckBox
                     then begin
                          TDBCheckBox(components[i]).readonly:=bz;
                          TDBCheckBox(components[i]).color:=xsclor;
                          end;
                  if components[i] is TCheckBox
                     then begin
                          TCheckBox(components[i]).enabled:=not bz;
                          TCheckBox(components[i]).color:=xsclor;
                          end;         end;
    end;