C++BUILDER中一些实现界面效果的技巧

用 C++Builder 建立自己的 Web 浏览器  ---- 用够了IE和NETCAPE的朋友,有没有想过也编制一个自己的浏览器呢?用C++BUILDE使得你能够方便高效的创建自己的INTERNET程序.由于C++BUILDER的基本语言是C++,所以它几乎可以做任何事情,通过C++BUILDER的组件设置,你可以象其他应用程序一样建立INTERNET应用,意味着你可以扩展这些组件来增强他们的功能,如果需要的话,它也可以处理低水平的API细节 阅读详情

 以下源码是快速创建不规则窗体的,还可以移动。
file://------------------------------------------------------------------------
file://Unit1.h
#ifndef Unit1H
#define Unit1H
file://------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>
#include <Graphics.hpp>
#include <Menus.hpp>
#include <Dialogs.hpp>
#include <ExtDlgs.hpp>
file://---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
        TImage *Image1;
        TPopupMenu *PopupMenu1;
        TMenuItem *Exit1;
        TOpenPictureDialog *OpenPictureDialog1;
        TMenuItem *Open1;
        void __fastcall Exit1Click(TObject *Sender);
        void __fastcall FormCreate(TObject *Sender);
        void __fastcall Image1MouseDown(TObject *Sender,
          TMouseButton Button, TShiftState Shift, int X, int Y);
        void __fastcall Open1Click(TObject *Sender);
private:    // User declarations
        void __fastcall BmpToRgn();
public:        // User declarations
        __fastcall TForm1(TComponent* Owner);
};
file://---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
file://---------------------------------------------------------------------------
#endif

