当页面类似于表单,有很多需要输入的内容,就需要做上下滚动的效果
来源:互联网 发布:做淘宝客怎样更快赚钱 编辑:程序博客网 时间:2024/05/01 19:12
如果一个页面中的布局类似于表单。就是有很多控件需要用户填写,就要自己处理上下方向键了。
1.在.h文件中添加新的数据结构,用于存放控件的标题:
class CTextItem
{
public:
TPoint iPt;
TBuf<32> iValue;
};
2.
private:
RPointerArray<CTextItem> iTextItem; //显示的提示信息
RPointerArray<CCoeControl> iControl; //所有的控件
CCoeControl * iCurControl; //当前控件
TRect iRect; //屏幕的区域
TInt iHeight; //屏幕的高度
TInt iStartY; //开始的位置
public:
//初始化控件
void InitControl(const TRect& aRect);
//初始化所有的文本信息
void InitText();
//当按上下键的时候,判断是否需要重新计算高度
//如果上下移动,上下控件没有显示在屏幕中,就重新计算坐标。如果重新计算坐标后,该控件可以显示在屏幕中,就把光标设置到该上下控件中
//如果上下移动,上下控件显示在屏幕中,就直接把光标设置到屏幕中
void JudgeRect(const TUint aDirection);
//当移动上下键的时候,重新计算位置
void ReCalcRect();
3.在.cpp中定义
//
const TInt KADeviation = 40; //偏差
const TInt KAHigh = 20; //每次浮动的高度
//
4.在构造函数中初始化
iStartY = 40;
5.在ConstructL()中
void CWorldContainer::ConstructL(const TRect& aRect)
{
CreateWindowL();
iRect = aRect; //客户区域
iHeight = aRect.Size().iHeight;
//初始化控件
InitControl(aRect);
InitText();
ReCalcRect();
SetRect(aRect);
ActivateL();
}
6.析构函数中
CWorldContainer::~CWorldContainer()
{
iTextItem.ResetAndDestroy();
iControl.ResetAndDestroy();
}
7.
TInt CWorldContainer::CountComponentControls() const
{
return iControl.Count();
}
8.
CCoeControl* CWorldContainer::ComponentControl(TInt aIndex) const
{
if (aIndex > -1 && aIndex < iControl.Count())
{
return iControl[aIndex];
}
else
{
return NULL;
}
}
9.
void CWorldContainer::Draw(const TRect& aRect) const
{
CWindowGc& gc = SystemGc();
gc.Clear();
gc.SetBrushStyle(CGraphicsContext::ESolidBrush);
gc.SetBrushColor(KRgbGray);
gc.DrawRect(Rect());
const CFont* myFont = NULL;
myFont = LatinBold16();
gc.UseFont(myFont);
for (TInt i = 0; i < iTextItem.Count(); i++)
{
//显示"账号"
gc.DrawText(iTextItem[i]->iValue, iTextItem[i]->iPt);
}
gc.DiscardFont();
}
10.
TKeyResponse CWorldContainer::OfferKeyEventL(const TKeyEvent& aKeyEvent,
TEventCode aType)
{
TKeyResponse ret(EKeyWasConsumed);
if (aType != EEventKey)
ret = EKeyWasNotConsumed;
//当是上下方向键的时候,就直接处理。
if (EKeyUpArrow == aKeyEvent.iCode || EKeyDownArrow == aKeyEvent.iCode)
{
JudgeRect(aKeyEvent.iCode);
DrawDeferred();
return ret;
}
if (iCurControl->IsFocused())
{
iCurControl->OfferKeyEventL(aKeyEvent, aType);
}
DrawDeferred();
return ret;
}
11.
void CWorldContainer::InitControl(const TRect& aRect)
{
CEikEdwin * iEdwin0 = new (ELeave) CEikEdwin;
iEdwin0->SetContainerWindowL(*this);
iEdwin0->ConstructL(EEikEdwinWidthInPixels,10, 10, 1);
iEdwin0->SetFocus(ETrue);
iCurControl = iEdwin0;
iControl.Append(iEdwin0);
CEikEdwin * iEdwin1 = new (ELeave) CEikEdwin;
iEdwin1->SetContainerWindowL(*this);
iEdwin1->ConstructL(EEikEdwinWidthInPixels,10, 10, 1);
iEdwin1->SetFocus(EFalse);
iControl.Append(iEdwin1);
CEikEdwin * iEdwin2 = new (ELeave) CEikEdwin;
iEdwin2->SetContainerWindowL(*this);
iEdwin2->ConstructL(EEikEdwinWidthInPixels,10, 10, 1);
iEdwin2->SetFocus(EFalse);
iControl.Append(iEdwin2);
}
12.
void CWorldContainer::InitText()
{
//------
CTextItem * pT0 = new (ELeave) CTextItem;
pT0->iValue.Append(_L("Text 0"));
iTextItem.Append(pT0);
//------
CTextItem * pT1 = new (ELeave) CTextItem;
pT1->iValue.Append(_L("Text 1"));
iTextItem.Append(pT1);
//------
CTextItem * pT2 = new (ELeave) CTextItem;
pT2->iValue.Append(_L("Text 2"));
iTextItem.Append(pT2);
}
13.
void CWorldContainer::JudgeRect(const TUint aDirection)
{
//获取当前的ID
TInt nCurControlID = 0;
for (TInt i = 0; i < iControl.Count(); i++)
{
if (iControl[i]->IsFocused())
{
nCurControlID = i;
break;
}
}
TInt nHeight = 0;
//向上
if (EKeyUpArrow == aDirection)
{
//如果是第一个,返回
if (nCurControlID == 0)
{
//如果没有显示标题。
if (iTextItem[0]->iPt.iY < KADeviation)
{
iStartY += KAHigh;
ReCalcRect();
}
return;
}
nCurControlID--;
nHeight = iControl[nCurControlID]->Rect().iTl.iY;
if (nHeight < 0)
{
iStartY += KAHigh;
ReCalcRect();
//如果大于0,就设置光标
if (nHeight > 0)
{
iCurControl->SetFocus(EFalse);
iCurControl = iControl[nCurControlID];
iCurControl->SetFocus(ETrue);
}
}
else
{
iCurControl->SetFocus(EFalse);
iCurControl = iControl[nCurControlID];
iCurControl->SetFocus(ETrue);
}
}
//向下
else if (EKeyDownArrow == aDirection)
{
//如果是最后一个,返回
if (nCurControlID == iControl.Count() - 1)
return;
nCurControlID++;
nHeight = iControl[nCurControlID]->Rect().iBr.iY;
if (nHeight > iHeight)
{
iStartY -= KAHigh;
ReCalcRect();
//如果大于0,就设置光标
if (nHeight < iHeight - KADeviation)
{
iCurControl->SetFocus(EFalse);
iCurControl = iControl[nCurControlID];
iCurControl->SetFocus(ETrue);
}
}
else
{
iCurControl->SetFocus(EFalse);
iCurControl = iControl[nCurControlID];
iCurControl->SetFocus(ETrue);
}
}
}
14.
void CWorldContainer::ReCalcRect()
{
//计算显示位置
TInt nHeight = 0;
TInt nHeight1 = 3;
TInt nStartY = iStartY;
TInt nWidth = 0;
if (iRect.Size().iWidth == 240)
{
nHeight = 30;
nWidth = 140;
}
else if (iRect.Size().iWidth == 320)
{
nHeight = 30;
nWidth = 140;
}
else if (iRect.Size().iWidth == 360)
{
nHeight = 45;
nWidth = 235;
}
else
{
nHeight = 30;
nWidth = 140;
}
TInt nStartX = (iRect.Size().iWidth - nWidth) / 2;
TSize size;
size.iHeight = nHeight;
size.iWidth = nWidth;
TRect rect;
//------
iTextItem[0]->iPt.SetXY(nStartX, nStartY);
nStartY += nHeight1;
rect.SetRect(TPoint(nStartX, nStartY), size);
iControl[0]->SetRect(rect);
//------
nStartY += nHeight * 2;
iTextItem[1]->iPt.SetXY(nStartX, nStartY);
nStartY += nHeight1;
rect.SetRect(TPoint(nStartX, nStartY), size);
iControl[1]->SetRect(rect);
//------
nStartY += nHeight * 2;
iTextItem[2]->iPt.SetXY(nStartX, nStartY);
nStartY += nHeight1;
rect.SetRect(TPoint(nStartX, nStartY), size);
iControl[2]->SetRect(rect);
}
- 当页面类似于表单,有很多需要输入的内容,就需要做上下滚动的效果
- 做一个好的程序员,我们需要做很多很多
- 精通php还需要做的很多;
- 文本内容过多,需要做一个折叠展开的效果
- 实现鼠标滚动一下页面就上下翻一页的效果
- 对于页面一个表单存在很多字段需要验证的封装
- java属性太多,有上百个,页面添加一次 需要手写很多的属性解决办法。
- Line估值达182亿美元 需要做的还很多
- csdn不错,上面有很多我需要的东西
- 文字上下滚动的效果
- 创业需要有”做小”的思维
- POST至本页面时,需要对表单内容进行一个if的判断
- 需要学习的还有很多
- 需要研究的还有很多
- 图片的滚动效果(上下滚动)
- swift 当需要改变cell的内容布局时
- 当显示的页面内容太长时,需要省略号代替时,通过自定义标签来实现方法
- 8.当行属性标签需要进行上下的移动时候
- 22个Web在线编辑器
- jhead:编辑exif的利刃
- 在ActivityGroup时,调用对应的menu。
- asp.net 验证控件 必填 字符串 数字 .....
- 几个应用开源项目
- 当页面类似于表单,有很多需要输入的内容,就需要做上下滚动的效果
- java static i hate you
- 15个在线图片尺寸调整工具
- 菲律宾 IT安全网被黑
- 子类实例化时默认调用父类的默认构造器
- 在ASP.NET项目中建立统一的异常处理机制
- 在ActivityGroup时,调用对应的menu。
- SAP SD操作指南
- asp.net 验证控件 必填 字符串 数字 .....