蓝
蓝叶菱
Unregistered / Unconfirmed
GUEST, unregistred user!
问题是这样的,我打算通过数据库存储功能。每个用户登录或者切换用户的时候,初始化按钮。代码如下。
procedure TFrmMain.ClearModule;
var
i:integer;
AButton:TToolButton;
begin
//清空快捷按钮
for i:=ToolBarMain.ButtonCount-1 downto 0 do
begin
AButton:=ToolBarMain.Buttons;
ToolBarMain.RemoveControl(AButton);
AButton.Free;
end;
end;
procedure TFrmMain.SetToolBar;
begin
ToolBarMain.AutoSize:=False;
with ToolBarMain,DM.QFunction do
begin
Close;
sql.Clear;
sql.Add('SELECT * FROM v_RoleFunction');
sql.Add('where (RoleID='+MyFrame.RoleID+')');
sql.Add('and (PageName=1)');
sql.Add('order by ORDERNO desc');
Parameters.ParamByName('p1').Value:='快捷工具条';
Open;
First;
CreateMyToolButton(tbsButton,'退出','tbExit',4,100);
CreateMyToolButton(tbsButton,'重新注销','tbLogin',3,111);
CreateMyToolButton(tbsSeparator,'','sep1',0,0);
while not eof do
begin
CreateMyToolButton(tbsButton,FieldByName('模块简称').AsString,'tb'+FieldByName('ID').AsString,
FieldByName('图像索引').AsInteger,FieldByName('模块索引').AsInteger);
Next;
end; //while
//-----两个快捷通用条
//TButton(FindComponent('sep1')).Width:=4;
ToolBarMain.AutoSize:=True;
end;
end;
//----
procedure TFrmMain.CreateMyToolButton(AStyle: TToolButtonStyle;
ACaption: String; AToolName:String;AImageIndex, TagIndex: integer);
var
CurButton:TToolButton;
begin
CurButton:=TToolButton.Create(ToolBarMain); //没有OWNDER,specotr就无法设定宽度。
CurButton.Caption:=ACaption;
CurButton.Parent:=ToolBarMain;
CurButton.ImageIndex:=AImageIndex;
CurButton.Style:=AStyle;
CurButton.Tag:=TagIndex;
CurButton.Height:=42;
CurButton.Width:=4;
CurButton.Visible:=True;
CurButton.Name:=AToolName;
if ACaption<>'' then
begin
CurButton.OnClick:=tb_CenterClick;
CurButton.Width:=42;
end;
//ToolBarMain.InsertControl(CurButton);
end;
切换用户的调用是这样的先调用ClearModule清除快捷按钮,再调用SetToolBar来初始化界面。Toolbuttonmain就是TToolbutton组件。
问题是这样的。。这个代码第一次进入没有问题,切换第一次没有,调用第三次,就出现抽象错误。再调用就出现访问错误。
如果CurButton:=TToolButton.Create(ToolBarMain); 改成CurButton:=TToolButton.Create(nil);就没有问题。
要么偶尔出现该组件已经存在。。。问题就是怎么动态建立或者清除ToolButton..
procedure TFrmMain.ClearModule;
var
i:integer;
AButton:TToolButton;
begin
//清空快捷按钮
for i:=ToolBarMain.ButtonCount-1 downto 0 do
begin
AButton:=ToolBarMain.Buttons;
ToolBarMain.RemoveControl(AButton);
AButton.Free;
end;
end;
procedure TFrmMain.SetToolBar;
begin
ToolBarMain.AutoSize:=False;
with ToolBarMain,DM.QFunction do
begin
Close;
sql.Clear;
sql.Add('SELECT * FROM v_RoleFunction');
sql.Add('where (RoleID='+MyFrame.RoleID+')');
sql.Add('and (PageName=1)');
sql.Add('order by ORDERNO desc');
Parameters.ParamByName('p1').Value:='快捷工具条';
Open;
First;
CreateMyToolButton(tbsButton,'退出','tbExit',4,100);
CreateMyToolButton(tbsButton,'重新注销','tbLogin',3,111);
CreateMyToolButton(tbsSeparator,'','sep1',0,0);
while not eof do
begin
CreateMyToolButton(tbsButton,FieldByName('模块简称').AsString,'tb'+FieldByName('ID').AsString,
FieldByName('图像索引').AsInteger,FieldByName('模块索引').AsInteger);
Next;
end; //while
//-----两个快捷通用条
//TButton(FindComponent('sep1')).Width:=4;
ToolBarMain.AutoSize:=True;
end;
end;
//----
procedure TFrmMain.CreateMyToolButton(AStyle: TToolButtonStyle;
ACaption: String; AToolName:String;AImageIndex, TagIndex: integer);
var
CurButton:TToolButton;
begin
CurButton:=TToolButton.Create(ToolBarMain); //没有OWNDER,specotr就无法设定宽度。
CurButton.Caption:=ACaption;
CurButton.Parent:=ToolBarMain;
CurButton.ImageIndex:=AImageIndex;
CurButton.Style:=AStyle;
CurButton.Tag:=TagIndex;
CurButton.Height:=42;
CurButton.Width:=4;
CurButton.Visible:=True;
CurButton.Name:=AToolName;
if ACaption<>'' then
begin
CurButton.OnClick:=tb_CenterClick;
CurButton.Width:=42;
end;
//ToolBarMain.InsertControl(CurButton);
end;
切换用户的调用是这样的先调用ClearModule清除快捷按钮,再调用SetToolBar来初始化界面。Toolbuttonmain就是TToolbutton组件。
问题是这样的。。这个代码第一次进入没有问题,切换第一次没有,调用第三次,就出现抽象错误。再调用就出现访问错误。
如果CurButton:=TToolButton.Create(ToolBarMain); 改成CurButton:=TToolButton.Create(nil);就没有问题。
要么偶尔出现该组件已经存在。。。问题就是怎么动态建立或者清除ToolButton..