file://unit1.cpp
file://---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
file://---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
file://---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
file://---------------------------------------------------------------------------
void __fastcall TForm1::Exit1Click(TObject *Sender)
{
  Close();
}
file://---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
BmpToRgn();
}
file://---------------------------------------------------------------------------
void __fastcall TForm1::Image1MouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
if(Button == mbLeft)
        {
                ReleaseCapture();
                Perform(WM_NCLBUTTONDOWN, HTCAPTION, 0);
        }
}
file://---------------------------------------------------------------------------
void __fastcall TForm1::BmpToRgn()
{
Image1->AutoSize=true;
Form1->AutoSize=true;
Form1->BorderStyle=bsNone;
TColor ColorKey=Image1->Canvas->Pixels[0][0];
int x,y;
int l,r;
POINT *a;
bool lb,rb;
HRGN WndRgn,TempRgn;
if((a=(POINT *)malloc(Width*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+1;x++)
    if(Image1->Canvas->Pixels[x][y]!=ColorKey)
    {
      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;x>=0;x--)
    if(Image1->Canvas->Pixels[x][y]!=ColorKey)
      {
        a[r].x=x;
        a[r].y=y;
        rb=false;
        break;
      }
  if(rb) a[r]=a[r+1];
  r--;
}
r=Image1->Height*2-1;
for(y=0;y<Image1->Height-1;y++)
{
  for(x=a[y].x;x<=a[r].x;x++)
    if(Image1->Canvas->Pixels[x][y]==ColorKey)
    {
      TempRgn=CreateRectRgn(x,y,x+1,y+1);
      CombineRgn(WndRgn,WndRgn,TempRgn,RGN_XOR);
      DeleteObject(TempRgn);
    }
  r--;
}
file://TempRgn=CreatePolygonRgn(a,Image1->Height*2,ALTERNATE);
TempRgn=CreatePolygonRgn(a,Image1->Height*2,WINDING);
CombineRgn(WndRgn,WndRgn,TempRgn,RGN_AND);
DeleteObject(TempRgn);
delete a;
SetWindowRgn(Handle,WndRgn,true);
}
void __fastcall TForm1::Open1Click(TObject *Sender)
{
  if(OpenPictureDialog1->Execute())
  {
      Image1->Picture->LoadFromFile(OpenPictureDialog1->FileName);
      BmpToRgn();
  }
}
file://---------------------------------------------------------------------------
对啦,图片的背景色要相同。
图片在IMAGE1的属性里加,不是在运行期通过LoadFromFile()加的。。
file://--------------------(一)为窗体背景增加渐变色(蓝)---------------
void __fastcall TForm1::FormPaint(省略)
{
    AnsiString ww;int bb;
    ww=AnsiString(Form1->Width/256);
    TRect MyRect;
    MyRect.left=0;
    for(bb=0;bb<255;bb++)
    {
        Form1->Canvas->Brush->Color=(TColor)RGB(0,0,bb);
        MyRect.top=bb*(ww.ToInt());
        MyRect.right=Form1->Width;
        MyRect.bottom=(bb+1)*(ww.ToInt());
        Form1->Canvas->FillRect(MyRect);
    }
}
file://---------------透明窗体--------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  TRect *rctClient,*rctFrame;
  HRGN hClient,hFrame;
  POINT *lpTL,*lpBR;
  rctFrame=new TRect;
  rctClient=new TRect;
  lpTL=new POINT;
  lpBR=new POINT;
  GetWindowRect(Form1->Handle,rctFrame);
  ::GetClientRect(Form1->Handle,rctClient);
  lpTL->x=rctFrame->Left;lpTL->y=rctFrame->Top;
  lpBR->x=rctFrame->Right;lpBR->y=rctFrame->Bottom;
  ::ScreenToClient(Form1->Handle,lpTL);
  ::ScreenToClient(Form1->Handle,lpBR);
  rctFrame->Left=lpTL->x;rctFrame->Top=lpTL->y;
  rctFrame->Right=lpBR->x;rctFrame->Bottom=lpBR->y;
  rctClient->Left=abs(rctFrame->Left);
  rctClient->Top=abs(rctFrame->Top);
  rctClient->Right=rctClient->Right+
                  abs(rctFrame->Left);
  rctClient->Bottom=rctClient->Bottom+
                    abs(rctFrame->Top);
  rctFrame->Right=rctFrame->Right+
                  abs(rctFrame->Left);
  rctFrame->Bottom=rctFrame->Bottom+
                  abs(rctFrame->top);
  rctFrame->Top=0;rctFrame->Left=0;
  hClient=CreateRectRgn(rctClient->Left,rctClient->Top,
                        rctClient->Right,rctClient->Bottom);
  hFrame=CreateRectRgn(rctFrame->left,rctFrame->Top,
                      rctFrame->Right,rctFrame->Bottom);
  CombineRgn(hFrame,hClient,hFrame,RGN_XOR);
  SetWindowRgn(Form1->Handle,hFrame,true);

  delete rctFrame;
  delete rctClient;
  delete lpTL,lpBR;
}

在C++Builder中使用XP视觉样式 在C++Builder中使用XP视觉样式sdragon 2006-12-28 14:53  使用C++Builder的朋友都知道,C++Builder是不支持XP视觉样式的(Vision Style)。以前我为了让自己写的程序看起来漂亮一些,拼命的去自绘控件(我没有使用过第三方界面控件,曾经安装过,但是总是出问题)。感谢C++Builder为我们提供了强大界面的支持,很多VCL控件都支持自绘, 阅读详情

相关推荐

完善Borland C++ Builder可视化控件功能三例

完善Borland C++ Builder可视化控件功能三例王光红笔者在编程中积累了点滴经验,与各位交流,共同提高。一.        让PageControl的TabSheet“弹出来”弹出来的效果用过PageControl的人知道,PageControl之ActivePage的标头较“平坦”,没有“弹出”的立体效果,笔者经过改进达到了“弹出”

wgh166的专栏 2626

C++BUILDER中一些实现界面效果的技巧。。不规则窗体等等。。

