level 1
delphi 把一个form的控件都设置成只读,有什么简便的方法,求指导~~
2014年12月14日 14点12分
1
level 7
form只读?我估计这样连最大化、最小化、关闭按钮都无法使用了。(没安装delphi,无法测试)
你可以把所有控件放在一个panel里,然后 panel1.enabled:=false;
2014年12月14日 16点12分
2
刚试了,确实是这样,而且任务栏右键都关闭不了。
2014年12月15日 06点12分
level 1
我是想把所有form里面的控件都改为enabled:=false;但是不知道怎么写语句比较简便,如果form.enable:=false的话那么控件虽然不会不会变暗
2014年12月15日 02点12分
3
楼主知道啥叫循环语句吗?楼主知道什么叫继承吗?楼主知道 enabled 属性是从哪里继承来的吗?
2014年12月15日 03点12分
回复 wang_80920 :那我是循环遍历frm.Components吗,但是Components没有enable属性,不知道哪个东西包含所有包含的控件
2014年12月15日 03点12分
回复 nuoyanok :可以的
2014年12月15日 06点12分
回复 nuoyanok :我问了你三个问题。你都没回复。我就当你不知道吧。那么你不知道,不会去看书吗?懒得看书,就去找淘宝。
2014年12月15日 07点12分
level 6
四种方法:
1,根据2楼说的,可以考虑焦点在哪个子控件上关闭哪个。
2,用一个透明或者半透明层遮挡。
3,拦截所有消息,只处理你允许的消息。
4,直接截图代替原有的控件覆盖→_→绝对只读啊。(比2还彻底)
2014年12月19日 13点12分
4
level 6
GetControlIsReadonly(AControl:TWinControl;sReadOnlyField:string);
var
cntI:Integer;
begin
for cntI:=0 to AControl.ControlCount-1 do
begin
if AControl.Controls[cnti] is TDBeditEH THEN
BEGIN
if Pos('['+TDBeditEH(AControl.Controls[cnti]).DataField+']',sReadOnlyField)>=1then
begin
TDBeditEH(AControl.Controls[cnti]).Enabled:=true;
TDBeditEH(AControl.Controls[cnti]).ReadOnly:=false;
end
else
begin
TDBeditEH(AControl.Controls[cnti]).ReadOnly:=true;
if TDBeditEH(AControl.Controls[cnti]).EditButtons.Count>0 then
begin
TDBeditEH(AControl.Controls[cnti]).Enabled:=false;
end;
end;
end
ELSE IF AControl.Controls[cnti] is TDBdatetimeeditEH THEN
BEGIN
if Pos('['+TDBdatetimeeditEH(AControl.Controls[cnti]).DataField+']',sReadOnlyField)>=1then
begin
TDBdatetimeeditEH(AControl.Controls[cnti]).ReadOnly:=false;
end
else
begin
TDBdatetimeeditEH(AControl.Controls[cnti]).ReadOnly:=true;
end;
end
ELSE IF (AControl.Controls[cnti] is TDBimage) THEN
BEGIN
if Pos('['+TDBimage(AControl.Controls[cnti]).DataField+']',sReadOnlyField)>=1then
begin
TDBimage(AControl.Controls[cnti]).ReadOnly:=false;
end
else
begin
TDBimage(AControl.Controls[cnti]).ReadOnly:=true;
end;
end
ELSE IF (AControl.Controls[cnti] is TRzDBRadioGroup) THEN
BEGIN
if Pos('['+TRzDBRadioGroup(AControl.Controls[cnti]).DataField+']',sReadOnlyField)>=1then
begin
TRzDBRadioGroup(AControl.Controls[cnti]).Enabled:=true;
end
else
begin
TRzDBRadioGroup(AControl.Controls[cnti]).Enabled:=false;
end;
end
else IF AControl.Controls[cnti] is TDBmemo THEN
BEGIN
if Pos('['+TDBmemo(AControl.Controls[cnti]).DataField+']',sReadOnlyField)>=1then
begin
TDBmemo(AControl.Controls[cnti]).ReadOnly:=false;
end
else
begin
TDBmemo(AControl.Controls[cnti]).ReadOnly:=true;
end;
end
else IF AControl.Controls[cnti] is TDBCheckBoxEh THEN
BEGIN
if Pos('['+TDBCheckBoxEh(AControl.Controls[cnti]).DataField+']',sReadOnlyField)>=1then
begin
TDBCheckBoxEh(AControl.Controls[cnti]).ReadOnly:=false;
end
else
begin
TDBCheckBoxEh(AControl.Controls[cnti]).ReadOnly:=true;
end;
end else if (AControl.Controls[cnti] is TRzTabSheet) or
(AControl.Controls[cnti] is TRzPageControl) or
(AControl.Controls[cnti] is TRzGroupBox) or
(AControl.Controls[cnti] is TGroupBox) or
(AControl.Controls[cnti] is TRzPanel) or
(AControl.Controls[cnti] is TPanel) THEN
begin
GetControlIsReadonly(Twincontrol(AControl.Controls[cnti]),sReadOnlyField) ;
end;
end;
end;
2014年12月27日 09点12分
6
level 6
我写的 一个 你可以看看 改下 就行。。因为 我针对的 控件 有些只读方式不一样。。所以手动设定的。
2014年12月27日 09点12分
7