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

paip 提升用户体验-------在C++ Builder 中为Form窗体添加背景图片 阅读详情

以下源码是快速创建不规则窗体的,还可以移动。
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++应用程序界面美化指南 告别c++黑窗口 阅读详情

相关推荐

在C++Builder中使用XP视觉样式

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

sdragon_zero的专栏 1991

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 界面设计与编程实战项目

有人问我:“都2025年了,还学 C++Builder 有意义吗?我想说:每一个长期存活的技术,都有它的不可替代性。C++Builder 的价值在于:✅ 极高的开发效率✅ 稳定可靠的运行表现✅ 成熟的可视化设计体验✅ 对遗留系统的无缝维护能力它也许不适合做抖音、微信这样的互联网产品,但如果你要做一个工厂生产线监控系统、医院 PACS 客户端、银行柜员终端……那么它依然是王者级别的选择。更重要的是,它教会我们一种思维方式:👉。

weixin_42576467的博客 699

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

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

wumingzcj的专栏 1747

fastbin attack快速入门

0x01 fastbin简介 Fastbin包含0x20~0x80大小bin的数组指针,用于快速分配小堆块。fastbin按照单链表结构进行组织,相同大小的bin在同一个链表中,fd指向下一个bin,采用LIFO(Last In First Out)机制。在fastbin中,堆块的inuse标志都为1,处于占用状态,防止chunk释放时进行合并,加快小堆块的分配。 正常fastbin的使用 通过这个简单的案例来了解fastbin的单链表结构,malloc和free的过程。 #include<stdio

abelxu 1571

完整的申请邓白氏编码的流程(手把手教你申请邓白氏编码)

申请公司的苹果开发者账号和企业级的苹果开发者账号时,都会用到邓白氏编码,也就是我们申请苹果开发者账号时需要填写的D-U-N-S Number。     申请这个邓白氏编码是免费的,但是从像华夏邓白氏公司提交申请到可以申请苹果开发者账号来用这个9位的D-U-N-S Number,需要一段时间,我申请得到D-U-N-S Number,用了8个工作日(不算周末哦)

wxw2011014003的博客 9万+

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

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

跑得动就不要歇着 5768

Frida实战:高效dump Android内存中的so文件与修复技巧

本文详细介绍了使用Frida工具dump Android内存中已解密so文件的实战技巧。针对加固应用静态分析失效的痛点,文章提供了从环境搭建、使用frida_dump脚本自动化抓取内存数据,到利用SoFixer工具修复ELF文件结构的完整流程,帮助逆向分析人员高效获取可分析的so文件。

tt34567的博客 527

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

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

1671

手把手教你学Simulink——基于通信协议与标准的场景实例:卫星通信中的网络安全协议(IPSec)仿真

随着卫星通信在国防、金融、应急指挥、能源管网等关键领域的广泛应用,其安全性已成为系统设计的核心要求。然而,卫星链路具有广播特性、长距离传输、地面站分布广等特点,极易遭受窃听、篡改、重放、中间人攻击等网络威胁。传统的“信任链路层安全”已不足以应对现代网络攻击。为此,国际标准组织(如IETF、ETSI、CCSDS)推荐在卫星通信中部署协议,实现端到端的数据机密性、完整性、身份认证和抗重放保护。本文将手把手教你如何在中构建一个符合标准的仿真系统,涵盖从明文传输到加密隧道的完整安全链路建模。本文完整实现了。

MHD0815的博客 149

open3d将某一时间序列下的彩色图和深度图批量转换成点云(python)

必备条件需要3D相机生成的彩色图及深度图,注意要将深度图与彩色图对齐(一般3D相机自带对齐算子),以及3D相机的彩色图内参(相机自带内参获取功能)。有了此彩色图、对齐后的深度图以及相机内参就能使用open3d生成彩色点云了.

吾名招财的博客 315

也说说c++builder中的不规则窗体的实现