以下源码是快速创建不规则窗体的,还可以移动。file://------------------------------------------------------------------------file://Unit1.h#ifndef Unit1H#define Unit1Hfile://------------------------------------------------

SSTS的专栏 1379

用C++BUILDER建立自己的WEB浏览器

用够了IE和NETCAPE的朋友,有没有想过也编制一个自己的浏览器呢?用C++BUILDE使得你能够方便高效的创建自己的INTERNET程序.由于C++BUILDER的基本语言是C++,所以它几乎可以做任何事情,通过C++BUILDER的组件设置,你可以象其他应用程序一样建立INTERNET应用,意味着你可以扩展这些组件来增强他们的功能,如果需要的话,它也可以处理低水平的API细节

shiningstar的专栏 2188

C++ builder基础

C++ builder 简介 C++ Builder是由Borland公司推出的一款可视化集成开发工具。C++ Builder具有快速的可视化开发环境:只要简单地把控件(Component)拖到窗体(Form)上,定义一下它的属性,设置一下它的外观,就可以快速地建立应用程序界面。 Inprise(原Borland)公司推出的Turbo C、Turbo C++ 、Borland C++ 以及Borland C++ Builder,无不是 C/C++ 编程者所钟爱的编程工具,而且每一个都称得上经典之作,Delp

weixin_43820463的博客 9568

C++ builder里写一个渐变条

1. 原理 先在photoshop中, 画一个渐变条, 例如300*20 pixels, 存成bmp 图1: 渐变条的效果 在C++ BUILDER6中, 我们放1个TPanel做我们进度条的容器, 放2个Image控件,都load进刚才那个渐变的图片 原理是: 将Image1 设为TPanel一样的大小一样的位置, 将image2平行排在TPanel左边恰好相接, 然后设一个tim

小桥加加的IT博客 1017

C++Builder高级GUI界面特效开发实战百例

C++Builder由Embarcadero推出,是一款基于Clang编译器的高性能IDE,支持原生Windows应用开发。其核心优势在于可视化设计界面与快速编译链接能力的深度融合。通过拖放式窗体设计器,开发者可直观构建用户界面,同时后台自动生成符合VCL规范的C++代码。IDE内置项目管理器、对象查看器、调试器及CPU探查工具,形成完整开发生态链。// 示例:一个最简VCL窗体应用程序入口#include "MainForm.h" // 主窗体头文件try {

weixin_42609225的博客 939

c++ builder 设置右击弹出菜单

1、需要设置的属性:  PopupMenu2、添加一个TPopupMenu 控件  3、设置菜单点击消息4、设置需要右击弹出菜单控件的PopupMenu属性为 PopupMenuRichEdit效果图:

wumingzcj的专栏 1747

C++Builder中实现直方图绘制的完整指南

直方图是一种统计报告图,用于展示数据频率的分布情况。通过将数据范围分段为一系列连续的区间(称为“箱”或“柱”),每个箱包含一定数量的数据点,其高度表示落在该区间的点的数目。C++Builder是Borland公司推出的一款C++集成开发环境,其操作界面直观、功能强大,并且对RAD(快速应用开发)支持良好。对于习惯了Visual Studio的开发者来说,C++Builder的操作界面设计也非常容易上手。TCanvas类包含众多属性和方法,这里将介绍一些常用的功能:Pixels[]

weixin_36197669的博客 1150

C++builder中简易计算器的界面设计

