随笔分类 -  Delphi

摘要:PNG图标是个好东西,现在系统都支持而且工具软件都能很方便生成(包括PS),要比做Icon方便很多。因此理所当然的现在项目图标PNG已经霸占了ICON的霸主地位。 项目功能比较多的时候,就会有无数的图标资源。现做的项目功能图标单16x16规格已经有200个之多~~,一个功能一个PNG图标,散落在目... 阅读全文
posted @ 2014-09-27 00:27 cmacro 阅读(4571) 评论(4) 推荐(0)
摘要:自定义皮肤很方便,基础开发的工作也是很大的。不过还好一般产品真正需要开发的并不是很多。现在比较漂亮的界面产品都会有个大大的工具条。 Toolbar工具条实现皮肤的方法还是可以使用Form的处理方案。每当重复写相同东西的时候,有时会感觉无聊。所以想简单实现个轻量级的,依葫芦画瓢进行减肥。 完成后大致的 阅读全文
posted @ 2014-09-25 11:02 cmacro 阅读(3278) 评论(0) 推荐(0)
摘要:到第四部分Delphi XE3的代码能基本完成窗体界面的绘制。窗口中的其他控件的处理方法也是相同的,截获消息处理消息。 问题这个编译出来的个头可不小。Release版本竟然2.43M,完全是个胖子。系统中应该加入了大量基础代码(如泛型之类),用Delphi7编译出来应该能小一截。 使用默认Relea 阅读全文
posted @ 2014-09-22 22:27 cmacro 阅读(3163) 评论(3) 推荐(3)
摘要:前面做的工作就是想在标题区域增加快速工具条。前续的基础工作完成,想要在标题区域增加特殊区域都非常方便。只要在绘制时控制自定义区域需要占用标题区域多少空间,然后直接在所占位置绘制。做这个事情前,稍微把代码规整了下。所以界面皮肤处理放到一个单元中。 主要处理步骤 1、划出一个新区域(整个工具条作为一个区 阅读全文
posted @ 2014-09-17 22:18 cmacro 阅读(3686) 评论(6) 推荐(2)
摘要:窗体边框基本的绘制和控制完成,在第二篇中主要遗留的问题。 标题区域图标和按钮没绘制 缩放时客户区显示有问题 解决完下面的问题,皮肤处理基本完整。大致的效果GIF GIF中TShape的颜色表现有些问题,实际是正常的。 绘制标题区域内容 标题区域主要考虑窗体是否在最大化状态,最大化后实际的标题绘制区域 阅读全文
posted @ 2014-09-11 23:33 cmacro 阅读(6408) 评论(7) 推荐(4)
摘要:第一个实现了基本处理。窗体边框的宽度有些肥大,需要进行瘦身。 实现: 1、改变外框线宽度 (WM_NCCALCSIZE) 2、改变外框样式 (WM_WINDOWPOSCHANGING) 通过 WM_NCCALCSIZE 消息可以实现目的。 窗体的四个角的表现样式可以看出是XP的界面轮廓。倒角的幅度感 阅读全文
posted @ 2014-09-06 01:38 cmacro 阅读(5812) 评论(0) 推荐(4)
摘要:现在皮肤控件也很多,但每次装一堆控件,使用又繁琐。稍微研究一下内部机制,还是比较简单的。 主要会使用到下面几个消息 第一步直接覆盖WM_NCPAINT 消息进行外边框绘制。 会发现有2个问题: 1、点击右上角的系统按钮区域会出现系统按钮 2、当切换程序的时候窗体会恢复默认样式。 需要处理WM_NCA 阅读全文
posted @ 2014-09-02 17:51 cmacro 阅读(4357) 评论(0) 推荐(2)
摘要:procedure DrawBorder(Handle: THandle; ADC: HDC);var R: TRect; Canvas: TCanvas; P: TPoint;begin Canvas := TCanvas.Create; Canvas.Handle := ADC; P... 阅读全文
posted @ 2014-08-26 16:17 cmacro 阅读(660) 评论(0) 推荐(0)
摘要:简单实现一个可视控件TMyControl = class(TCustomControl)end; 会发现连续改变尺寸(缩放窗口)时,创建在TMyControl这个控件的子控件出现闪烁问题。其实是被大量重绘导致问题。解决问题的方法,当然是减少重绘。有2中情况会出现重绘(除自己要求重绘)父窗体重绘,要... 阅读全文
posted @ 2014-05-29 14:00 cmacro 阅读(1033) 评论(0) 推荐(0)
摘要:String能自动释放,在进行内存拷贝时需要进行手动释放。可以直接调用Finalize手工释放如:TGraphicHideTab 记录中声明的Caption:stringTGraphicHideTab = record Image:Integer; Data:Integer; Size:Integer; /// 绘制时使用的尺寸 Caption:string; /// = 0) and (AIndex < FCount) then begin Finalize(FItems[AIndex]); // <-- 手工释放Record中... 阅读全文
posted @ 2014-03-14 16:10 cmacro 阅读(1061) 评论(0) 推荐(0)
摘要:Embarcadero 做了个好事。工程组可以直接使用 MSBuild 进行编译,让发布更简单。在Bin目录中 rsvars.bat 用于设置编译的环境变量,结合使用就可以顺利进行编译。call rsvars.batmsbuild MyGroup.groupproj /t:Clean;Build /p:Config=Debug就上面2句就解决工程编译和发布。 阅读全文
posted @ 2013-10-31 11:41 cmacro 阅读(477) 评论(0) 推荐(0)
摘要:BOM模式下编码,文件开头定义编码值UTF 8(65001)0xEF 0xBB 0xBF 阅读全文
posted @ 2013-05-28 23:21 cmacro 阅读(260) 评论(0) 推荐(0)
摘要:浮动工具条应该都不会陌生。MS Office Word 、Excel中都有,只要你选中内容就会出现透明淡淡的工具条。鼠标移动到上面就会显示。要实现浮动效果只要把 ParentHandle = 0 系统就会把控件浮出显示,但效果不好,系统任务条上会出现多余的东西,程序焦点会被显示的控件夺走。解决这个问题,需要系统的API提供了几个样式扩展参数。WS_EX_TOOLWINDOW 这个木,像浮动工具条一样一样样的。WS_EX_APPWINDOW 控件浮出来后会在系统工具条上显示出来,作为工具条这个肯定是不应该出现的。WS_EX_NOACTIVATE 防止主界面的Active被干掉,保证你界面的Foc 阅读全文
posted @ 2013-05-25 14:04 cmacro 阅读(1107) 评论(0) 推荐(0)
摘要: AQtime是一个在性能分析和资源调试中非常好的工具软件。不用修改任何代码,就能直接进行分析。丰富的分析方法,能非常轻松的搞定32位和64位应用程序性能问题、资源和内存泄漏。详细的报告不仅仅能告诉你性能的瓶颈或内存泄漏,还能知道那些模块、类或代码导致的问题,能快速定位问题或错误进行修正。 阅读全文
posted @ 2013-05-12 11:07 cmacro 阅读(3073) 评论(3) 推荐(2)
摘要: 不管在那个开发团队中每个人的编写风格往往是千差万别能力也有高低,如何让别人快速看懂自己的代码维护你的代码。尽量避免不必要的简单错误,为编写代码作一定的约束是必不可少的。 如果你说我一个人不需要规范,其实不然。个人的代码风格能看出你的实际能力。犹如写文章一样杂乱有章,别人看都不愿意看,再精彩的故事也没用。日后自己维护也会头大。 因此有一份简单的代码编写约束是非常有必要的,不仅能提高可读性而且能提高代码质量。 阅读全文
posted @ 2013-05-08 14:13 cmacro 阅读(802) 评论(0) 推荐(0)
摘要:查看内存泄漏ReportMemoryLeaksOnShutdown := True;替换BorlandMM// 放在工程的第一行SimpleShareMem 阅读全文
posted @ 2013-03-26 16:42 cmacro 阅读(464) 评论(0) 推荐(0)
摘要:界面在可配置的情况下需要读写配置文件,VCL提供了一种方式 TReader 和 TWriter 方式保存界面资源。object Form1: TForm1 Left = 0 Top = 0 Caption = 'Form1' ... object lbl1: TLabel Left = 200 Top = 152 ... end object btn1: TButton Left = 184 ... endend直接存成文本格式资源文件,只要是对象继承于TPersistent所有属性字段都能正常被初始化。同时他内部的子对象通过嵌套方式持久化。基于这... 阅读全文
posted @ 2012-12-06 14:29 cmacro 阅读(847) 评论(0) 推荐(0)
摘要:WS_CLIPCHILDREN,使得父窗体在绘制时留出其上的子窗体的位置不去画它,而那片区域留着子窗体去画。WS_CLIPSIBLINGS,必须用于子窗体,使得该子窗体在收到WM_PAINT时同时令其共父的诸多子窗体(MSDN讲必须不在该区域,即不与之重叠)也会被PAINT。//下面也是对WS_CLIPSIBLINGS的理解所有的overlapped窗口和popup窗口,都有WS_CLIPSIBLINGS 属性,这些窗口不能在它的sibling窗口上绘图对于child窗口,如果没有这个属性,它能在它的sibling窗口上绘图┌────────┐│ A ││ ││ ┌─────┼───┐│ │ 阅读全文
posted @ 2012-11-26 18:15 cmacro 阅读(4476) 评论(0) 推荐(0)
摘要:测试环境: Win7 + XE2在开发界面控件中,想加个背景,做的漂亮点。当然会考虑主界面加背景,其他控件设置透明就能所有控件都能正常显示背景。自己的控件只要在Create时设置,使用背景和设置透明就OK了ControlStyle := ControlStyle + [csParentBackground] - [csOpaque];就能正常实现透明化。为了方便观察,把TForm的背景设置为clSkyBlue。下面是个简单的不透明控件是显示的状态(背景clSkyBlue),TCustomControl,默认会打开ParentColor,所以颜色和Form的相同(图1) 未设置透明属性的情况的图 阅读全文
posted @ 2012-11-23 15:47 cmacro 阅读(932) 评论(0) 推荐(0)
摘要:VCL中有 TChangeLink 这个对象,用于当ImageList刷新是通知到绑定ImageList的控件进行更新处理。实现控件创建TChangeLink对象注册到ImageList1 // 注册2 Images.RegisterChanges(FImageChangeLink);3 // 注销4 Images.UnRegisterChanges(FImageChangeLink);事例代码procedure TmtCustomSpeedButton.SetImages(Value: TCustomImageList);begin if Value <> FImages the 阅读全文
posted @ 2012-11-22 16:46 cmacro 阅读(410) 评论(2) 推荐(1)