📄 sdmenu.cpp
字号:
}
p->Assign(this);
m_Child->Add((void *)p,p->SubMenuCode);
}
void TsdSubMenu::AddMenuItem()
{
m_MenuItem->AddMenuItem();
}
bool TsdSubMenu::LocateItemByIndex(int Index)
{
return m_MenuItem->LocateByIndex(Index);
}
bool TsdSubMenu::LocateItemByKey(AnsiString Key)
{
return m_MenuItem->LocateByKey(Key);
}
void __fastcall TsdSubMenu::SubMenuClick(TObject *Sender)
{
TImagePanel *p=dynamic_cast<TImagePanel *>(Sender);
LocateByIndex(p->Tag);
}
void __fastcall TsdSubMenu::SubMenuItemClick(TObject *Sender, int Index)
{
TImagePanel *p=dynamic_cast<TImagePanel *>(Sender);
LocateByIndex(p->Tag);
if(Index>0)
{
m_MenuItem->LocateByIndex(Index-1);
if(m_MenuItem->RightLevel==0)
throw Exception("您没有授权使用本功能!");
m_Task->Show(m_MenuItem->ItemFormName,m_MenuItem->ItemCode,m_MenuItem->ItemCaption,m_MenuItem->ItemLib,m_MenuItem->RightLevel);
}
}
void __fastcall TsdSubMenu::SubMenuMoveLeftClick(TObject * Sender)
{
ShowPriorPageMenu();
}
void __fastcall TsdSubMenu::SubMenuMoveRightClick(TObject * Sender)
{
ShowNextPageMenu();
}
void __fastcall TsdSubMenu::SetMenuItemCode(AnsiString value)
{
m_MenuItem->ItemCode =value;
}
AnsiString __fastcall TsdSubMenu::GetMenuItemCode()
{
return m_MenuItem->ItemCode;
}
void __fastcall TsdSubMenu::SetMenuItemLib(int value)
{
m_MenuItem->ItemLib =value;
}
int __fastcall TsdSubMenu::GetMenuItemLib()
{
return m_MenuItem->ItemLib;
}
void __fastcall TsdSubMenu::SetMenuItemUpperCode(AnsiString value)
{
m_MenuItem->ItemUpperCode =value;
}
AnsiString __fastcall TsdSubMenu::GetMenuItemUpperCode()
{
return m_MenuItem->ItemUpperCode;
}
void __fastcall TsdSubMenu::SetMenuItemCaption(AnsiString value)
{
m_MenuItem->ItemCaption=value;
}
AnsiString __fastcall TsdSubMenu::GetMenuItemCaption()
{
return m_MenuItem->ItemCaption;
}
void __fastcall TsdSubMenu::SetMenuItemDesc(AnsiString value)
{
m_MenuItem->ItemDesc=value;
}
AnsiString __fastcall TsdSubMenu::GetMenuItemDesc()
{
return m_MenuItem->ItemDesc;
}
void __fastcall TsdSubMenu::SetMenuItemNo(int value)
{
m_MenuItem->ItemNo=value;
}
int __fastcall TsdSubMenu::GetMenuItemNo()
{
return m_MenuItem->ItemNo;
}
void __fastcall TsdSubMenu::SetMenuItemRightLevel(int value)
{
m_MenuItem->RightLevel =value;
}
int __fastcall TsdSubMenu::GetMenuItemRightLevel()
{
return m_MenuItem->RightLevel;
}
int __fastcall TsdSubMenu::GetSubMenuCount()
{
return m_Child->Count();
}
AnsiString __fastcall TsdSubMenu::GetMenuItemFormName()
{
return m_MenuItem->ItemFormName;
}
void __fastcall TsdSubMenu::SetMenuItemFormName(AnsiString value)
{
m_MenuItem->ItemFormName=value;
}
int __fastcall TsdSubMenu::GetMenuItemNeedCheck()
{
return m_MenuItem->ItemNeedCheck;
}
void __fastcall TsdSubMenu::SetMenuItemNeedCheck(int value)
{
m_MenuItem->ItemNeedCheck=value;
}
//====================================
//(TsdMenu)主菜单维护
//====================================
TsdMenu::TsdMenu(TsdTask *pm,TPanel *pl,TPanel *SubPl,TForm *FNavpic,TImage *FNavImg,Graphics::TBitmap *FBitmap)
{
m_Task=pm;
m_MenuPanel=pl;
m_SubMenuPanel=SubPl;
m_NavpicForm=FNavpic;
m_NavImg=FNavImg;
m_Parent=new TsdCollection;
m_Bitmap=FBitmap;
m_sbUp=NULL;
m_sbDown=NULL;
m_FirstIndex=-1;
m_Selected=0;
m_Height=35;
m_Width=90;
m_Left=1;
m_VStep=0;
m_Space=22;
}
TsdMenu::~TsdMenu()
{
delete m_Parent;
delete SubMenu;
delete Navpic;
delete NavArrow;
}
void TsdMenu::ShowPageMenu()
{
int YW_Selected;
m_pVisNum=(m_MenuPanel->Height+1)/m_Height;
if(m_pVisNum<m_Parent->Count())
m_pVisNum=(m_MenuPanel->Height+1-m_Space)/m_Height;
if(m_FirstIndex==-1)
m_FirstIndex=0;
YW_Selected=m_Parent->Index;
for(int i=0;i<m_Parent->Count();i++)
{
LocateByIndex(i);
if(i<m_FirstIndex||i>=m_FirstIndex+m_pVisNum)
{
if(m_Image!=NULL)
{
delete m_Image;
m_Image=NULL;
TsdMenu *p=new TsdMenu(m_Task,m_MenuPanel,m_SubMenuPanel,m_NavpicForm,m_NavImg,m_Bitmap);
p->Assign(this);
m_Parent->Change((void *)p,p->MenuCode,p->MenuCode);
}
m_BlackLine->Visible=false;
m_SilverLine->Visible=false;
}
else
{
Graphics::TBitmap *FBmp=new Graphics::TBitmap();
if(m_Image==NULL)
{
m_Image=new TImage(m_MenuPanel);
m_Image->Parent=m_MenuPanel;
m_Image->Cursor=crHandPoint;
m_Image->Height=33;
m_Image->Width=90;
m_Image->Left=1;
m_Image->Tag=i;
m_Image->Hint=m_MenuDesc;
m_Image->ShowHint=false;
m_Image->BringToFront();
m_Image->OnClick=MenuClick;
TsdMenu *p=new TsdMenu(m_Task,m_MenuPanel,m_SubMenuPanel,m_NavpicForm,m_NavImg,m_Bitmap);
p->Assign(this);
m_Parent->Change((void *)p,p->MenuCode,p->MenuCode);
}
FBmp->LoadFromResourceID((int)HInstance,StrToInt(m_MenuCode+"01"));
m_Image->Canvas->Draw(0,0,FBmp);
m_Image->Visible=true;
m_Image->Top =(i-m_FirstIndex)*m_Height;
m_BlackLine->Top=m_Image->Top+m_Image->Height;
m_BlackLine->Visible=true;
m_SilverLine->Top=m_Image->Top+m_Image->Height+1;
m_SilverLine->Visible=true;
delete FBmp;
}
}
if(YW_Selected!=m_Selected)
{
LocateByIndex(m_Selected);
SubMenu->HideSubMenu();
Navpic->HideNavigator();
m_Selected=YW_Selected;
LocateByIndex(m_Selected);
SubMenu->ShowSubMenu();
if(Navpic->Count==0)
m_NavImg->Canvas->Draw(0,0,m_Bitmap);
else
{
NavArrow->ShowNavArrow();
Navpic->ShowNavigator();
}
}
else
LocateByIndex(m_Selected);
Graphics::TBitmap *FBmp1=new Graphics::TBitmap();
FBmp1->LoadFromResourceID((int)HInstance,StrToInt(m_MenuCode+"03"));
m_Image->Canvas->Draw(0,0,FBmp1);
delete FBmp1;
if(m_FirstIndex>0)
{
m_sbUp->Visible =true;
m_sbUp->Top=m_MenuPanel->Height-22;
}
else
m_sbUp->Visible =false;
if(m_FirstIndex+m_pVisNum<m_Parent->Count())
{
m_sbDown->Top =m_MenuPanel->Height-22;
m_sbDown->Visible =true;
}
else
m_sbDown->Visible =false;
}
void TsdMenu::ShowNextPageMenu()
{
int YW_FirstIndex;
YW_FirstIndex=m_FirstIndex;
m_pVisNum=(m_MenuPanel->Height+1)/m_Height;
if(m_pVisNum<m_Parent->Count())
m_pVisNum=(m_MenuPanel->Height+1-m_Space)/m_Height;
if(m_FirstIndex+m_pVisNum<m_Parent->Count()||m_FirstIndex==-1)
m_FirstIndex++;
for(int i=0;i<m_Parent->Count();i++)
{
LocateByIndex(i);
if(i<m_FirstIndex||i>=m_FirstIndex+m_pVisNum)
{
if(m_Image!=NULL)
{
delete m_Image;
m_Image=NULL;
TsdMenu *p=new TsdMenu(m_Task,m_MenuPanel,m_SubMenuPanel,m_NavpicForm,m_NavImg,m_Bitmap);
p->Assign(this);
m_Parent->Change((void *)p,p->MenuCode,p->MenuCode);
}
m_BlackLine->Visible=false;
m_SilverLine->Visible=false;
}
else
{
Graphics::TBitmap *FBmp=new Graphics::TBitmap();
if(m_Image==NULL)
{
m_Image=new TImage(m_MenuPanel);
m_Image->Parent=m_MenuPanel;
m_Image->Cursor=crHandPoint;
m_Image->Height=33;
m_Image->Width=90;
m_Image->Left=1;
m_Image->Tag=i;
m_Image->Hint=m_MenuDesc;
m_Image->ShowHint=false;
m_Image->BringToFront();
m_Image->OnClick=MenuClick;
TsdMenu *p=new TsdMenu(m_Task,m_MenuPanel,m_SubMenuPanel,m_NavpicForm,m_NavImg,m_Bitmap);
p->Assign(this);
m_Parent->Change((void *)p,p->MenuCode,p->MenuCode);
}
FBmp->LoadFromResourceID((int)HInstance,StrToInt(m_MenuCode+"01"));
m_Image->Canvas->Draw(0,0,FBmp);
delete FBmp;
m_Image->Visible=true;
m_Image->Top =(i-m_FirstIndex)*m_Height;
m_BlackLine->Top=m_Image->Top+m_Image->Height;
m_BlackLine->Visible=true;
m_SilverLine->Top=m_Image->Top+m_Image->Height+1;
m_SilverLine->Visible=true;
}
}
if(m_Selected<m_FirstIndex)
{
LocateByIndex(m_Selected);
SubMenu->HideSubMenu();
Navpic->HideNavigator();
m_Selected=m_FirstIndex;
LocateByIndex(m_Selected);
SubMenu->ShowSubMenu();
if(Navpic->Count==0)
m_NavImg->Canvas->Draw(0,0,m_Bitmap);
else
{
NavArrow->ShowNavArrow();
Navpic->ShowNavigator();
}
}
else if(YW_FirstIndex==-1 && m_FirstIndex==0)
{
m_Selected=m_FirstIndex;
LocateByIndex(m_Selected);
SubMenu->ShowSubMenu();
if(Navpic->Count==0)
m_NavImg->Canvas->Draw(0,0,m_Bitmap);
else
{
NavArrow->ShowNavArrow();
Navpic->ShowNavigator();
}
}
else
LocateByIndex(m_Selected);
Graphics::TBitmap *FBmp1=new Graphics::TBitmap();
FBmp1->LoadFromResourceID((int)HInstance,StrToInt(m_MenuCode+"03"));
m_Image->Canvas->Draw(0,0,FBmp1);
delete FBmp1;
if(m_FirstIndex>0)
{
m_sbUp->Visible =true;
m_sbUp->Top=m_MenuPanel->Height-22;
}
else
m_sbUp->Visible =false;
if(m_FirstIndex+m_pVisNum<m_Parent->Count())
{
m_sbDown->Top =m_MenuPanel->Height-22;
m_sbDown->Visible =true;
}
else
m_sbDown->Visible =false;
}
void TsdMenu::ShowPriorPageMenu()
{
m_pVisNum=(m_MenuPanel->Height+1)/m_Height;
if(m_pVisNum<m_Parent->Count())
m_pVisNum=(m_MenuPanel->Height+1-m_Space)/m_Height;
if(m_FirstIndex>0)
m_FirstIndex--;
for(int i=0;i<m_Parent->Count();i++)
{
LocateByIndex(i);
if(i<m_FirstIndex||i>=m_FirstIndex+m_pVisNum)
{
if(m_Image!=NULL)
{
delete m_Image;
m_Image=NULL;
TsdMenu *p=new TsdMenu(m_Task,m_MenuPanel,m_SubMenuPanel,m_NavpicForm,m_NavImg,m_Bitmap);
p->Assign(this);
m_Parent->Change((void *)p,p->MenuCode,p->MenuCode);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -