如何用CB做出类似于QQ界面

无聊的职业生涯 2004-08-19 09:09:39
如何用CB做出类似于QQ界面
...全文
175 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
houing_0123 2004-08-19
  • 打赏
  • 举报
回复
bmp切割实现方法:
首先在窗体上放置一个Timage控件。
然后
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Image1->Picture->LoadFromFile(".\\face.bmp");
Repaint();

register int x,y;
int l,r;
POINT *a;
bool lb,rb;
HRGN WndRgn,TempRgn;
if((a=(POINT *)malloc(800*2*(sizeof(POINT))))==NULL)
{
ShowMessage("申请内存失败!");
exit(0);
}
l=0;r=Image1->Height*2-1;
WndRgn=CreateRectRgn(0,0,Image1->Width,Image1->Height);
for(y=0;y<Image1->Height;y++)
{
lb=true;
for(x=0;x<Image1->Width;x++)
if(Image1->Canvas->Pixels[x][y]!=clWhite)
{
a[l].x=x;
a[l].y=y;
lb=false;
break;
}
if(lb) a[l]=a[l-1];
l++;
rb=true;
for(x=Image1->Width-1;x>=0;x--)
if(Image1->Canvas->Pixels[x][y]!=clWhite)
{
a[r].x=x;
a[r].y=y;
rb=false;
break;
}
if(rb) a[r]=a[r+1];
r--;
}
TempRgn=CreatePolygonRgn(a,Image1->Height*2,ALTERNATE);
CombineRgn(WndRgn,WndRgn,TempRgn,RGN_AND);
DeleteObject(TempRgn);
free(a);
SetWindowRgn(Handle,WndRgn,true);
}
//---------------------------------------------------------------------------
happyct 2004-08-19
  • 打赏
  • 举报
回复
他的用户列表用的是TreeView吧。

滑块的问题我也问过,但没有得到很好的解决方法。自己用图片代替。然后捕获用户列表控件的Paint消息。算出滑块的长度
  • 打赏
  • 举报
回复
谢谢,我是想说不光是界面,界面的问题不大,我是想知道他那个滑块是如何做的,然后呢,那个显示好友了之类,是不是用的ListView
constantine 2004-08-19
  • 打赏
  • 举报
回复
要完全一样难,大概有点模样网上有很多人做,我这里都有,chinabcb也可以下载,
delphi盒子也可以下载
qiuafa 2004-08-19
  • 打赏
  • 举报
回复
xu_xinyu 2004-08-19
  • 打赏
  • 举报
回复
用expressbar这个控件就可以,非常好。
happyct 2004-08-19
  • 打赏
  • 举报
回复
首先,帮我顶一下http://community.csdn.net/Expert/topic/3285/3285816.xml?temp=.6745417

要实现QQ的界面方式,方法有很多。但考虑到2004的圆角,可以用bmp切割的方式来实现
其它的那些控件吗,自己用Timage替换就好了

bmp切割实现方法:
首先在窗体上放置一个Timage控件。
然后
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Image1->Picture->LoadFromFile(".\\face.bmp");
Repaint();

register int x,y;
int l,r;
POINT *a;
bool lb,rb;
HRGN WndRgn,TempRgn;
if((a=(POINT *)malloc(800*2*(sizeof(POINT))))==NULL)
{
ShowMessage("申请内存失败!");
exit(0);
}
l=0;r=Image1->Height*2-1;
WndRgn=CreateRectRgn(0,0,Image1->Width,Image1->Height);
for(y=0;y<Image1->Height;y++)
{
lb=true;
for(x=0;x<Image1->Width;x++)
if(Image1->Canvas->Pixels[x][y]!=clWhite)
{
a[l].x=x;
a[l].y=y;
lb=false;
break;
}
if(lb) a[l]=a[l-1];
l++;
rb=true;
for(x=Image1->Width-1;x>=0;x--)
if(Image1->Canvas->Pixels[x][y]!=clWhite)
{
a[r].x=x;
a[r].y=y;
rb=false;
break;
}
if(rb) a[r]=a[r+1];
r--;
}
TempRgn=CreatePolygonRgn(a,Image1->Height*2,ALTERNATE);
CombineRgn(WndRgn,WndRgn,TempRgn,RGN_AND);
DeleteObject(TempRgn);
free(a);
SetWindowRgn(Handle,WndRgn,true);
}
//---------------------------------------------------------------------------
注意,图片的边框要明显
lidawen 2004-08-19
  • 打赏
  • 举报
回复
up

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