怎样做字体的淡入淡出的效果

watercelery 2003-08-22 01:59:17
我要实现字体滚动出现,最好做出淡入淡出的效果,该怎么写!
...全文
142 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
真如实观 2003-08-23
  • 打赏
  • 举报
回复
移动一张位图。
jiangchun_xn 2003-08-23
  • 打赏
  • 举报
回复
RGB颜色按比例的递增量缩小,可以模拟这种效果。(相当于改变调色版)
xizhouhawk 2003-08-23
  • 打赏
  • 举报
回复
试试设置alpha属性看看可以不
sun_wyz 2003-08-22
  • 打赏
  • 举报
回复
字体颜色慢慢变成背景色,
timer里面自己写
真如实观 2003-08-22
  • 打赏
  • 举报
回复
在PaintBox上画。
catling00 2003-08-22
  • 打赏
  • 举报
回复
//---------------------------------------------------------------------------
#include <vcl\vcl.h>
#pragma hdrstop
#include "MAINFORM.h"
//---------------------------------------------------------------------------
#pragma resource "*.dfm"
#pragma resource "PICTURES.res"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
// 载入画刷
AnsiString MaskName;
RECT BrushRect; // Windows API变量
BrushRect.left = BrushRect.top = 0;
BrushRect.right= BrushRect.bottom=8;

// 通过循环导入图片
for (int j=0; j<BRUSHCOUNT;j++)
{
MaskName = "BRUSH" + AnsiString(j);
PositiveMasks[j] = new TBrush;
NegativeMasks[j] = new TBrush;

PositiveMasks[j]->Bitmap = new Graphics::TBitmap;
NegativeMasks[j]->Bitmap = new Graphics::TBitmap;
PositiveMasks[j]->Bitmap->LoadFromResourceName((int)HInstance,MaskName);
NegativeMasks[j]->Bitmap->Assign(PositiveMasks[j]->Bitmap);
InvertRect(NegativeMasks[j]->Bitmap->Canvas->Handle, &BrushRect);
}

// 产生Bitmap对象
WorldBitmap = new Graphics::TBitmap;
TextBitmap = new Graphics::TBitmap;
WorkSpaceBitmap = new Graphics::TBitmap;
TempBitmap = new Graphics::TBitmap;

// 从资源文件中导入图片
WorldBitmap ->LoadFromResourceName((int)HInstance,"EARTH");
TextBitmap ->LoadFromResourceName((int)HInstance,"EARTH");
TempBitmap->Width = WorldBitmap->Width; // 设置图像的大小
TempBitmap->Height = WorldBitmap->Height;
WorkSpaceBitmap->Height = WorldBitmap->Height;
WorkSpaceBitmap->Width = WorldBitmap->Width;
WorkSpaceBitmap->Canvas->Draw(0,0,WorldBitmap); // 初始化位图的位置

// 向Bitmap对象中添加文字
TextBitmap->Canvas->Font->Name="Arial";
TextBitmap->Canvas->Font->Size = 60;
TextBitmap->Canvas->Font->Style =
TextBitmap->Canvas->Font->Style<< fsItalic<<fsBold;
TextBitmap->Canvas->Font->Color = clWhite;
SetBkMode(TextBitmap->Canvas->Handle,TRANSPARENT);
TextBitmap->Canvas->TextOut(0,0,"Hello");
TextBitmap->Canvas->Font->Color = clFuchsia;
TextBitmap->Canvas->TextOut(0,
TextBitmap->Canvas->TextHeight("Hello"),
"World");
TextBitmap->Canvas->Refresh(); // 更新对象

// 初始化对象的其他属性
Progress=0;
CurrentEffect = None;
BitmapRect = Rect(0,0,WorldBitmap->Width,WorldBitmap->Height);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
//释放变量
for (int j=0;j<BRUSHCOUNT;j++)
{
delete PositiveMasks[j]->Bitmap;
delete NegativeMasks[j]->Bitmap;
delete PositiveMasks[j];
delete NegativeMasks[j];
}

delete WorldBitmap;
delete TextBitmap;
delete WorkSpaceBitmap;
delete TempBitmap;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FadeTextOutButtonClick(TObject *Sender)
{
//产生淡出效果
if (CurrentEffect == None)
{
FadeTextOutButton->Enabled = false; // 设置按钮的状态
FadeTextInButton ->Enabled = true;
Timer1->Enabled = true; // 激活Timer控件
CurrentEffect = FadeTextOut;
Progress = 0;
ProcessFadeStep(); // 进行循环
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FadeTextInButtonClick(TObject *Sender)
{
//淡入效果
if (CurrentEffect == None)
{
FadeTextInButton ->Enabled = false; // 设置按钮状态
FadeTextOutButton ->Enabled = true;
Timer1->Enabled = true; // 激活Timer控件
CurrentEffect = FadeTextIn;
Progress = 0;
ProcessFadeStep();
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
// 不断循环,产生过渡效果
ProcessFadeStep();
}

void TForm1::ProcessFadeStep(void)
{
// 判断是否设置了过渡效果,如果已经设置了,将其复制到画布上
// 重置变量,释放Timer控件
if (Progress == BRUSHCOUNT)
{
WorkSpaceBitmap->Canvas->CopyMode=cmSrcCopy;
if(CurrentEffect == FadeTextOut)
WorkSpaceBitmap->Canvas->Draw(0,0,WorldBitmap);
else
WorkSpaceBitmap->Canvas->Draw(0,0,TextBitmap);
CurrentEffect = None;
Progress = 0;
Timer1->Enabled = false;
}
else
{
// 产生过渡效果
WorkSpaceBitmap->Canvas->Brush = PositiveMasks[Progress];
WorkSpaceBitmap->Canvas->CopyMode=0xA000C9; // DEST = DEST & BRUSH
WorkSpaceBitmap->Canvas->Draw(0,0,WorkSpaceBitmap);

TempBitmap->Canvas->Brush = NegativeMasks[Progress];
if(CurrentEffect == FadeTextOut)
{
TempBitmap->Canvas->CopyMode=cmMergeCopy; // DEST = SRC & BRUSH
TempBitmap->Canvas->Draw(0,0,WorldBitmap);
}
else
{
TempBitmap->Canvas->CopyMode = cmSrcCopy; // DEST = SRC
TempBitmap->Canvas->Draw(0,0,TextBitmap);
TempBitmap->Canvas->CopyMode=0xA000C9; // DEST = DEST & BRUSH.
TempBitmap->Canvas->Draw(0,0,TempBitmap);
}

WorkSpaceBitmap->Canvas->CopyMode=cmSrcPaint; // DEST = SRC | DEST
WorkSpaceBitmap->Canvas->Draw(0,0,TempBitmap);
Progress++; // update progress
}
PaintBox1->Canvas->Draw(0,0,WorkSpaceBitmap); // move pixels to screen
}


//---------------------------------------------------------------------------
void __fastcall TForm1::PaintBox1Paint(TObject *Sender)
{
//重新绘制PaintBox对象中的图像
PaintBox1->Canvas->Draw(0,0,WorkSpaceBitmap);
}
//--------------
catling00 2003-08-22
  • 打赏
  • 举报
回复
淡入淡出哪?
Iamsnowgirl 2003-08-22
  • 打赏
  • 举报
回复
在窗体上加入一个panel控件,在panel上添加一个label,然后添加一个定时器,在form的create事件里写:
label1->caption="滚动字模";
在timer的ontimer事件中写:
lavel1->top=label1->top-1;
if(label1->top<(-label1->width-30))
label1->top=panel1->height;

13,825

社区成员

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

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