📄 sdmenu.cpp
字号:
}
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+m_pVisNum)
{
LocateByIndex(m_Selected);
SubMenu->HideSubMenu();
Navpic->HideNavigator();
m_Selected=m_FirstIndex+m_pVisNum-1;
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;
}
bool TsdMenu::LocateByIndex(int Index)
{
try
{
TsdMenu *p=(TsdMenu *)m_Parent->Item(Index);
Assign(p);
return true;
}
catch(Exception &e)
{
return false;
}
}
bool TsdMenu::LocateByKey(AnsiString Key)
{
try
{
TsdMenu *p=(TsdMenu *)m_Parent->Value(Key);
Assign(p);
return true;
}
catch(Exception &e)
{
return false;
}
}
void TsdMenu::ShowForm(AnsiString Key)
{
int OldIndex;
OldIndex=m_Parent->Index;
if(LocateByKey(Key.SubString(1,3)))
{
if(SubMenu->LocateByKey(Key.SubString(1,5)))
{
if(SubMenu->LocateItemByKey(Key))
{
if(SubMenu->MenuItem->RightLevel==0)
throw Exception("您没有授权使用本功能!");
m_Task->Show(SubMenu->MenuItem->ItemFormName,SubMenu->MenuItem->ItemCode,SubMenu->MenuItem->ItemCaption,SubMenu->MenuItem->ItemLib,SubMenu->MenuItem->RightLevel);
}
}
}
LocateByIndex(OldIndex);
}
void TsdMenu::Assign(TsdMenu * p)
{
this->SubMenu=p->SubMenu;
this->Navpic=p->Navpic;
this->NavArrow=p->NavArrow;
this->m_Image=p->m_Image;
this->m_MenuCode=p->m_MenuCode;
this->m_MenuCaption=p->m_MenuCaption;
this->m_MenuDesc=p->m_MenuDesc;
this->m_MenuNo=p->m_MenuNo;
this->m_RightLevel=p->m_RightLevel;
this->m_MenuPicName=p->m_MenuPicName;
this->m_MenuSelPicName=p->m_MenuSelPicName;
this->m_MenuMovePic=p->m_MenuMovePic;
this->m_BlackLine=p->m_BlackLine;
this->m_SilverLine=p->m_SilverLine;
}
void TsdMenu::AddMenu()
{
SubMenu=new TsdSubMenu(m_SubMenuPanel,m_Task);
Navpic=new TsdNavpic(m_NavpicForm,m_Task);
NavArrow=new TsdNavArrow(m_NavImg);
m_Image=NULL;
m_BlackLine=new TShape(m_MenuPanel);
m_BlackLine->Parent=m_MenuPanel;
m_BlackLine->Shape=stRectangle;
m_BlackLine->Pen->Color=clBlack;
m_BlackLine->Height=1;
m_BlackLine->Width=94;
m_BlackLine->Left=-1;
m_BlackLine->BringToFront();
m_BlackLine->Visible=false;
m_SilverLine=new TShape(m_MenuPanel);
m_SilverLine->Parent=m_MenuPanel;
m_SilverLine->Shape=stRectangle;
m_SilverLine->Pen->Color=clSilver;
m_SilverLine->Height=1;
m_SilverLine->Width=94;
m_SilverLine->Left=-1;
m_SilverLine->BringToFront();
m_SilverLine->Visible=false;
TsdMenu *p=new TsdMenu(m_Task,m_MenuPanel,m_SubMenuPanel,m_NavpicForm,m_NavImg,m_Bitmap);
if(m_sbUp==NULL)
{
m_sbUp=new TSpeedButton(m_MenuPanel);
m_sbUp->Parent=m_MenuPanel;
m_sbUp->Flat=true;
m_sbUp->Glyph->LoadFromResourceName((int)HInstance,"MenuUp");
m_sbUp->Left=14;
m_sbUp->Top =m_MenuPanel->Height-2-m_sbUp->Height;
m_sbUp->Height=20;
m_sbUp->Width=33;
m_sbUp->Visible =false;
m_sbUp->OnClick=MenuMoveUpClick;
}
if(m_sbDown==NULL)
{
m_sbDown=new TSpeedButton(m_MenuPanel);
m_sbDown->Parent=m_MenuPanel;
m_sbDown->Flat=true;
m_sbDown->Glyph->LoadFromResourceName((int)HInstance,"MenuDown");
m_sbDown->Left=47;
m_sbDown->Height=20;
m_sbDown->Width=33;
m_sbDown->Top =m_MenuPanel->Height-2-m_sbDown->Height;
m_sbDown->Visible =false;
m_sbDown->OnClick=MenuMoveDownClick;
}
SubMenu->sdParent=this;
Navpic->sdParent=this;
NavArrow->sdParent=this;
p->Assign(this);
m_Parent->Add((void *)p,p->MenuCode);
}
void __fastcall TsdMenu::MenuClick(TObject * Sender)
{
TImage *p=dynamic_cast<TImage *>(Sender);
if(p->Tag==m_Selected)
return;
LocateByIndex(p->Tag);
ShowPageMenu();
}
void __fastcall TsdMenu::MenuMoveUpClick(TObject * Sender)
{
ShowPriorPageMenu();
}
void __fastcall TsdMenu::MenuMoveDownClick(TObject * Sender)
{
ShowNextPageMenu();
}
int __fastcall TsdMenu::GetMenuCount()
{
return m_Parent->Count();
}
/*
void __fastcall TsdMenu::MenuPanelResize(TObject *Sender)
{
if(m_FirstIndex!=-1)
m_OccurPos=1;
else
m_OccurPos=0;
ShowNextPageMenu();
}
*/
//--------------------------------------------------------------------
TsdNavpic::TsdNavpic(TForm *FForm,TsdTask *FTask)
{
m_sdNavpics=new TsdCollection;
m_Task=FTask;
m_ParentForm=FForm;
}
//--------------------------------------------------------------------
TsdNavpic::~TsdNavpic()
{
delete m_sdNavpics;
}
//--------------------------------------------------------------------
void TsdNavpic::ShowNavigator()
{
AnsiString DispBmp,MoveBmp;
for(int i=0;i<m_sdNavpics->Count();i++)
{
LocateByIndex(i);
if(m_ImagePanel==NULL)
{
m_ImagePanel=new TImagePanel(m_ParentForm);
m_ImagePanel->Parent=m_ParentForm;
m_ImagePanel->Cursor=crHandPoint;
m_ImagePanel->Top=m_NavpicTop;
m_ImagePanel->Left=m_NavpicLeft;
m_ImagePanel->Height=m_NavpicHeight;
m_ImagePanel->Width=m_NavpicWidth;
m_ImagePanel->OnClick=NavpicClick;
m_ImagePanel->Tag=i;
m_ImagePanel->Top=m_NavpicTop;
m_ImagePanel->Left=m_NavpicLeft;
DispBmp=m_NavpicCode+"01";
MoveBmp=m_NavpicCode+"02";
Graphics::TBitmap *FBmp1=new Graphics::TBitmap();
Graphics::TBitmap *FBmp2=new Graphics::TBitmap();
TImage *FImg=new TImage(m_ParentForm);
FBmp1->LoadFromResourceName((int)HInstance,DispBmp);
FImg->Height=m_NavpicHeight;
FImg->Width=m_NavpicWidth;
FImg->Canvas->Draw(0,0,(TGraphic *)FBmp1);
m_ImagePanel->Picture->Assign(FImg->Picture);
FBmp2->LoadFromResourceName((int)HInstance,MoveBmp);
FImg->Canvas->Draw(0,0,(TGraphic *)FBmp2);
m_ImagePanel->PictureSelected->Assign(FImg->Picture);
delete FBmp1;
delete FBmp2;
delete FImg;
TsdNavpic *p=new TsdNavpic(m_ParentForm,m_Task);
p->Assign(this);
m_sdNavpics->Change((void *)p,p->NavpicCode,p->NavpicCode);
}
m_ImagePanel->Visible=true;
}
}
//--------------------------------------------------------------------
void TsdNavpic::HideNavigator()
{
for(int i=0;i<m_sdNavpics->Count();i++)
{
LocateByIndex(i);
if(m_ImagePanel!=NULL)
{
delete m_ImagePanel;
m_ImagePanel=NULL;
}
TsdNavpic *p=new TsdNavpic(m_ParentForm,m_Task);
p->Assign(this);
m_sdNavpics->Change((void *)p,p->NavpicCode,p->NavpicCode);
}
}
//--------------------------------------------------------------------
void TsdNavpic::Assign(TsdNavpic *p)
{
this->m_ImagePanel=p->m_ImagePanel;
this->m_NavpicModule=p->m_NavpicModule;
this->m_NavpicCode=p->m_NavpicCode;
this->m_NavpicLib=p->m_NavpicLib;
this->m_NavpicCaption=p->m_NavpicCaption;
this->m_NavpicFormName=p->m_NavpicFormName;
this->m_NavpicPath=p->m_NavpicPath;
this->m_NavpicLeft=p->m_NavpicLeft;
this->m_NavpicTop=p->m_NavpicTop;
this->m_NavpicHeight=p->m_NavpicHeight;
this->m_NavpicWidth=p->m_NavpicWidth;
}
//--------------------------------------------------------------------
void TsdNavpic::LocateByIndex(int Index)
{
TsdNavpic *p=(TsdNavpic *)m_sdNavpics->Item(Index);
Assign(p);
}
//--------------------------------------------------------------------
void TsdNavpic::LocateByKey(AnsiString Key)
{
TsdNavpic *p=(TsdNavpic *)m_sdNavpics->Value(Key);
Assign(p);
}
//--------------------------------------------------------------------
void TsdNavpic::AddNavpic()
{
m_ImagePanel=NULL;
TsdNavpic *p=new TsdNavpic(m_ParentForm,m_Task);
p->Assign(this);
m_sdNavpics->Add((void *)p,p->NavpicCode);
}
//--------------------------------------------------------------------
void __fastcall TsdNavpic::NavpicClick(TObject *Sender)
{
TImagePanel *p=dynamic_cast<TImagePanel *>(Sender);
LocateByIndex(p->Tag);
if(m_NavpicRight==0)
throw Exception("您没有授权使用本功能!");
m_Task->Show(m_NavpicFormName,m_NavpicCode,m_NavpicCaption,m_NavpicLib,m_NavpicRight);
}
//--------------------------------------------------------------------
int TsdNavpic::GetNavpicCount()
{
return m_sdNavpics->Count();
}
//**************************************************
// Navigator Arrows class implement
// Kallen
//*************************************************
//--------------------------------------------------------------------
void TsdNavArrow::Assign(TsdNavArrow * p)
{
this->m_NavArrowModule=p->m_NavArrowModule;
this->m_NavArrowCode=p->m_NavArrowCode;
this->m_NavArrowStyle=p->m_NavArrowStyle;
this->m_NavArrowDir=p->m_NavArrowDir;
this->m_NavArrow3D=p->m_NavArrow3D;
this->m_NavArrowX1=p->m_NavArrowX1;
this->m_NavArrowY1=p->m_NavArrowY1;
this->m_NavArrowX2=p->m_NavArrowX2;
this->m_NavArrowY2=p->m_NavArrowY2;
this->m_NavArrowAngle=p->m_NavArrowAngle;
this->m_NavArrowColor=p->m_NavArrowColor;
}
//--------------------------------------------------------------------
int TsdNavArrow::GetNavArrowCount()
{
return m_sdNavArrows->Count();
}
//--------------------------------------------------------------------
TsdNavArrow::TsdNavArrow(TImage *FImage)
{
m_sdNavArrows=new TsdCollection;
m_Image=FImage;
}
//--------------------------------------------------------------------
TsdNavArrow::~TsdNavArrow()
{
delete m_sdNavArrows;
}
//--------------------------------------------------------------------
void TsdNavArrow::ShowNavArrow()
{
Windows::TPoint points[3];
TColor colors[4];
colors[0]=(TColor)RGB(128,112,128);
colors[1]=(TColor)RGB(143,103,80);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -