Initial commit
This commit is contained in:
@@ -0,0 +1,535 @@
|
||||
//---------------------------------------------------------------------------
|
||||
#include <vcl.h>
|
||||
#pragma hdrstop
|
||||
#include "NotificationContentPanelUnit.h"
|
||||
|
||||
#pragma package(smart_init)
|
||||
//---------------------------------------------------------------------------
|
||||
#define SCOLLBAR_WIDTH (14)
|
||||
#define TOP_BUTTOM (10)
|
||||
#define LEFT_RIGHT (SCOLLBAR_WIDTH + 20)
|
||||
#define LINE_HEIGHT (25)
|
||||
|
||||
#define DB_NAME_LINE (2)
|
||||
#define DB_NAME_HEIGHT (DB_NAME_LINE*LINE_HEIGHT)
|
||||
#define DB_NAME_RECT_LEFT (10)
|
||||
#define DB_NAME_RECT_HEIGHT (20)
|
||||
#define DB_NAME_TEXT_LEFT (5)
|
||||
#define DB_NAME_TEXT_WIDTH (10)
|
||||
|
||||
|
||||
#define PIC_TO_LEFT (LEFT_RIGHT)
|
||||
#define PIC_HEIGHT (45)
|
||||
#define PIC_WIDTH (45)
|
||||
#define PIC_LEFT (LEFT_RIGHT)
|
||||
#define PIC_RIGHT (PIC_LEFT + PIC_WIDTH + LEFT_RIGHT)
|
||||
|
||||
#define LABEL_TO_LEFT (PIC_LEFT)
|
||||
#define LABEL_MAX_WIDTH_PIC (Width - PIC_RIGHT - LEFT_RIGHT)
|
||||
#define LABEL_MAX_WIDTH (Width - LABEL_TO_LEFT - LEFT_RIGHT)
|
||||
#define LABEL_HEIGHT (PIC_HEIGHT/2)
|
||||
|
||||
const static COLORREF
|
||||
CLR_TXT_HOT = RGB(171, 186, 207),
|
||||
CLR_CONTENT_BKG = RGB(56, 61, 67),
|
||||
CLR_CONTENT_DB_NAME_BKG = RGB(47, 50, 56),
|
||||
CLR_CONTENT_DB_NAME_FRAME = RGB(32, 35, 39),
|
||||
CLR_CONTENT_DB_LINE_DARK = RGB(32, 35, 39),
|
||||
CLR_CONTENT_DB_LINE_LIGHT = RGB(76, 81, 87);
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
__fastcall TNotiContenPanel::TNotiContenPanel( TComponent* Owner, VCTJSONDB *VCJsonContent)
|
||||
: Vcl::Extctrls::TPanel( Owner )
|
||||
{
|
||||
ParentColor = true;
|
||||
|
||||
m_VCJsonContent = VCJsonContent;
|
||||
m_ScrollBar = NULL;
|
||||
m_iTopLine =0;
|
||||
m_iShowLine = 1;
|
||||
SetContent();
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void __fastcall TNotiContenPanel::CreateWnd()
|
||||
{
|
||||
Vcl::Extctrls::TPanel::CreateWnd();
|
||||
|
||||
SetShowLine();
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
__fastcall TNotiContenPanel::~TNotiContenPanel()
|
||||
{
|
||||
if( m_ScrollBar ){
|
||||
delete m_ScrollBar;
|
||||
m_ScrollBar = NULL;
|
||||
}
|
||||
|
||||
vector<TPicture *>::iterator vc_pFindPIC;
|
||||
for( vc_pFindPIC = ItemPIC.begin();
|
||||
vc_pFindPIC != ItemPIC.end();
|
||||
vc_pFindPIC++ )
|
||||
{
|
||||
if( *vc_pFindPIC ) {
|
||||
delete *vc_pFindPIC;
|
||||
*vc_pFindPIC = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
vector<VCURLLABEL*>::iterator vc_pFindItemLabel;
|
||||
for( vc_pFindItemLabel = ItemLabel.begin();
|
||||
(vc_pFindItemLabel != ItemLabel.end());
|
||||
vc_pFindItemLabel++ )
|
||||
{
|
||||
vector<TUrlLabel*>::iterator vc_pFindLabel;
|
||||
VCURLLABEL* vcLabel = *vc_pFindItemLabel;
|
||||
|
||||
for( vc_pFindLabel = (*vcLabel).begin();
|
||||
vc_pFindLabel!= (*vcLabel).end();
|
||||
vc_pFindLabel++ )
|
||||
{
|
||||
if( *vc_pFindLabel ) {
|
||||
delete *vc_pFindLabel;
|
||||
*vc_pFindLabel = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void __fastcall TNotiContenPanel::WMEraseBkgnd(TWMEraseBkgnd &Message)
|
||||
{
|
||||
TRect rect = GetClientRect();
|
||||
|
||||
TCanvas* tempCanvas = new TCanvas;
|
||||
tempCanvas->Handle = Message.DC;
|
||||
|
||||
tempCanvas->Brush->Color = CLR_CONTENT_BKG; //背景颜色
|
||||
tempCanvas->FillRect( rect );
|
||||
|
||||
delete tempCanvas;
|
||||
tempCanvas = NULL;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void __fastcall TNotiContenPanel::WMVScroll(Winapi::Messages::TWMScroll &Message)
|
||||
{
|
||||
int minpos, maxpos, page, curpos;
|
||||
m_ScrollBar->GetScrollRange(&minpos, &maxpos);
|
||||
page = m_ScrollBar->GetPageSize();
|
||||
// Get the current position of scroll box.
|
||||
curpos = m_ScrollBar->GetScrollPos();
|
||||
|
||||
// Determine the new position of scroll box.
|
||||
switch (Message.ScrollCode)
|
||||
{
|
||||
case SB_TOP: // Scroll to far top.
|
||||
curpos = minpos;
|
||||
break;
|
||||
|
||||
case SB_BOTTOM: // Scroll to far bottom.
|
||||
curpos = maxpos-page+1;
|
||||
break;
|
||||
|
||||
case SB_ENDSCROLL: // End scroll.
|
||||
break;
|
||||
|
||||
case SB_LINEUP: // Scroll left.
|
||||
if (curpos > minpos)
|
||||
curpos--;
|
||||
break;
|
||||
|
||||
case SB_LINEDOWN: // Scroll right.
|
||||
if (curpos < maxpos-page+1)
|
||||
curpos++;
|
||||
break;
|
||||
|
||||
case SB_PAGEUP: // Scroll one page left.
|
||||
if (curpos > minpos)
|
||||
curpos = (minpos > curpos-page) ? minpos : curpos-page;
|
||||
//max(minpos, curpos-page);
|
||||
break;
|
||||
|
||||
case SB_PAGEDOWN: // Scroll one page right.
|
||||
if( curpos<maxpos )
|
||||
curpos = (maxpos-page+1 < curpos+page) ? maxpos-page+1 : curpos+page;
|
||||
//min(maxpos-page+1, curpos+page);
|
||||
break;
|
||||
|
||||
case SB_THUMBPOSITION: // Scroll to absolute position. nPos is the position
|
||||
curpos = Message.Pos; // of the scroll box at the end of the drag operation.
|
||||
break;
|
||||
|
||||
case SB_THUMBTRACK: // Drag scroll box to specified position. nPos is the
|
||||
curpos = Message.Pos; // position that the scroll box has been dragged to.
|
||||
break;
|
||||
}
|
||||
|
||||
// Set the new position of the thumb (scroll box).
|
||||
if( Message.ScrollBar!=m_ScrollBar->Handle ){
|
||||
m_ScrollBar->SetPosition(curpos);
|
||||
// Paint();
|
||||
}
|
||||
if( m_iTopLine != curpos ){
|
||||
m_iTopLine = curpos;
|
||||
Invalidate();
|
||||
}
|
||||
|
||||
Message.Result = true;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void __fastcall TNotiContenPanel::WMMouseWheel(TWMMouseWheel &Message)
|
||||
{
|
||||
if( m_ScrollBar->Visible ){
|
||||
UINT nSBCode;
|
||||
|
||||
if( Message.WheelDelta>0 ) nSBCode = SB_LINEUP;
|
||||
else nSBCode = SB_LINEDOWN;
|
||||
|
||||
Perform( WM_VSCROLL, MAKELONG(nSBCode,0), NULL );
|
||||
}
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void __fastcall TNotiContenPanel::SetContent()
|
||||
{
|
||||
bool bPicExist, bLabelExist;
|
||||
VCTJSONDB::iterator vc_pFindContent;
|
||||
for( vc_pFindContent = (*m_VCJsonContent).begin();
|
||||
vc_pFindContent != (*m_VCJsonContent).end();
|
||||
vc_pFindContent++)
|
||||
{
|
||||
int dbNum = 0;
|
||||
VCTJSON::iterator vc_pFindContentPIC;
|
||||
for( vc_pFindContentPIC = (*vc_pFindContent).vcContent.begin();
|
||||
vc_pFindContentPIC != (*vc_pFindContent).vcContent.end();
|
||||
vc_pFindContentPIC++)
|
||||
{
|
||||
bPicExist = bLabelExist = false;
|
||||
//===========图片信息
|
||||
TPicture *picImg = NULL;
|
||||
TUrlPaintBox *tmpPicDraw = NULL;
|
||||
String strExit = (*vc_pFindContentPIC).strNamePic;
|
||||
if( strExit.Length() ) {
|
||||
|
||||
picImg = new TPicture();
|
||||
picImg->LoadFromFile( strExit );
|
||||
bPicExist = true;
|
||||
|
||||
if( bPicExist ) {
|
||||
tmpPicDraw = new TUrlPaintBox(this);
|
||||
tmpPicDraw->Parent = this;
|
||||
tmpPicDraw->GraphicImg = picImg;
|
||||
tmpPicDraw->StrUrl = (*vc_pFindContentPIC).strUrl;
|
||||
tmpPicDraw->Visible = true;
|
||||
}
|
||||
}
|
||||
ItemPIC.push_back( picImg );
|
||||
ItemPICDraw.push_back( tmpPicDraw );
|
||||
|
||||
//===========文字信息
|
||||
VCURLLABEL *tmpVCUrlLabel = new VCURLLABEL();
|
||||
|
||||
//链接信息
|
||||
TUrlLabel *tmpLabel = CreateLabel((*vc_pFindContentPIC).strName,
|
||||
(*vc_pFindContentPIC).strUrl);
|
||||
if( tmpLabel!=NULL ) {
|
||||
tmpVCUrlLabel->push_back(tmpLabel);
|
||||
bLabelExist = true;
|
||||
}
|
||||
|
||||
//说明信息
|
||||
tmpLabel = CreateLabel((*vc_pFindContentPIC).strAuthor, L"");
|
||||
if( tmpLabel!=NULL ) {
|
||||
tmpVCUrlLabel->push_back(tmpLabel);
|
||||
bLabelExist = true;
|
||||
}
|
||||
|
||||
if( !bLabelExist) { //如果说明不存在
|
||||
ItemPIC.pop_back();
|
||||
ItemPICDraw.pop_back();
|
||||
if( picImg ) { delete picImg; picImg=NULL;};
|
||||
if( tmpPicDraw ) { delete tmpPicDraw; tmpPicDraw=NULL;};
|
||||
if( tmpVCUrlLabel ) { delete tmpVCUrlLabel; tmpVCUrlLabel=NULL;};
|
||||
}else {
|
||||
ItemLabel.push_back(tmpVCUrlLabel);
|
||||
dbNum++;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//===========类型信息
|
||||
if( bLabelExist ) {
|
||||
|
||||
ItemDBName.push_back((*vc_pFindContent).strDbName);
|
||||
ItemDBNameNum.push_back(dbNum);
|
||||
}
|
||||
}
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
TUrlLabel* __fastcall TNotiContenPanel::CreateLabel(String caption, String url)
|
||||
{
|
||||
TUrlLabel *tmpUrlLabel;
|
||||
if( caption.Length() ) {
|
||||
tmpUrlLabel = new TUrlLabel(this);
|
||||
tmpUrlLabel->Parent = this;
|
||||
tmpUrlLabel->Caption = caption;
|
||||
tmpUrlLabel->StrUrl = url;
|
||||
}else { tmpUrlLabel=NULL; }
|
||||
|
||||
return tmpUrlLabel;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void __fastcall TNotiContenPanel::CutOffLabelString()
|
||||
{
|
||||
int maxPicExsit = LABEL_MAX_WIDTH_PIC;
|
||||
int maxPicNo = LABEL_MAX_WIDTH;
|
||||
int maxLabelLen;
|
||||
vector<TPicture*>::iterator vc_pFindItemPIC;
|
||||
vector<VCURLLABEL*>::iterator vc_pFindLBItem = ItemLabel.begin();
|
||||
for( vc_pFindLBItem = ItemLabel.begin(),
|
||||
vc_pFindItemPIC = ItemPIC.begin();
|
||||
vc_pFindLBItem != ItemLabel.end(),
|
||||
vc_pFindItemPIC != ItemPIC.end();
|
||||
vc_pFindLBItem++,
|
||||
vc_pFindItemPIC++)
|
||||
{
|
||||
if( (*vc_pFindItemPIC) == NULL ){
|
||||
maxLabelLen = maxPicNo;
|
||||
}else{
|
||||
maxLabelLen = maxPicExsit;
|
||||
}
|
||||
|
||||
vector<TUrlLabel*>::iterator vc_pFindLabel;
|
||||
VCURLLABEL* vcLabel = *vc_pFindLBItem;
|
||||
|
||||
for( vc_pFindLabel = (*vcLabel).begin();
|
||||
vc_pFindLabel!= (*vcLabel).end();
|
||||
vc_pFindLabel++)
|
||||
{
|
||||
String caption = (*vc_pFindLabel)->Caption;
|
||||
TSize size = Canvas->TextExtent( caption );
|
||||
int nLen = caption.Length();
|
||||
if( size.Width >= maxLabelLen )
|
||||
{
|
||||
nLen = nLen*(maxLabelLen)/size.Width;
|
||||
nLen -= 1;
|
||||
|
||||
if(nLen <= 0){
|
||||
caption = caption.SubString(0, 1);
|
||||
}else{
|
||||
caption = caption.SubString(0, nLen);
|
||||
caption += "..";
|
||||
}
|
||||
|
||||
(*vc_pFindLabel)->Caption = caption;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
int __fastcall TNotiContenPanel::GetLineNumber()
|
||||
{
|
||||
int linePIC;
|
||||
int linePICExist = (PIC_HEIGHT%LINE_HEIGHT==0)?(PIC_HEIGHT/LINE_HEIGHT):
|
||||
((PIC_HEIGHT/LINE_HEIGHT)+1);
|
||||
int lineLabel = 0;
|
||||
int lineNumber = 0;
|
||||
|
||||
vector<TPicture*>::iterator vc_pFindItemPIC;
|
||||
vector<VCURLLABEL*>::iterator vc_pFindItemLabel;
|
||||
for( vc_pFindItemLabel =ItemLabel.begin(),
|
||||
vc_pFindItemPIC = ItemPIC.begin();
|
||||
vc_pFindItemLabel != ItemLabel.end()&&
|
||||
vc_pFindItemPIC != ItemPIC.end();
|
||||
vc_pFindItemLabel++,
|
||||
vc_pFindItemPIC++)
|
||||
{
|
||||
if( (*vc_pFindItemPIC) == NULL ) {
|
||||
linePIC = 0;
|
||||
}else{
|
||||
linePIC = linePICExist;
|
||||
}
|
||||
|
||||
VCURLLABEL* vcLabel = *vc_pFindItemLabel;
|
||||
lineLabel = (*vcLabel).size();
|
||||
|
||||
int lineNumberTmp = lineNumber;
|
||||
// if( linePIC>lineLabel ) {
|
||||
// lineNumber += linePIC;
|
||||
// }else {
|
||||
// lineNumber += lineLabel;
|
||||
// }
|
||||
|
||||
lineNumber += linePICExist;
|
||||
ItemLine.push_back(lineNumber - lineNumberTmp);
|
||||
}
|
||||
|
||||
lineNumber += ItemDBName.size()*DB_NAME_LINE;
|
||||
|
||||
return lineNumber;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void __fastcall TNotiContenPanel::SetShowLine()
|
||||
{
|
||||
CutOffLabelString();
|
||||
|
||||
int totalLine = GetLineNumber();
|
||||
// m_iShowLine = (Height - 2*TOP_BUTTOM)/LINE_HEIGHT;
|
||||
m_iShowLine = Height/LINE_HEIGHT;
|
||||
|
||||
if( totalLine>m_iShowLine ){
|
||||
m_ScrollBar = new TSkinScrollBar(this);
|
||||
m_ScrollBar->m_pWndCtrl = this;
|
||||
m_ScrollBar->Parent = this;
|
||||
m_ScrollBar->Height = Height-2;
|
||||
// m_ScrollBar->Width = SCOLLBAR_WIDTH;
|
||||
m_ScrollBar->Left = Width - m_ScrollBar->Width - 1;
|
||||
m_ScrollBar->Top = 1;
|
||||
m_ScrollBar->SetRange( 0,totalLine-1 );
|
||||
m_ScrollBar->SetPageSize(m_iShowLine);
|
||||
m_ScrollBar->SetPosition( m_iTopLine );
|
||||
m_ScrollBar->Visible = true;
|
||||
}
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void __fastcall TNotiContenPanel::Paint(void)
|
||||
{
|
||||
int contentHeight = 0;
|
||||
int curX = 0;
|
||||
int curY = 0;
|
||||
int curWidth = 0;
|
||||
int curHeight = 0;
|
||||
int contentStart = -m_iTopLine*LINE_HEIGHT;
|
||||
int dbNum = 0;
|
||||
bool dbNameShow = true;
|
||||
|
||||
vector<int>::iterator vc_pFindItemDBNameNum = ItemDBNameNum.begin();
|
||||
vector<String>::iterator vc_pFindItemDBName = ItemDBName.begin();
|
||||
vector<int>::iterator vc_pFindItemLine;
|
||||
vector<TPicture*>::iterator vc_pFindItemPIC;
|
||||
vector<TUrlPaintBox*>::iterator vc_pFindItemPICDraw;
|
||||
vector<VCURLLABEL*>::iterator vc_pFindItemLabel;
|
||||
|
||||
if( vc_pFindItemDBNameNum == ItemDBNameNum.end()
|
||||
|| vc_pFindItemDBName == ItemDBName.end() )
|
||||
return;
|
||||
|
||||
for( vc_pFindItemLine = ItemLine.begin(),
|
||||
vc_pFindItemPIC = ItemPIC.begin(),
|
||||
vc_pFindItemPICDraw = ItemPICDraw.begin(),
|
||||
vc_pFindItemLabel = ItemLabel.begin();
|
||||
|
||||
(vc_pFindItemLine != ItemLine.end())&&
|
||||
(vc_pFindItemPIC != ItemPIC.end()) &&
|
||||
(vc_pFindItemPICDraw != ItemPICDraw.end()),
|
||||
(vc_pFindItemLabel != ItemLabel.end());
|
||||
|
||||
vc_pFindItemLine++,
|
||||
vc_pFindItemPIC++,
|
||||
vc_pFindItemPICDraw++,
|
||||
vc_pFindItemLabel++ )
|
||||
{
|
||||
if( dbNameShow && dbNum == 0 )
|
||||
{
|
||||
contentHeight = DB_NAME_HEIGHT;
|
||||
|
||||
//类型信息
|
||||
dbNum = (*vc_pFindItemDBNameNum) - 1;
|
||||
|
||||
TSize sizeFont = Canvas->TextExtent((*vc_pFindItemDBName));
|
||||
curX = DB_NAME_RECT_LEFT;
|
||||
curY = contentStart + contentHeight/2 - DB_NAME_RECT_HEIGHT/2;
|
||||
curWidth = sizeFont.Width;
|
||||
curHeight = DB_NAME_RECT_HEIGHT;
|
||||
|
||||
Canvas->Brush->Color = CLR_CONTENT_DB_NAME_BKG;
|
||||
Canvas->FillRect(TRect(curX, curY, curX+curWidth+DB_NAME_TEXT_WIDTH, curY+curHeight));
|
||||
Canvas->Brush->Color = CLR_CONTENT_DB_NAME_FRAME;
|
||||
Canvas->FrameRect(TRect(curX, curY,curX+curWidth+DB_NAME_TEXT_WIDTH, curY+curHeight));
|
||||
|
||||
curX = DB_NAME_RECT_LEFT + DB_NAME_TEXT_LEFT;
|
||||
curY = curY + (DB_NAME_RECT_HEIGHT - sizeFont.Height)/2;
|
||||
Canvas->Font->Color = CLR_TXT_HOT;
|
||||
Canvas->Brush->Style = bsClear;
|
||||
Canvas->TextOutW(curX, curY, (*vc_pFindItemDBName));
|
||||
|
||||
|
||||
if( vc_pFindItemDBName != ItemDBName.end() &&
|
||||
vc_pFindItemDBNameNum != ItemDBNameNum.end())
|
||||
{
|
||||
vc_pFindItemDBName++;
|
||||
vc_pFindItemDBNameNum++;
|
||||
}
|
||||
|
||||
if( vc_pFindItemDBName == ItemDBName.end() ){
|
||||
dbNameShow = false;
|
||||
}
|
||||
|
||||
contentStart += contentHeight;
|
||||
|
||||
}else {
|
||||
dbNum--;
|
||||
}
|
||||
|
||||
//图片
|
||||
contentHeight = (*vc_pFindItemLine)*LINE_HEIGHT;
|
||||
|
||||
curY = contentStart + (contentHeight - PIC_HEIGHT)/2;
|
||||
bool bPicExsit = true;
|
||||
if( (*vc_pFindItemPIC) != NULL ) {
|
||||
curX = PIC_LEFT;
|
||||
curWidth = PIC_HEIGHT;
|
||||
curHeight = PIC_WIDTH;
|
||||
(*vc_pFindItemPICDraw)->SetBounds(curX, curY, curWidth, curHeight);
|
||||
|
||||
// Canvas->StretchDraw( TRect(curX, curY, curX+curWidth, curY+curHeight),
|
||||
// (*vc_pFindItemPIC)->Graphic );
|
||||
}else{
|
||||
bPicExsit = false;
|
||||
}
|
||||
|
||||
//文字说明
|
||||
vector<TUrlLabel*>::iterator vc_pFindLabel;
|
||||
VCURLLABEL* vcLabel = *vc_pFindItemLabel;
|
||||
|
||||
// int labelStart = contentStart + (contentHeight - (*vcLabel).size()*LINE_HEIGHT)/2;
|
||||
int labelStart,lineStart;
|
||||
labelStart = lineStart = curY;
|
||||
|
||||
for( vc_pFindLabel = (*vcLabel).begin();
|
||||
vc_pFindLabel!= (*vcLabel).end();
|
||||
vc_pFindLabel++ )
|
||||
{
|
||||
// if( bPicExsit ) {
|
||||
curX = PIC_RIGHT + (LABEL_MAX_WIDTH_PIC - (*vc_pFindLabel)->Width)/2;
|
||||
// }else{
|
||||
// curX = LABEL_TO_LEFT + (LABEL_MAX_WIDTH - (*vc_pFindLabel)->Width)/2;
|
||||
// }
|
||||
|
||||
curY = labelStart + (LABEL_HEIGHT - (*vc_pFindLabel)->Height)/2;
|
||||
(*vc_pFindLabel)->Left = curX;
|
||||
(*vc_pFindLabel)->Top = curY;
|
||||
labelStart += LABEL_HEIGHT;
|
||||
}
|
||||
lineStart += PIC_HEIGHT;
|
||||
Canvas->Pen->Color = CLR_CONTENT_DB_LINE_DARK;
|
||||
Canvas->MoveTo( PIC_RIGHT, lineStart-1 );
|
||||
Canvas->LineTo( Width-LEFT_RIGHT, lineStart-1 );
|
||||
Canvas->Pen->Color = CLR_CONTENT_DB_LINE_LIGHT;
|
||||
Canvas->MoveTo( PIC_RIGHT, lineStart );
|
||||
Canvas->LineTo( Width-LEFT_RIGHT, lineStart );
|
||||
|
||||
contentStart += contentHeight;
|
||||
}
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user