下面来介绍一下如何在C++builder中设计一个简易的计算器界面,并实现简单的数学计算,具体步骤如下: 1、首先打开C++builder6.0软件(也可以是高级版本,但我一般习惯用6.0版本的,这个看个人喜欢吧),如图所示: 2、接下来在其主窗体Form1中加入下列模块,其中button按钮共16个,一个edit组件,一个panel组件,然后我们单击该组件在属性中分别修改其名字(capt...

跑得动就不要歇着 5768

C++ Builder实现图片透明水印添加教程

C++ Builder是由Borland公司推出的集成开发环境(IDE),它针对Windows平台的软件开发进行了优化。它最开始是作为一个RAD(Rapid Application Development,快速应用程序开发)工具推出的,最初版本发布于1997年,名为Inprise C++ Builder。C++ Builder在早期版本中就支持可视化组件,这使得开发人员能够快速地设计用户界面并实现功能。

weixin_34547628的博客 689

C++ Builder实现自定义图像裁剪功能

C++ Builder是一种集成开发环境(IDE),它允许开发者使用C++语言进行高效的应用程序开发。由于其出色的可视化设计、组件库以及快速编译器,C++ Builder成为了诸多专业开发者在进行复杂软件系统开发时的首选工具。C++ Builder由Embarcadero Technologies开发,其背后继承了Borland公司的技术积累。自推出以来,它一直紧随时代技术的进步,支持最新的C++标准,帮助开发者在保证代码质量的同时,还能快速响应市场需求。

weixin_35987118的博客 705

(01)uniGUI for C++ builder下手机登录窗口的布局与设计

(中行雷威2019.2.17,2019.2.21修改增加背景图) (同一个世界,同一个梦想,交流学习C++Builder XE10,传承c++builder的魅力!欢迎各地朋友加入我的QQ群484979943,进群密码“BCB”,同时也请将该群号广为宣传,希望能够广集各方高手,共同进步。如需下载开发工具及源代码请加入我的QQ...

路在脚下 3235

AD创建属于自己的元件库(详细)

我今天开始学习AD2022,但是我想自己创建属于自己的元件库,但是奈何找了好多教程就是随便几句话就把我打发走了,弄了一天都没搞定(也许是我比较菜),所以现在乱懂了,自己写一个属于我们自己小白的教程,希望有用吧哈哈我比较偷懒,直接使用嘉立创上画好的元件导入,和我们自己创建自己画的步骤其实都一样。

qq_33591173的博客 2万+

C++ Builder 界面开发

C++ Builder 6.0 界面实例开发实例1 界面图案演示实例2 创建标题栏在左边的窗口界面实例3 创建超级连接界面实例4 创建不规则窗口界面实例5 创建可扩展对话框界面实例6 创建NEO Skin 窗口界面实例7 创建Windows2000 透明窗口界面实例8 创建自画弹出式菜单界面实例9 创建自画主菜单界面实例10 创建自画窗口背景界面实例1 界面图案演示实例目标本实例作来本

xioahw的专栏 6536

新入手的Atmel-ICE产品说明

【一句话自我介绍】 我是Atmel最新推出的功能强大的调试编程工具,适用于Atmel ARM® Cortex®-M的Atmel SAM和AVR® 系列芯片。 【我支持的软件】 完美支持Atmel Studio 6.2以上版本直接支持ICC8AVR以上版本支持烧录ICCAVR、CVAVR、IAR等生成的HEX文件 【我支持的器件】 支持AVR 32-bit MCUs的JTA

kaloha3的专栏 1万+

【校招】SHL 的 General Ability (GA, 通用能力测试)

SHL 的 General Ability (GA, 通用能力测试) 文章目录SHL 的 General Ability (GA, 通用能力测试)1、归纳推理题1.1 圈圈线条推理1.2 图形颜色位置推理1.3 箭头指向推理2. 数字推理题攻略3. 语言推理题 1、归纳推理题   归纳推理题我把它总结为三种类型:圈圈线条推理;图形颜色位置推理;箭头指向推理。 1.1 圈圈线条推理   你别看这个题目看起来很复杂,其实很简单,而且这个题型的题目背后原理都一样!我把我的 tips 偷偷分享给你们嘿嘿~先从 A

Sunnyside_ 2万+

用c++ builder 创建具有吸附效果的窗口

在许多程序中,窗口可以被拖放到另一个窗口中,并溶合为一体,例如c++ builder中的Class Explorer与其它窗口就是典型一例,在c++ builder中,这种特性被称为"窗口吸附"。在bcb中的许多组件都具有与"吸附"功能相关的属性,例如:DockSite属性、UseDockManage属性,以及DragKing属性,它的属性可以设置为dkDock。如果将这些属性值简单设置一下,窗口

mamingchen的专栏 3622

PADS VX2.4差分对设置避坑指南:常见错误与解决方案

本文深度解析了在PADS VX2.4中进行高速PCB设计时,差分对设置的核心要点与常见陷阱。针对Layout规则设置、Router布线实战中的阻抗控制、线长匹配等关键环节,提供了具体的避坑指南和解决方案,帮助工程师确保信号完整性,提升设计质量。

weixin_29216049的博客 359

用C++ Builder实现图像的特技显示

 在网页、软件和游戏中,我们经常可以看到图像的各种特技显示,如中心扩散、百叶窗帘、右下推出等,这种动感图像显示,往往给人一种赏心悦目的感觉,给我们的应用程序增加了一些美感。在C++ Builder中,我们可以很容易地实现这些功能。下面以一个具体的例子,介绍实现中心扩散和百叶窗帘两种显示技巧,并说明在C++ Builder中处理图像的基本方法。   在C++ Builder中新建一个工程,然后在窗体

1306

osgEarth加载大疆数据

【代码】osgEarth加载大疆数据。

weixin_44769745的博客 307

【报错解决】OpenClaw 报错 `openclaw: command not found`:全局命令未加入系统 PATH 的深度排查与修复指南

在国产AI工具链开发中,OpenClaw作为关键命令行工具常出现command not found报错。本文深度分析该问题的根源——Linux环境变量PATH未包含用户级安装目录(~/.local/bin)。通过四种解决方案(临时PATH修改、永久配置、软链接、虚拟环境处理)和排错Checklist,揭示"命令存在却找不到"的本质是路径配置问题,特别适用于Docker/国产Linux/非root环境。文中强调理解Linux工具链机制对国产AI开发的重要性,并指出这是开发者掌握环境

博客 5382

C++ Builder中制作图片边缘模糊效果的几种方法

制作图片边缘模糊效果,同时避免Cannot create a texture for DirecterD2D和OutOfmemory。

JoeJiao 1545

redhawk:avgTW maxTW minTW minWC的区别

分析dynamic ir drop报告时会遇到这几个值,avgTW maxTW minTW minWC,如下图。我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?

m0_61544122的博客 691

c++builder编译器使用技巧大收集!

 曾经有一个人跟我说过,一个合格的软件开发人员,必须至少满足以下三点: 1.熟练的一门以上开发语言。 2.熟知软件工程相关的知识。 3.熟练一个软件开发平台。 第一条是我们一般讨论最多的,这里就不做更多说明了。第二条是需要一定的经验积累的,我们暂且不谈。第三条是往往被忽视的。 我想问问各位,各位对自己所用的c++builder环境的熟悉程度能够达到多少?80%的功能都熟悉?70%?60%?开发环境

zuojianyou的专栏 1083

基于共识的捆绑算法CBBA在多无人机多任务调度中的实现

在捆绑过程中,每个无人机根据自己的任务清单和其他无人机的任务清单,确定一个被称为“束”的集合。通过合理的任务分配和无人机协作,CBBA算法能够实现最优的任务调度,提高了多无人机系统的效率和执行能力。在每一轮迭代中,无人机根据自己的当前任务和位置信息将任务清单发送给其他无人机,并接收其他无人机发送过来的任务清单。通过比较其他无人机的任务清单和自身的任务清单,每个无人机可以更新自己的任务分配情况。在这一步中,每个无人机根据自己选择的新任务,更新自身的任务清单,并将更新后的清单发送给其他无人机。

持续更新 1155

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

上一篇: BCB实现MDI程序背景图
下一篇: 用C++ Builder实现图像的特技显示
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值