在此地问问经常写程序的高手们两个问题,给个明示吧!(50分)

  • 主题发起人 主题发起人 kukow
  • 开始时间 开始时间
K

kukow

Unregistered / Unconfirmed
GUEST, unregistred user!
1.应用程序中,菜单的处理怎么做才比较灵活,用数据库表结合来做应该怎么做??
2.用图标表示,当鼠标移动到该图标上会变为可用,这个是怎么处理的,流程是怎么样啊
以上有没有相关的实例代码给我参考参考?本人感激不尽;
 
1.菜单用文件控制就可以了,简单的菜单可以使用INI文件,复杂的菜单可以使用XML文件

2.在控件的OnMouseMove事件写代码就可以了
 
楼上所说用文件控制来写菜单可否给我一个代码示例参考参考,非常感谢!
 
用XML怎么用法,真没用过!刚用Delphi不久,请高手不要见笑
 
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事件触发
 
后退
顶部