1.写一函数,实现给定控件及子控件的Enabled属性赋值
2.动态链接库实际使用中最容易出现问题的情况有哪些?以及解决办法?
3.现在Utils有一个类Ttemp,该类在需要在第一时间创建以方便后面各窗体调用,请问如何才能最早创建出该类的实例?
2.动态链接库实际使用中最容易出现问题的情况有哪些?以及解决办法?
3.现在Utils有一个类Ttemp,该类在需要在第一时间创建以方便后面各窗体调用,请问如何才能最早创建出该类的实例?
解决方案 »
- 不是一个有效的整型值
- 感知控件问题,两个DBCheckBox,?
- 也许Delphi的春天不会再有,但它的秋天,还很长很长
- idTcpServer组件的CommandHandle之命令事件中如何写ADOQuery的代码,急!!!
- 使用delphi调用API时的数据类型转换问题???
- !!!!!!!赶在五一的之前升级了,祝朋友们五一快乐 1!!!!!!!!
- 程序在日文WINDOWS下的使用
- 我有一个MAXTOR的金钻DiamondMax Plus 9/6Y060L0 7200转 60G要出让,在广州。
- IActiveDesktop问题,不但给分,而且给钱!
- 急!!!如何把某一个目录下的所有.zip结尾的文件保存到listbox中?第一个正确回答给分
- 帮我翻译一个函数,vb-》delphi 在线等
- 一个dll函数调用的问题(指针参数)
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;
还有第2题,哪位能提供解答?
以及参数的类型,例如字符型不要STRING,用PCHAR
看在美女的份上,回答第一个,答错了楼下修正。
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;稍加修改就行了……
看在美女的份上,回答第一个,答错了楼下修正。
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;稍加修改就行了……
尽量使用标准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),又有保障.
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;
2)分为静态链接(LoadLibrary,GetProcAddressFreeLibrary),和动态链接,还有一些调用约定等等
3)initialization
tempList:=TList.Create;
...
finalization(没写错吧?)
tempList.Free;
finalization(没写错吧?)
--没写错噢 2)分为静态链接(LoadLibrary,GetProcAddressFreeLibrary),和动态链接,还有一些调用约定等等
--这个是静态链接吗?LoadLibrary,GetProcAddress,FreeLibrary看MM看走神啦??
(2) 语言混用开发时,函数调用方式应为stdcall
(3) 引用动态链接时注意区分大小写,DLL是对大小写敏感的,需注意3.在Application中申明并创建全局对象实例PS:
现在真是的,世风日下,哎
阁下的回答让我受益匪浅,多谢了。
看来我得赶快贴啦^-^
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;