这个控件怎么来写?妈的这方面就不能象vc那样爽吗??

pp616 2002-07-04 04:30:24
兄弟需要写这个一个控件
要求1:可以做为别的空间的容器。
2:要有Transparent属性,可以显示它的容器的背景图。

ToolBar已经实现这个功能。但是放什么控件在上面都顶着头,很不爽。怎么去改?vcl又不支持多继承。看过了前面的帖子说可以用聚合来做。不过手头没有资料。哪位兄弟做过这方面的东西,或是有相关资料的就帮老弟我一把吧
...全文
22 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
bcb_fans 2002-07-05
  • 打赏
  • 举报
回复
1、直接把一个TExtPanel放到Form上面,设置属性Transparent为True.

2、再把一个TImage控件也放到TForm上,给它指定图像

3、在Form的OnPaint事件中编码:

this->Canvas->StretchDraw(TRect(0,0,this->Width,this-
>Height),Image1->Picture->Bitmap);

就这么简单。
pp616 2002-07-05
  • 打赏
  • 举报
回复
我看到你的图了。但是怎么用啊。在我这不行啊。
我把Transparent设置成true还是不行啊??
bcb_fans 2002-07-05
  • 打赏
  • 举报
回复
已发了一幅截图,注意收.
bcb_fans 2002-07-05
  • 打赏
  • 举报
回复
那应该可以呀!!! 直接把TExtPanel的Transparent属性设置为True不就可以了.

要不我给你发一幅截图???
hansonhx 2002-07-05
  • 打赏
  • 举报
回复
@_@
pp616 2002-07-05
  • 打赏
  • 举报
回复
是啊。要是能看多重继承的话就简单了。可惜VCL没这血统
bcb_fans 2002-07-05
  • 打赏
  • 举报
回复
的确如此,得继续升级,不过看来难度好大!!!!!!
pp616 2002-07-05
  • 打赏
  • 举报
回复
我给窗体加背景是这么加的:
Graphics::TBitmap *Bitmap1 = new Graphics::TBitmap();
Bitmap1->LoadFromFile("c:\\sky.bmp");
Form1->Brush->Bitmap=Bitmap1;

并非onPaint事件中给窗体加背景。您的控件在这种情况下就无能为力了。
pp616 2002-07-05
  • 打赏
  • 举报
回复
哎??给分的那个让我填密码的框子怎么没了???
我按管理也没用。csdn又出问题了??
pp616 2002-07-05
  • 打赏
  • 举报
回复
谢谢 BCB_FANS(四大名捕之追杀令) & cker(〖烟波浩淼三千里、人鬼殊途五百年〗) !!
pp616 2002-07-05
  • 打赏
  • 举报
回复
啊。谢谢你了。问题解决了。该给你分了。
HearMe 2002-07-05
  • 打赏
  • 举报
回复
gz
bcb_fans 2002-07-05
  • 打赏
  • 举报
回复
To: pp616(傻小子)

嘿嘿,只采用一些技巧就可以实现你的要求了!!!!!!

Graphics::TBitmap *Bitmap1 = new Graphics::TBitmap();
Bitmap1->LoadFromFile("c:\\sky.bmp");
Form1->Brush->Bitmap=Bitmap1;

//添加语句,让控件重新采集背景图像
ExtPanel1->NeedRerenderBitmap=true;

我试过了,可以彻底透明了。
pp616 2002-07-04
  • 打赏
  • 举报
回复
to:BCB_FANS(四大名捕之追杀令)
你的那个控件如果在ExtPanel1上放ExtPanel1是可以的。
但是如果我的Form上有背景。我需要能放一个ExtPanel在Form上。它能让Form 的背景透国它显示出来。或是别的什么容器。并非只局限于在ExtPanel上放ExtPanel。

to:cker(〖烟波浩淼三千里、人鬼殊途五百年〗)
谢谢你的代码。不过我在bc6上编译。装上了。但是它没有透明啊。怎么让它透明?
  • 打赏
  • 举报
回复
#include <vcl.h>

#pragma hdrstop

#include "TransContainer.h"
#pragma package(smart_init)
//---------------------------------------------------------------------------
// ValidCtrCheck is used to assure that the components created do not have
// any pure virtual functions.
//

static inline void ValidCtrCheck(TTransContainer *)
{
new TTransContainer(NULL);
}
//---------------------------------------------------------------------------
__fastcall TTransContainer::TTransContainer(TComponent* Owner)
: TCustomControl(Owner)
{
Width = 180;
Height = 60;
}
//---------------------------------------------------------------------------
void __fastcall TTransContainer::CreateParams(TCreateParams& Params)
{
TCustomControl::CreateParams(Params);
Params.ExStyle += WS_EX_TRANSPARENT;
ControlStyle = ControlStyle >> csOpaque << csAcceptsControls;
}
//---------------------------------------------------------------------------
void __fastcall TTransContainer::SetBorder(bool value)
{
if (value != FBorder)
{
FBorder = value;
}
Invalidate();
}
//---------------------------------------------------------------------------
void __fastcall TTransContainer::Paint()
{
if ( FBorder || ComponentState.Contains(csDesigning))
{
Canvas->Brush->Color = clBtnShadow;
Canvas->FrameRect(ClientRect);
}
}
//---------------------------------------------------------------------------
namespace Transcontainer
{
void __fastcall PACKAGE Register()
{
TComponentClass classes[1] = {__classid(TTransContainer)};
RegisterComponents("CKER", classes, 0);
}
}
//---------------------------------------------------------------------------
  • 打赏
  • 举报
回复
class PACKAGE TTransContainer : public TCustomControl
{
private:
bool FBorder;
void __fastcall SetBorder(bool value);
protected:
virtual void __fastcall Paint();
virtual void __fastcall CreateParams(TCreateParams& Params);
public:
__fastcall TTransContainer(TComponent* Owner);
__published:
__property bool Border ={ read = FBorder, write =SetBorder};
__property Visible;
__property Enabled;
__property Align;
__property OnClick;
__property OnMouseDown;
__property OnMouseMove;
__property OnMouseUp;
};
bcb_fans 2002-07-04
  • 打赏
  • 举报
回复
怎么意思??? 也许是我理解错了你的意思.

比如,有一个控件ExtPanel1,设置了背景图像,现在把ExtPanel2放到ExtPanel1上,那ExtPanel2显示"容器的背景图"是不是就是让ExtPanel1上的图像透过ExtPane2显示在ExtPanel2上面? 如果是这样,那TExtPanel可以达到要求,如果不是,请说出更详细的说明.
pp616 2002-07-04
  • 打赏
  • 举报
回复
收到了。问题是她还是不能显示容器的背景图呀。
bcb_fans 2002-07-04
  • 打赏
  • 举报
回复
发了,注意接。
alang_xy 2002-07-04
  • 打赏
  • 举报
回复
alang_yl@163.com
加载更多回复(2)

13,825

社区成员

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

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