发现原来c++ builder6有自己的一些方法可以非常轻易的完成不规则窗体的设计。下面是我的代码:  void __fastcall TForm1::FormCreate(TObject *Sender)  {   Form1->Color=clWhite;   Form1->TransparentColorValue=clWhite;   Form1->TransparentColor=tru

NewLand 1106

网工运维掌握OpenClaw这7大必备技能,自动化运维效率直接起飞

OpenClaw的核心就是它的技能系统。通过官方技能市场(clawhub.ai),你只需一条命令就能安装扩展,让AI代理变成你的“运维副手”。今天我就结合网工运维的真实痛点,精选7项最热门、最实用的OpenClaw技能(基于ClawHub下载量和实际测试),手把手教你安装、使用和进阶玩法。这些技能不是玩具,而是能直接提升运维效率10倍以上的生产力工具!安装后,你的OpenClaw代理就能自动处理Zabbix告警、总结syslog日志、更新Obsidian网络拓扑笔记、甚至通过n8n触发自动修复脚本。

网络技术联盟站 573

智能体系统架构三要素:隔离、集成与治理

智能体系统并非微服务的简单延伸,其核心挑战在于异构认知主体间的意图对齐与可信协作。区别于传统服务间结构化数据交换,智能体交互依赖语义丰富、上下文敏感的推理过程,因而必须构建以‘认知隔离’为前提、‘协议化集成’为手段、‘全生命周期治理’为保障的新型架构范式。该范式支撑跨智能体协作的可验证性、可审计性与可干预性,广泛应用于电商协同决策、金融风控、智能客服等需多智能体联合推理的生产场景。本文深入剖析智能体系统在隔离(防认知污染)、集成(建协作协议栈)、治理(控决策越界)三大维度的真实落地难点与工程解法。

ciya3282的博客 238

Python时间序列:PaddleTS-时间序列分类

评估的指标采用F1,Precision,Recall,PaddleTS已经基于TSDataset实现了这三个指标的计算,直接调用即可。使用内置的API:get_dataset加载BasicMotions数据集。模型训练完成之后,可以对测试集进行预测并评估。模型保存之后,可以加载模型用于新的数据预测。可以将训练完成的模型保存到指定路径。概率预测 可以返回每个分类的概率。安装paddlets。

斌擎科技 1292

基于GA-BP遗传算法优化神经网络的多输入多输出数据预测-Python代码实现

多输入多输出的GA-BP神经网络

2301_80449389的博客 2307

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

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

mamingchen的专栏 3623

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

PopupMenu的学习记录

1.原生组件使用,封装到方法中,调用方法使用 // popup private void showPopup(View view){ // 这里的view代表popupMenu需要依附的view PopupMenu popupMenu = new PopupMenu(this,view); // 获取布局文件 ...

李胜坤的博客 402

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

c语言动态菜单代码,c语言入门之C++BUILDER动态建立菜单及菜单事件

首先新建一个工程文件(File->New Application)。然后在Form1上面建立一个PopupMenu1,一个Button1,一个RichEdit1。在头文Unit1.H的内容,其中黑体是自已加的。#ifndef Unit1H#define Unit1H#include#include#include#include#include#include#includeclass TF...

weixin_39795845的博客 450

c++ builder 学习(1)

c++ builder学习 1 界面设计 为对话框添加背景图片 方法 :在对话框中添加Additional中的image控件,然后找到其picture属性添加图片 按钮: 在c++ builder中按钮有三种TButton,TBitBtn,TSpeedbtn,后两者可以改变其背景图片,方法:点击其glyph属性 树形控件: String str[5]={"朋友","同事","家人",

u010442009的专栏 1417

正确使用 C++Builder组件缩写代码

正确使用 C++Builder组件缩写代码 作者: ccrun整理 ,如转载请保证本文档的完整性,并注明出处。欢迎光临 C++ Builder 研究,http://www.ccrun.com/doc/go.asp?id=573摘自delphi技術手冊泰謝拉  著將資料型態寫在前面有助於以元件分辦你所有要的資料类似于这样:edtInputBox, mmFile, btnCalc;下列

Victor's Blog 1684

图形用户界面(GUI)编程可以学习C++ Builder,架构先进(和C#一样拖控件)

C++ Builder是真正的可视化的开发工具。C++ Builder可以用鼠标拖拉控件加上设置属性轻松地“设计”出一个程序的图形用户界面,利用可视的组件/控件像“搭积木”一样,以“所见即所得”的方式搭建应用程序的界面,这也是C++ Builder这个名字中Builder的概念。这样,只需要用C++语言编写业务逻辑代码,类似于DOS下文本界面编程,只要专注于实现业务逻辑功能就可以了,代码非常简洁。数据的输入和表现,都在图形用户界面,非常直观、易用。这就是RAD开发(Rapid Application Dev

u010165006的博客 8338

C++ Builder 界面开发

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

xioahw的专栏 6536

c++builder常用设置2(背景色)

1、可以这样设置背景颜色

勿忘初心,安得始终 7389

VCL组件之TPanel

TPanel位于Standard组件面板上,也是常用的一种容器控件。面板的一个优点就是放在面板上的组件称为面板的一部分,因此它们与面板一起移动。这在设计阶段很有用。 Panel组件的大部分功能在于其Align属性。例如,想显示标题在窗体上端,更进一步假设想让它在中央,不管用户怎样设置窗口尺寸,只需设置Align属性为alTop及Alignment属性为taCenter,这样标题总是在中央的,就是...

weixin_33817333的博客 292
SSTS
博客等级 码龄26年 1粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值