type TxxCtl =class(TGraphicControl)
private
Fpic:TBitMap;
public
procedure SetPic(val:Tbitmap);
published
property Picture:TBitMap read GetPic write SetPic;
end;.....
.....
procedure TxxCtl.SetPic(val:Tbitmap);
var
pic:Tbitmap;
begin
if val<>0 then fpic:=val else
if picOpen.Execute then
begin
pic:=Tbitmap.Create;
pic.LoadFromFile( picOpen.FileName);
fpic:=pic;
end;
end;当控件放进Form后,给Picture赋值时,picOpen会出来两次,请问应该覆盖哪个事件函数
private
Fpic:TBitMap;
public
procedure SetPic(val:Tbitmap);
published
property Picture:TBitMap read GetPic write SetPic;
end;.....
.....
procedure TxxCtl.SetPic(val:Tbitmap);
var
pic:Tbitmap;
begin
if val<>0 then fpic:=val else
if picOpen.Execute then
begin
pic:=Tbitmap.Create;
pic.LoadFromFile( picOpen.FileName);
fpic:=pic;
end;
end;当控件放进Form后,给Picture赋值时,picOpen会出来两次,请问应该覆盖哪个事件函数
改为:
procedure TxxCtl.SetPic(val:Tbitmap);
begin
fpic := val;
if (fpic = nil) and (picOpen.Execute) then
begin
fpic := Tbitmap.Create;
fpic.LoadFromFile( picOpen.FileName);
end;
end;—————————————————————————————————
宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
—————————————————————————————————
初始化两次中一次是系统调用的,一次是你自己调用的,
基本上所有控件被修改的属性在启动时都会初始化两次。解决办法:
我觉得你的给属性赋值得方法 SetPic 很不合理,不应该在这里创建
对象只有在组件外创建对象赋进来才对。要不干脆在组件本身的create
函数中就个初始化了。
procedure TCard.SetPic(val:Tbitmap);
begin
if val<> nil then fpic.Assign(val) ;
end;
即可解决问题。