procedure TForm1.N4Click(Sender: TObject);
var MenuItem:TMenuItem;
begin
datamodule2.Query2.Close;
datamodule2.Query2.SQL.clear;
datamodule2.Query2.sql.add(' select * from 传输系统 order by xuhao ');
datamodule2.Query2.Open;
if not datamodule2.Query2.Eof then
while not datamodule2.Query2.Eof do
begin
MenuItem :=TMenuItem.create(self);
MenuItem.Name :='m'+trim(datamodule2.Query2.fieldbyname('xuhao').asstring);
MenuItem.Caption := trim(datamodule2.Query2.fieldbyname('name').asstring);
MainMenu1.Items[2].add(MenuItem) ;
datamodule2.Query2.next;
MenuItem.OnClick:=Pro_Click;
end;
end;
procedure tform1.Pro_Click;
begin
ShowMessage('鼠标点击事件');
end;
现在出现逻辑问题,当我第一次点n4菜单时,可以从数据库中把内容取出来,并且一切正常,但是我第二次点n4菜单时候,系统提示,a component name m1 already exists
请高手指点,万分感谢
var MenuItem:TMenuItem;
begin
datamodule2.Query2.Close;
datamodule2.Query2.SQL.clear;
datamodule2.Query2.sql.add(' select * from 传输系统 order by xuhao ');
datamodule2.Query2.Open;
if not datamodule2.Query2.Eof then
while not datamodule2.Query2.Eof do
begin
MenuItem :=TMenuItem.create(self);
MenuItem.Name :='m'+trim(datamodule2.Query2.fieldbyname('xuhao').asstring);
MenuItem.Caption := trim(datamodule2.Query2.fieldbyname('name').asstring);
MainMenu1.Items[2].add(MenuItem) ;
datamodule2.Query2.next;
MenuItem.OnClick:=Pro_Click;
end;
end;
procedure tform1.Pro_Click;
begin
ShowMessage('鼠标点击事件');
end;
现在出现逻辑问题,当我第一次点n4菜单时,可以从数据库中把内容取出来,并且一切正常,但是我第二次点n4菜单时候,系统提示,a component name m1 already exists
请高手指点,万分感谢
解决方案 »
- 开了四个文本编辑器的窗口,想写程序让它们以2x2的方式在屏幕上排列好。怎么弄哦
- delphi如何和sybase连接???希望指点
- Delphi 7 中有没有TQuickRep空件
- 用shellexecute方式打开 网页, 怎样才能 在新的窗口打开,而不是存在的窗口?
- 谁有读硬盘序列号的函数了
- 在线咨询,如何解析xml文档?
- 怎样在DBGridEh表格控件中实现下拉表格控件?高分快来拿
- 如何判断一个字段是否为空?
- enumwindows(着2个参数怎么写阿)
- Delphi 调试出现 the application seems to forzen.
- 急用!在线等!解决了立即结分!请问这句sql如何写?
- 重写一下窗体控件要注意哪些问题?谁有详细的文档?
var MenuItem:TMenuItem;
begin
datamodule2.Query2.Close;
datamodule2.Query2.SQL.clear;
datamodule2.Query2.sql.add(' select * from 传输系统 order by xuhao ');
datamodule2.Query2.Open;
if not datamodule2.Query2.Eof then
while not datamodule2.Query2.Eof do
begin
MenuItem :=TMenuItem.create(self);
MenuItem.Name :='m'+trim(datamodule2.Query2.fieldbyname('xuhao').asstring);
MenuItem.Caption := trim(datamodule2.Query2.fieldbyname('name').asstring);
MainMenu1.Items[2].add(MenuItem) ;
datamodule2.Query2.next;
MenuItem.OnClick:=Pro_Click;
end;
TForm1.N4Click:=nil;
end;
var MenuItem:TMenuItem;
begin
datamodule2.Query2.Close;
datamodule2.Query2.SQL.clear;
datamodule2.Query2.sql.add(' select * from 传输系统 order by xuhao ');
datamodule2.Query2.Open;
if not datamodule2.Query2.Eof then
while not datamodule2.Query2.Eof do
begin
MenuItem :=TMenuItem.create(self);
MenuItem.Name :='m'+trim(datamodule2.Query2.fieldbyname('xuhao').asstring);
MenuItem.Caption := trim(datamodule2.Query2.fieldbyname('name').asstring);
MainMenu1.Items[2].add(MenuItem) ;
datamodule2.Query2.next;
MenuItem.OnClick:=Pro_Click;
end;
TForm1.N4.enabled:=false;
end;
两个错误: 1。Not enough actual parameters ;2。 Could not compile used unit 'Unit1.pas' 第二个用TForm1.N4.enabled:=false; 这样显然使N4不可用,可是不可行的。还有其他的办法吗?很急,谢谢了。
const
S = 'select * from 传输系统 order by xuhao';
var
nParent, MenuItem:TMenuItem;
begin
nParent := MainMenu1.Items[2];
with DataModule2, Query2 do begin
Close;
SQL.Text := S;
Open;
First;
while not Eof do begin
if not Assigned(FindComponent('m' + Trim(FieldByName('xuhao').AsString))) then
begin
MenuItem := TMenuItem.Create(Self);
MenuItem.Name := 'm' + Trim(FieldByName('xuhao').AsString);
MenuItem.Caption := Trim(Query2.FieldByName('name').AsString);
MenuItem.OnClick := Pro_Click;
nParent.add(MenuItem) ;
end;
Next;
end;
end;
end;
第二次点n4菜单时候,系统提示,a component name m1 already exists
我头都大了,我觉得在创建前先释放是对的,可以怎么释放呢
MainMenu1.Items[2].Clear;吗
procedure TMainForm.CreateWindowMenu;
var
i:Integer;
AMenu:TMenuItem;
begin
WindowMenu.Clear;
for i:=0 to High(FormList) do
begin
AMenu:=TMenuItem.Create(self);
AMenu.Caption:=FormList[i].Caption;
AMenu.Checked:=True;
AMenu.tag:=i;
AMenu.OnClick:=ShowWindows;
WindowMenu.Add(AMenu);
end;
end;我的类似代码,先MainMenu1.Items[2].Clear,不要给NAME赋值。
Form1: TForm1;
aItems:Array of TMenuItem;
implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
Var I:integer;
begin
datamodule2.Query2.Close;
datamodule2.Query2.SQL.clear;
datamodule2.Query2.sql.add(' select * from 传输系统 order by xuhao ');
datamodule2.Query2.Open;
For i:=0 to Length(aItems)-1 do
if Assigned(AItems[i]) then AItems[i].Free;
SetLength(aItems,datamodule2.Query2.recordCount);
for i:=0 to datamodule2.Query2.recordCount-1 do
begin
aItems[i]:=TMenuItem.Create(Application);
aItems[i].Name :='m'+trim(datamodule2.Query2.fieldbyname('xuhao').asstring);
aItems[i].Caption := trim(datamodule2.Query2.fieldbyname('name').asstring);
aItems[i].OnClick:=Pro_Click;
DBISAMTable1.next;
end;
MainMenu1.Items[0].Add(aItems);
end
Form1: TForm1;
aItems:Array of TMenuItem;
FMenu:TSeSkinItem;
NewChildClass: TFormClass;
NewChildForm: TForm;
implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
Var I:integer;
begin
datamodule2.Query2.Close;
datamodule2.Query2.SQL.clear;
datamodule2.Query2.sql.add(' select * from 传输系统 order by xuhao ');
datamodule2.Query2.Open;
For i:=0 to Length(aItems)-1 do
if Assigned(AItems[i]) then AItems[i].Free;
SetLength(aItems,datamodule2.Query2.recordCount);
for i:=0 to datamodule2.Query2.recordCount-1 do
begin
aItems[i]:=TMenuItem.Create(Application);
aItems[i].Name :='m'+trim(datamodule2.Query2.fieldbyname('xuhao').asstring);
aItems[i].tag:=datamodule2.Query2.fieldbyname('xuhao').asinteger;
aItems[i].Caption := trim(datamodule2.Query2.fieldbyname('name').asstring);
aItems[i].OnClick:=Pro_Click;
datamodule2.Query2.next;
end;
MainMenu1.Items[0].Add(aItems);
end;procedure TForm1.Pro_Click(Sender: TObject);
if Assigned(NewChildForm) then
Begin
Try
NewChildForm.Free;
finally
FMenu.Enabled :=True;
end;
end;Case (Sender As TSeSkinItem).tag of
11: NewChildClass:= TFrmCarInfo;
12: NewChildClass:= TFrmDriverInfo;
13: NewChildClass:= TFrmMasterInfo;
21: NewChildClass:= TFrmTax;
22: NewChildClass:= TFrmInsurance;
31: NewChildClass:= TFrmPeccancy;
32: NewChildClass:= TFrmAccident;
33: NewChildClass:= TFrmRePair;
34: NewChildClass:= TFrmLearn; 61: NewChildClass:= TFrmRules;
71: NewChildClass:= TFrmBaseTable;
72: NewChildClass:= TFrmSysInit;
73: NewChildClass:= TFrmprivilageSet;
74: NewChildClass:= TFrmpayRuleSet;
75: NewChildClass:= TFrmDBBackup;
else NewChildClass:=nil;
end;if Assigned(NewChildClass) then
Begin
NewChildForm :=NewChildClass.Create(Application);
With NewChildForm do
Try
Hint:=AppTitle;
BorderStyle:= bsNone;
BorderIcons:=[];
Parent:=Self.Panel1;
WindowState:=wsMaxiMized;
Align:=alClient;
Show;
finally
FMenu:= Sender as TSeSkinItem;
FMenu.Enabled :=False;
end;
end;
Self.Caption :=AppTitle+'管理系统 -> '+NewChildForm.Caption;
end
var MenuItem:TMenuItem;
begin
datamodule2.Query2.Close;
datamodule2.Query2.SQL.clear;
datamodule2.Query2.sql.add(' select * from 传输系统 order by xuhao ');
datamodule2.Query2.Open;
datamidule2.query2.first;
//if not datamodule2.Query2.Eof then 这句是多余的,问题也就出在这里
while not datamodule2.Query2.Eof do
begin
MenuItem :=TMenuItem.create(self);
try
MenuItem.Name :='m'+trim(datamodule2.Query2.fieldbyname('xuhao').asstring);
MenuItem.Caption := trim(datamodule2.Query2.fieldbyname('name').asstring);
MainMenu1.Items[2].add(MenuItem) ;
datamodule2.Query2.next;
MenuItem.OnClick:=Pro_Click;
finally
menuitem.free;
end;
end;
end;
procedure tform1.Pro_Click;
begin
ShowMessage('鼠标点击事件');
end;
procedure TForm1.N4Click(Sender: TObject);
var I:integer;
begin
datamodule2.Query2.Close;
datamodule2.Query2.SQL.clear;
datamodule2.Query2.sql.add(' select * from 传输系统 order by xuhao ');
datamodule2.Query2.Open;
For i:=0 to Length(aItems)-1 do
if Assigned(AItems[i]) then AItems[i].Free;
SetLength(aItems,datamodule2.Query2.recordCount);
for i:=0 to datamodule2.Query2.recordCount-1 do
begin
aItems[i]:=TMenuItem.Create(Application);
aItems[i].Name :='m'+trim(DATAmodule2.Query2.Fieldbyname('xuhao').asstring);
aItems[i].Caption := trim(DATAmodule2.Query2.Fieldbyname('name').asstring);
aItems[i].OnClick:=Pro_Click;
datamodule2.Query2.next;
end;
MainMenu1.Items[2].Add(aItems);
end;
procedure tform1.Pro_Click;
begin
ShowMessage('鼠标点击事件');
end;
end.