function TZ_hjgl.LoadMenu( Nd:tmenuitem; Rs:_Recordset; ParentId:string):STRING;
var
Rs1 :_Recordset;
Node: tmenuitem;
S,SQL:String;
begin
if rs.eof or rs.BOF then exit;
rs1 := rs._xClone();
rs1.Filter := 'Parentid like ''' + parentid + '''';
while not rs1.eof do begin
S := s + ',' + INTTOSTR(Rs1.Fields['id'].Value);
if not Rs1.Fields['NoMenu'].Value then begin
Node := TMenuItem.Create(nil);
Node.Tag := Rs1.Fields['id'].Value;
Node.Name := stringreplace(Rs1.Fields['ModuNo'].Value+'','/','',[rfreplaceall]);
Node.Caption := Rs1.Fields['Caption'].Value +'';
Node.hint := Rs1.Fields['InputType'].Value +'';
if Pos(','+IntToStr(Node.Tag)+',',Popedom) <= 0 then
if (Userid <> 'ADMIN') and (Popedom<>'ALLPASS') then
Node.Enabled := false; //注意:当存在SysTable时,这里不能=False,反正现在不可能出现
if Nd = nil then
MainMenu1.Items.Add(Node)
else begin
Nd.Add(Node);
Node.OnClick := miClick;
end;
if Rs1.Fields['UseSysTable'].Value then begin
SQL:='Select * From s_TableBase Where Property=';
SQL:=SQL+inttostr(Rs1.Fields['SysTableProperty'].Value);
SQL:=SQL+' And SysTable=1';
ExeSQL(DMPublish.ADOExec1,SQL);
if not DMPublish.ADOExec1.Eof then begin
Node := TMenuItem.Create(nil);
Node.Tag := DMPublish.ADOExec1.FieldByName('ID').AsInteger-2005;
Node.Name := DMPublish.ADOExec1.FieldByName('TableName').AsString+'_Sep';
Node.Caption := '-';
Node.hint := DMPublish.ADOExec1.FieldByName('TableName').AsString+'_Sep';
if Nd = nil then
MainMenu1.Items.Add(Node)
else begin
Nd.Add(Node);
Node.OnClick := miClick;
end;
while not DMPublish.ADOExec1.Eof do begin
Node := TMenuItem.Create(nil);
Node.Tag := -999;
Node.Name := DMPublish.ADOExec1.FieldByName('TableName').AsString;
Node.Caption := DMPublish.ADOExec1.FieldByName('Caption').AsString;
if DMPublish.ADOExec1.FieldByName('WithChild').AsBoolean then Node.hint := '1'
else Node.hint := '0';
Node.hint := Node.hint+','+DMPublish.ADOExec1.FieldByName('FieldKey').AsString;
Node.hint := Node.hint+','+DMPublish.ADOExec1.FieldByName('FieldCaption').AsString;
if Pos(','+DMPublish.ADOExec1.FieldByName('ID').AsString+',',','+PopedomSysTable+',') <= 0 then
if (Userid <> 'ADMIN') and (PopedomSysTable<>'ALLPASS') then
Node.Enabled := false;
if Nd = nil then
MainMenu1.Items.Add(Node)
else begin
Nd.Add(Node);
Node.OnClick := miClick;
end;
DMPublish.ADOExec1.Next;
end;
end;
end;
S:= S+LoadMenu(Node,rs._xClone(),inttostr(Rs1.Fields['Id'].Value));
end;
rs1.MoveNext;
end;
result:=s;
end;
procedure TZ_hjgl.MiClick(Sender: TObject);
var SL: TStringList;
micap,Filstr,OrderStr: string;
i : Integer;
begin
SL := TStringList.Create;
with (Sender as TMenuItem) do begin
micap := caption;
Filstr := hint;
if Tag=-999 then begin //资产、考勤基本系统表录入窗口
FreeComps;
if strtoint(Filstr[1])=1 then AssetInput:=3
else AssetInput:=4;
System.Delete(Filstr,1,2);
i:=Pos(',',Filstr);
FPubCom := CreateXTForm(TFrmBaseDataInput,FrmBaseDataInput,Z_hjgl,PnForm);
TFrmBaseDataInput(FPubCom).SetTableProperty(Name,Caption,Copy(Filstr,1,i-1),Copy(Filstr,i+1,Length(Filstr)));
end else begin
if pos('|',hint) > 0 then begin
Filstr := copy(hint,1,pos('|',hint)-1);
OrderStr := trim(copy(hint,pos('|',hint)+1,50));
end;
SL.CommaText := Filstr;
Curr_WindowsCap :=micap;
Case SL.Count of
1:begin
if UpperCase(Hint) = 'POPEDOM' then begin //权限设置
根据tag和hint的值调用菜单
至于第二个问题,你用listview控件或者image控件的mousemove事件触发