📄 bcjq018.txt
字号:
C++ Builder开发者:程序员之家
var how_many_ads = 3;
var now = new Date()
var sec = now.getSeconds()
var ad = sec % how_many_ads;
ad +=1;
首页
| 控件天堂 | 控件使用
| 编程技巧
| 源代码 | 编程工具 |
系统补丁 | 电子书籍 | 技术论坛
| 相关链接
if (ad==1) {document.write(''+'');}
if (ad==2) {document.write(''+'');}
if (ad==3) {document.write(''+'');}
var marqueecontents=''+scroll_text+''
if (document.all)
document.write(''+marqueecontents+'')
function regenerate(){
window.location.reload()
}
function regenerate2(){
if (document.layers){
setTimeout("window.onresize=regenerate",450)
intializemarquee()
}
}
function intializemarquee(){
document.cmarquee01.document.cmarquee02.document.write(marqueecontents)
document.cmarquee01.document.cmarquee02.document.close()
thelength=document.cmarquee01.document.cmarquee02.document.height
scrollit()
}
function scrollit(){
if (document.cmarquee01.document.cmarquee02.top>=thelength*(-1)){
document.cmarquee01.document.cmarquee02.top-=speed
setTimeout("scrollit()",100)
}
else{
document.cmarquee01.document.cmarquee02.top=marqueeheight
scrollit()
}
}
window.onload=regenerate2
当前位置
:
编程技巧
BCB自画菜单
我们知道,C++Builder没有自画菜单,但可以调用API函数::SetMenuItemInfo()来改变菜单类型,达到自画菜单的目的。下面的例子演示了如何使用自画菜单。当鼠标位于菜单上拾,菜单项将凸出来。(黑体字为添加的代码)
//头文件
//-----------------------------------------------------------------------
#ifndef TestMenuH
#define TestMenuH
//-----------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Menus.hpp>
//------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TMainMenu *MainMenu1;
TMenuItem *aaa1;
TMenuItem *aaaaaaaaa1;
TMenuItem *ccc1;
TMenuItem *ddd1;
TMenuItem *eee1;
TMenuItem *ddsds1;
TMenuItem *fcdfsss1;
TMenuItem *dddddddd1;
void __fastcall FormCreate(TObject *Sender);
private: // User declarations
void __fastcall Modify(TMenuItem *pMenuItem);
protected :
MESSAGE void __fastcall CNMeasureItem(TWMMeasureItem &Msg);//增加响应消息
MESSAGE void __fastcall CNDrawItem(TWMDrawItem &Msg);
public: // User declarations
__fastcall TForm1(TComponent* Owner);
BEGIN_MESSAGE_MAP//添加消息映射
VCL_MESSAGE_HANDLER(WM_MEASUREITEM, TWMMeasureItem, CNMeasureItem);
VCL_MESSAGE_HANDLER( WM_DRAWITEM, TWMDrawItem, CNDrawItem);
END_MESSAGE_MAP(TForm);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
//实现文件
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "TestMenu.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Modify(TMenuItem *pMenuItem)
{//修改缺省属性
for(int i=0;i<pMenuItem->Count;i++)
{
MENUITEMINFO mii=
{
sizeof(MENUITEMINFO),
MIIM_TYPE|MIIM_DATA ,//改变类型和数据
MF_OWNERDRAW,0,0,0,0,0,DWORD(pMenuItem->Items[i]->Handle),
//把菜单项的句柄赋给32位数据
0,
0,
};
if(pMenuItem->Items[i]->Caption!="-")//如果不是间隔线
::SetMenuItemInfo(pMenuItem->Handle,i,TRUE,&mii);
if(pMenuItem->Items[i]->Count)//如果含有子菜单
Modify(pMenuItem->Items[i]);
}
}
void __fastcall TForm1::FormCreate(TObject *Sender)
{
for(int i=0;i<MainMenu1->Items->Count;i++)
{
Modify(MainMenu1->Items->Items[i]);
}
DrawMenuBar(Handle);
}
//----------------------------------------------------
void __fastcall TForm1::CNMeasureItem(TWMMeasureItem &Msg)
{//设置菜单大小
TMenuItem
*pItem=MainMenu1->FindItem(Msg.MeasureItemStruct->itemData,fkHandle);
Msg.MeasureItemStruct->itemWidth
=pItem->Caption.Length()*8+40;
Msg.MeasureItemStruct->itemHeight = 20;
}
void __fastcall TForm1::CNDrawItem(TWMDrawItem &Msg)
{//画出菜单
TMenuItem
*pItem=MainMenu1->FindItem(Msg.DrawItemStruct->itemData,fkHandle);
TCanvas *pCanvas=new TCanvas;
pCanvas->Handle=Msg.DrawItemStruct->hDC;
RECT r=Msg.DrawItemStruct->rcItem;
pCanvas->Brush->Color=clBtnFace;
RECT r1=r;
r1.right+=1;
r1.bottom+=1;
r1.top-=1;
r1.left-=1;
pCanvas->FillRect(r);
::SetBkMode(pCanvas->Handle,TRANSPARENT);
pCanvas->TextOut(r.left+10,r.top+2,pItem->Caption);
r.right-=1;
r.bottom-=1;
if(Msg.DrawItemStruct->itemAction == ODA_SELECT&&
Msg.DrawItemStruct->itemState&ODS_SELECTED )
{
pCanvas->Pen->Color=(TColor)(RGB(255,255,255));
pCanvas->MoveTo(r.right,r.top);
pCanvas->LineTo(r.left,r.top);
pCanvas->LineTo(r.left,r.bottom);
pCanvas->Pen->Color=(TColor)(RGB(128,128,128));
pCanvas->LineTo(r.right,r.bottom);
pCanvas->LineTo(r.right,r.top);
}
}
if (ad==1) {document.write(''+'');}
if (ad==2) {document.write(''+'');}
if (ad==3) {document.write(''+'');}
C++ Builder开发者®
2000年06月01日 站长:唐朝