Delphi控件的使用经验

Delphi数据导入实战:EMS Advanced Data Import控件详解与配置经验 在桌面应用开发中,数据导入是常见的工程需求。许多开发者初期会选择手写代码处理Excel、CSV等文件,但往往面临性能瓶颈、环境依赖和类型转换等棘手问题。Delphi开发者尤为关注如何在VCL应用中高效实现Excel到数据库的批量导入,同时避开OLE/COM带来的稳定性隐患。EMS Advanced Data Import作为一套全配置化的数据导入控件,支持多格式文件解析与多种数据库适配,通过批量提交、事务控制及字段映射等机制,显著提升导入效率并降低代码复杂度。本文结合Rad Studio 12 Athens 阅读详情
一.Delphi中树型控件的使用技巧

  我们都知道,开发者主要用Delphi来开发数据库管理软件,正因如此,

树型控件的使用最好与数据库联系起来。Delphi提供了一个树型控件

TTreeView,可以用来描述复杂的层次关系。

  1.树节点信息的存储和加载

  常用的方法是用树控件的 LoadFromFile和SavetoFile方法,来实现树

控件和文件之间的交互;或用Assign方法实现树控件和DBMemo,也就是和数

据库间的交互。该方法的优点是编程相对简单,缺点是树控件的实际节点数

可能会很大,对于“大树”,每次加载和存储的数据量会加大,将降低速度

,增大系统开销,造成数据冗余。另一种方法,就是只在树上产生“看得见

”的节点,没有专门记录全部树节点结构的文件或数据库字段,而将树节点

结构分散在数据库的每一个记录中。

  具体方法是:创建一个数据库,字段根据实际业务而定,其中必然有一

个字段的信息将在树型控件的节点上显示,另外还要一个字段来保存节点的

惟一标识号,该标识号由长度相等的两部分组成,前段表示当前节点的父节

点号,后段表示当前节点的节点号,此标识号相当于一个“链表”,记录了

树上节点的结构。该方法的优点:用户操作“大树”时,一般不会展开所有

的节点,而只用到有限的一部分,同时只能从树根一层一层地展开,该法只

在树上产生“看得见”的节点,所以,存储和加载“大树”的速度快,数据

量小,系统开销和数据冗余较小。缺点:编程较复杂,但可以结合该方法编

成一个新的树控件,将大大提高编程效率。值得注意的是,ID号必须惟一,

所以在编程中如何合理产生ID尤为重要。

  2.数据库结构示例

  创建一个数据库,为简化程序,我只创建两个数据库字段,定义如下:

  字段名 类型 长度

  Text C 10

  LongID C 6

  LongID字段实际上由两段组成,每一段3位,LongID只能表示1000条记

录。将LongID定义为索引字段,存为c: esttree ree.dbf。编辑该DBF文

件,新建一条记录,Text字段设为TOP,LongID字段设为“000”(3个“0”

前为三个空格)。

  3.创建演示程序

  在Form1上放置TreeView1、Table1、PopupMenu1、Edit1、Edit2。

TreeView1的PopupMenu属性设为PopupMenu1;Table1的DataBaseName属性设

为c: esttree,TableName属性设为tree.dbf,IndexFieldNames属性设为

LongID;为PopupMenu1加选单项Add1和Del1,Caption分别为Add和Del;

Edit1用来输入新节点的Text属性值,Edit2用来输入新节点的3位ID号。存

为c: esttree reeunit.pas和c: esttree esttree.dpr。

  在treeunit.pas的Type关键字后加入一行:Pstr:^string;{Pstr为字符

串指针}

  为Form1的OnCreate事件添加代码:
  procedure TForm1.FormCreate(Sender: TObject);
  var p:Pstr;Node:TTreeNode;
  begin
  with Table1,Treeview1 do
  begin
  open;
  first;
  new(p);{为指针p分配内存}
  p^:=FieldByName(′LongID′).AsString;
  Node:=Items.AddChildObject(nil,FieldByName(′Text′

).AsString,p);
  if HasSubInDbf(Node) then Items.AddChildObject(Node,′ ′

,nil);{有子节点则加一个空子节点}
  end;
  end;

  HasSubInDbf为自定义函数,自变量为Node,检查节点Node有无子节点

,有则返回True,反之返回False,并在TForm1的类定义里加入原型声明(其

它自定义函数的原型也在TForm1的类定义里声明,不另作解释),函数代码

如下:

  function TForm1.HasSubInDbf(Node:TTreeNode):Boolean;
  begin
  with Table1 do
  begin
  Table1.FindNearest([copy(Pstr(Node.Data)^,4,3)+′000′]);
  result:=copy(FieldByName(′LongID′

).AsString,1,3)=copy(Pstr(Node.Data)^,4,3);{如数据库里当前记录的

LongID字段内容的前3位和节点Node的Data的后3位相同,则Node应该有子节

点}
  end;
  end;

  为TreeView1控件的OnDeletion事件添加代码,需要指出的是,不仅调

用Delete方法可以触发OnDeletion事件,而且当树控件本身被释放前,也触

发OnDeletion事件,所以,在此处加入dispose(node.data)会很“安全”:

  procedure TForm1.TreeView1Deletion(Sender: TObject; Node:

TTreeNode);

  begin
  Dispose(Node.Data);{释放节点数据内存}
  end;
  为Add1选单项的OnClick事件添加代码如下:
  procedure TForm1.Add1Click(Sender: TObject);
  var p:pstr;Tmpstr:string;i:integer;
  begin
  try
  StrToInt(Edit2.Text);
  Tmpstr:=Edit2.Text;{注:在实用中,必须用更好的方法来产生ID}
  except;
  ShowMessage(′重新输入Edit2的内容′);
  abort;
  end;
  with TreeView1 do
  begin
  new(p);
  p^:=copy(Pstr(Selected.Data)^,4,3)+TmpStr;
  Items.AddChildObject(Selected,Edit1.Text,p);
  end;
  with Table1 do{ 在数据库里添加记录 }
  begin
  Append;
  FieldByName(′Text′).AsString:=Edit1.text;
  FieldByName(′LongID′).AsString:=p^;
  Post;
  end;
  TmpStr:=inttostr(strtoint(TmpStr)+1);
  for i:=length(TmpStr) to 2 do TmpStr:=′0′+TmpStr;
  Edit2.Text:=TmpStr;
  end;
  为Del1菜单项的OnClick事件添加代码如下:
  procedure TForm1.Del1Click(Sender: TObject);
  var DelList:TStringList;LongID,NSubLongID:string;
  begin
  DelList:=TStringList.create;
  DelList.Sorted:=True;
  DelList.Add(Pstr(TreeView1.Selected.Data)^);
  while DelList.Count>0 do
  begin
  LongID:=DelList.Strings[0];
  DelList.Delete(0);
  Table1.SetKey;
  Table1.FieldByName(′LongID′).AsString:=LongID;
  if Table1.GotoKey then Table1.Delete;
  if HasSubInDbf(TreeView1.Selected) then
  begin
  NSubLongID:=Table1.FieldByName(′LongID′).AsString;
  while (copy(NSubLongID,1,3)=copy(LongID,4,3))and(not

Table1.Eof) do
  begin
  dellist.Add(NSubLongId);
  Table1.Next;
  NSubLongId:=Table1.FieldByName(′LongID′).AsString;
  end;
  end;
  end;
  DelList.Free;
  TreeView1.Items.Delete(TreeView1.Selected);
  end;
  为TreeView1的OnExpanding事件添加代码:
  procedure TForm1.TreeView1Expanding(Sender: TObject; Node:

TTreeNode;
  var AllowExpansion: Boolean);
  var TmpNode:TTreeNode;NSubLongID:String;p:Pstr;bm:TBookMark;
  begin
  with Table1,TreeView1 do
  begin
  Items.BeginUpdate;
  SetKey;
  FieldByName(′LongID′).AsString:=Pstr(Node.Data)^;
  if not GotoKey then Items.Delete(Node)
  else
  begin
  TmpNode:=Node.GetFirstChild;
  if (TmpNode.Text=′ ′)and(TmpNode.Data=nil) then
  begin
  TmpNode.Delete;
  if HasSubInDbf(Node) then
  begin
  NSubLongID:=FieldByName(′LongID′).AsString;
  while (copy(NSubLongID,1,3)=copy(Pstr(Node.Data)^,4,3))and(not

Eof) do
  begin
  new(p);
  p^:=FieldByName(′LongID′).AsString;
  bm:=GetBookMark;
  TmpNode:=Items.AddChildObject(Node,FieldByName(′Text′

).AsString,p);
  if HasSubInDbf(TmpNode) then Items.AddChildObject(TmpNode,′

′,nil);
  GotoBookMark(bm);
  FreeBookMark(bm);
  Next;
  NSubLongId:=FieldByName(′LongID′).AsString;
  end; end; end;
  end;
  Items.EndUpdate;
  end;
  end;

  以上简要谈了谈数据库的树状显示的基本方法,另外,编辑树上节点的

Text属性的同时对数据库进行修改、同一数据库在多用户同时操作时数据库

以及树的一致性、树上节点的拷贝与复制等就不再赘述,读者可自行完善。


  二.IP控件的使用

  在网络程序中,我们常常碰到需要用户输入IP地址的情况。然而Delphi

并没有为我们提供可以用于输入IP串的控件,这样我们只好用Tedit控件(单

行文本框)来接受用户输入的IP串。但是,使用Tedit来输入IP串并不是一个

好主意,因为处理起来非常不便。事实上,在我们的身旁有一个专门用来输

入IP串的Windows控件。IP控件会拒绝非法的IP串(在每个部分只能输入

0..255之间的数字);它让你可以轻松地获取控件中的IP串所对应的IP值(32

位整数),这省去了IP串和IP值之间相互转换的麻烦;此外,你还能限制IP

控件中所能输入的IP的范围。本节向大家介绍如何在我们的Delphi程序中使

用Windows的IP控件。

  Windows中有两个非常重要的动态联结库:commctrl.dll和

comctl32.dll,它们是Windows的自定义控制库(Windows Common Controls)

。自定义控制库中包含了许多常用的Windows控件,如Statusbar,Coolbar

,HotKey等;在Delphi中,这些控件大多数都已被包装成可视化控件了。在

Microsoft推出Internet Explorer 3之后,自定义控制库中新增了一些控件

,其中就包括Windows的IP控件(IP Address edit control)。

  1. 初始化Windows自定义控制库

  Windows提供了两个API函数,InitCommonControls和

InitCommonControlsEx,用来初始化自定义控制库。从名字我们不难看出这

两个API函数的关系:后者是前者的增强。如果你希望在程序中使用IP控件

,你必须用InitCommonControlsEx来完成对自定义控制库以及类的初始化。

函数InitCommonControlsEx的原型如下(Pascal语法):

  ... ...

  创建IP控件

  ... ...

  使用IP控件。 在程序中,我们通过向IP控件发送消息来与它通讯。IP

控件可以响应的消息有以下6个,这些消息及它们的含义,见下表:

  ... ...

  若想要获取IP控件中IP串所对应的IP值,你应该向IP控件发送

IPM_GETADDRESS消息,并且需要把一个32位整数的地址作为SendMessage的

最后一个参数。

  ... ...

  2. IP控件的通知消息

  当IP串被改动后或者输入焦点发生了转移,IP控件就会向它的父窗口发

送通知消息IPN_FIELDCHANGED。在大多数情况下,我们都可以忽略此通知消

息。以下是处理通知消息IPN_FIELDCHANGED的一个示例:

  procedure Tform1.WndProc(var Msg: TMessage);
  var p:PNMHDR;
  begin
  inherited;
  if Msg.Msg=WM_NOTIFY
  then begin
  p:=Pointer(Msg.lParam);
  if p^.code=IPN_FIELDCHANGED
  then begin
  {…
  处理IP控件的IPN_FIELDCHANGED通知消息
  …}
  end;
  end;
  end;


  三.动态生成控件的方法及应用

  1.Delphi中生成控件的两种方法

  (1). Form(表单)设计中生成控件

  在进行Form设计时,直接在控件工具箱选择所需控件,再设置其属性与

响应事件,这种方法比较常见。

  (2).程序中动态生成控件

  有时候,我们需要在程序运行时动态生成控件,这样做有两大优点:一

是可以增加程序的灵活性;二是如果生成控件的多少与程序中间运行结果相

关,显然方法一是无法的实现的,必须用程序中动态生成方法。

  程序中动态生成控件的方法分为三步,首先,定义生成的控件类型,再

用Create函数生成控件,最后对控件的相关属性赋值。以TButton控件为例

,步骤如下:

  a. 定义控件类型

  var

  Button1:TButton;

  b.生成控件

  Button1:=TButton. Create(self);

  Button1.Parent:=Self;

  file://一般将其父控件设置为Self,如果不设置Parent的值,

  则控件不会在屏幕

  file://显示出来

  c.设置其它属性及定义相关事件响应函数,如

Caption,Left,Top,Height,Width,Visible,Enabled,Hint和onClick事件响

应函数等。


  2.动态生成控件方法的应用

  在开发生产调度与管理系统中,需要动态生成排产计划图,以甘特图表

示,应用Shape控件来显示零件的加工状况(每道工序的加工开始时间与结束

时间)是非常适合的。应用Chart控件,对加工设备利用率以三维直方图显示

,非常直观。现分别将在程序中动态生成Shape控件和Chart控件的过程加以

说明。

  (1).动态生成Shape控件显示排产计划图(甘特图)

  procedure TCreateMultiCharts.ProcCreateCharts;
  var
  i,j,Rows,Columns,RowSpace,ChartsHeight:Integer;
  ShapeChart:array of array of TShape;
  begin
  Rows:=16; file://Shape控件数组行数
  Columns:=8; // Shape控件数组列数
  RowSpace:=20; // Shape控件行间距
  ChartsHeight:=20; // Shape控件高度
  SetLength(ShapeChart,Rows,Columns);
  file://设置ShapeChart数组大小
  for i:=0 to Rows do
  for j:=0 to Columns do
  begin
  ShapeChart[i][j]:=TShape.Create(self);
  with ShapeChart[i,j] do
  begin
  Parent:=Self; file://此行必不可少,
  否则Shape控件在屏幕显示不出
  Shape:=stRectangle; // Shape控件形状为矩形
  Top:=45+i*(RowSpace+ChartsHeight);
  Left:=Round(180+Q[i,j].StartTime);
  file://因Q[i,j].StartTime为实数,故需进行四舍五入取整
  Width:=Round(Q[i,j].Value)
  Height:=ChartsHeight;
  Brush.Color:=RandomColor;
  file://自定义函数,说明附后
  Brush.Style:=bsSolid; file://设置填充方式
  Enabled:=True;
  end;
  end;
  end;
  注:
  a.Q为一记录型二维数组,定义如下:
  type
  TempData=Record
  Value:Real;
  StartTime:Real;
  end;
  Q:array of array of TempData
  并且在另一过程已对Q的分量进行赋值。
  b.为了区分不同的零件,Shape以不同颜色显示,此时,调用了函数

RandomColor。该函数为:
  function TCreateMultiCharts.RandomColor;
  var
  red,green,blue:byte;
  begin
  red:=random(255);
  green:=random(255);
  blue:=random(255);
  result:=red or (green shl 8) or (blue shl 16);
  end;
  (2).动态生成Charts控件的ChartSeries组件,显示设备利用率
  procedure TFormMultiMachinesBurthen.
  ShowMachineBurthenCharts;
  var
  i:Integer;
  Burthen:Real;
  SeriesClass:TChartSeriesClass;
  NewSeries:array of TChartSeries;
  begin
  SetLength(NewSeries,CreateMultiCharts.Rows);
  MachinesBurthenCharts.height:=200;
  MachinesBurthenCharts.Width:=550;
  for i:=0 to CreateMultiCharts.Rows do
  begin
  SeriesClass:=TBarSeries; file://设置形状为三维条形图
  NewSeries[i]:=SeriesClass.Create(Self);
  NewSeries[i].ParentChart:=MachinesBurthenCharts;
  NewSeries[i].Clear;
  Burthen:=MachineBurthen[i];
  Burthen:=Round(Burthen*100)/100; file://只取小数点后两位数字
  NewSeries[i].add(Burthen,',NewSeries[i].SeriesColor);
  end;
  end;
  注:

  (a).MachineBurthen[i]为一实型数组,其值为对应设备的利用率,已

在另一函数中计算得到;

  (b). MachinesBurthenCharts为TChart控件,在type段说明。

  3.程序运行结果显示

  (1).动态生成Shape控件,显示零件排产计划图(略)

  (2).动态生成Chart控件的ChartSeries组件,显示设备利用率(略)

BusinessSkinForm v2.28 DELPHI界面控件套件详细指南 本文还有配套的精品资源,点击获取 简介:BusinessSkinForm v2.28是一个为DELPHI开发者专门设计的界面控件包,包含超过100种不同的组件,支持专业外观和自定义皮肤的用户界面设计。控件包极大地提升了DELPHI应用的视觉效果,并允许开发者在设计用户交互时有更多选择。DELPHI作为一种强大的面向对象编程语言,非常适合创建桌面应用。控件包内含丰富的UI元素... 阅读详情

相关推荐

Tchrometabs:深入探索Delphi多标签Chrome控件

在当今的软件应用中,多标签界面已经成为标准功能之一。Tchrometabs控件作为一款模仿现代浏览器Chrome风格的标签控件,为开发者提供了一种快速实现高质量多标签界面的解决方案。本章节旨在简要介绍Tchrometabs控件的基本概念、应用场景和主要特点,为读者提供一个关于该控件的初步了解。Tchrometabs控件是一种Delphi组件,它能够模拟Google Chrome浏览器的标签页功能,允许用户在单个窗口中同时打开多个页面或视图。

weixin_31620365的博客 1214

IP地址控件小技巧

  IP地址控件小技巧 关键字:IP地址控件 一、如何响应EN_CHANGE事件 在控件中提供了IPN_FIELDCHANGED的通知消息,该消息在控件的输入域发生变化的时候发生,一般来说可以满足需求。但是,有的时候,我们希望每当改变一个值的时候就希望知道当前输入的地址,这样能够及时的对输入的情况进行判断,而IPN_FIELDCHANGED消息显然不能提供这种支持。

flyelf的专栏 1287

vc 中IP 件的使用说明msccom

在控件中提供了IPN_FIELDCHANGED的通知消息,该消息在控件的输入域发生变化的时候发生,一般来说可以满足需求。

Delphi New,Getmem,ReallocMem联系与区别

转自博客园http://www.cnblogs.com/jsrgren/archive/2011/10/31/2270353.html procedure New(var P: Pointer);  {为一个指针变量分配内存,会自动计算指针所指数据结构需要空的空间大小} procedure GetMem(var P: Pointer; Size: Integer); {分配一个指定大小的内

找个地方放一下 4649

STC8单片机低功耗延时优化实践:从循环等待到定时唤醒

本文深入探讨了STC8单片机低功耗延时优化的核心方法,即利用掉电唤醒定时器(WKT)替代传统的循环等待,实现从“空转耗电”到“定时唤醒”的转变。通过实战代码演示了如何编写低功耗延时函数,将待机电流从mA级降至μA级,并分析了精度、唤醒时间等关键权衡点,为电池供电的物联网设备提供了有效的续航优化方案。

pea55的博客 326

uniapp运行钉钉小程序

因项目原因,公司需要在钉钉里面开发小程序。之前用uniapp开发过app,H5,小程序。还真没尝试过钉钉小程序,今天就简单的记录下uniapp运行钉钉小程序中的过程。

YL 2919

IP ADDRESS CONTROL-地址控件的使用 MFC

在MFC中地址控件的使用,ipn_fieldchanged 的应用。

JiangHuai_J的专栏 1651

【C语言】程序员筑基功法——《函数栈帧的创建与销毁》

汇编角度带你走进函数栈帧

StackFrame 3665

基于visual c++之windows核心编程代码分析(51)基于匿名管道实现远程控制

  我们知道域名是为了方便记忆而专门建立的一套地址转换系统,要访问一台互联网上的服务器,最终还必须通过IP地址来实现,域名解析就是将域名重新转换为IP地址的过程。一个域名对应一个IP地址,一个IP地址可以对应多个域名;所以多个域名可以同时被解析到一个IP地址。域名解析需要由专门的域名解析服务器(DNS)来完成。   解析过程,比如,一个域名为:www.staspcom,是想看到这个现H...

weixin_30600503的博客 182

Codex 100个真实案例 - 用AI自动生成API测试用例(接口测试全覆盖)

API 测试是保障后端质量的关键环节,但手写测试用例既枯燥又容易遗漏。本案例将展示如何用 Codex 从 Swagger/OpenAPI 规范文档自动生成 pytest 测试用例——包括正常流程测试、边界值测试、异常参数测试、性能压力测试,还能自动生成 Mock 数据和精美的 HTML 测试报告。全程自然语言驱动,让 API 测试覆盖率从 0 飙到 90%+!

yueyeguzhuo的专栏 271

【Bug已解决】Codex CLI 报错 apply_patch 失败:无法应用补丁的解决方案

方案适用场景推荐指数统一换行符规范跨平台协作项目的标准配置⭐⭐⭐⭐⭐关闭自动格式化冲突IDE 与 Codex 并发编辑同一文件⭐⭐⭐⭐缩小任务改动范围长期有效的使用习惯优化⭐⭐⭐⭐⭐统一 UTF-8 编码涉及非 UTF-8 遗留文件的项目⭐⭐⭐提示重新读取文件单次失败后的快速恢复方式⭐⭐⭐⭐报错的本质是Codex 生成补丁时读取的文件内容,与实际应用补丁时磁盘上的文件内容出现了不一致,常见诱因包括换行符风格混用、文件被其他工具并发修改、编码问题等。

一键难忘的博客 7308

[导入]Delphi控件的使用经验

文章来源:http://blog.youkuaiyun.com/nm/archive/2000/08/16/4408.aspx 转载于:https://www.cnblogs.com/zhaoxiaoyang2/archive/2000/08/16/816536.html

weixin_30808575的博客 195

为 ABAP BSP 与 ICF 量身打造的错误页实践:从 CX_ROOT 到 SICF 的端到端落地指南

摘要 本文系统讲解SAP ABAP平台中BSP与ICF层的错误页定制方法。在BSP层,通过标记错误页属性和绑定ERROR_OBJECT异常对象,实现友好的错误展示与日志记录。ICF层通过SICF事务码统一配置错误页、登录与登出逻辑,支持服务树继承。文章包含可直接落地的代码示例,并针对现代Fiori架构给出演进建议,帮助开发者提升用户体验与系统安全性。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 230

DELPHI控件开发深入简出 —— 经验分享篇

DELPHI控件开发深入简出 —— 经验分享篇 去发现同类优质开源项目:https://gitcode.com/ “不会开发控件的Delphi程序员不是真正的程序员”,这句话充分体现了Delphi控件开发在程序员心中的地位。Delphi因其高度的可扩展性和丰富的第三方控件支持,赢得了无数开发者的青睐。本文作者通过一年多的实践经验,总结了自己在Delphi控件开发方面的点滴心得,希望为后来者提供一份...

gitblog_06770的博客 319

【异常】Openclaw Gateway进程异常停止问题分析与解决方案

本文分析了Gateway服务异常停止的问题,提出了三种解决方案。核心问题是缺乏进程守护和自动恢复机制,导致服务崩溃后无法自行重启。推荐方案是使用PM2进程管理工具(方案1),提供进程监控、自动重启和开机自启功能。替代方案包括自定义守护脚本(方案2)和supervisord管理(方案3)。这些方案都能有效解决当前服务脆弱性问题,显著提升服务可用性,其中PM2方案成熟度高、配置简单,是首选解决方案。实施后可将服务从人工干预转变为自动恢复,确保业务连续性。

奶爸的编程之路,也就一周冷个三天 461

基于STM32+ESP8266+手机APP的心率血氧温湿度监测报警系统设计(项目资料ID:18)

基于 STM32 微控制器、ESP8266 无线模块和 QT 手机 APP 的多参数监测报警系统。该系统可实时采集心率、血氧饱和度、环境温湿度等参数,通过 OLED 显示屏本地显示,并通过 WiFi 模块上传至手机 APP 实现远程监测与数据可视化。系统具备报警阈值自定义功能,当参数超出设定范围时,通过蜂鸣器和 LED 进行声光报警。系统以 STM32F103 为控制核心,采用 MAX30102 传感器采集心率和血氧,DHT20 采集温湿度,通过 ESP8266 实现无线通信,配合 QT 开发的手机 APP

以培养嵌入式工程师为己任 1万+

DELPHI控件开发深入简出经验分享篇:助力高效编程的利器

DELPHI控件开发深入简出经验分享篇:助力高效编程的利器 去发现同类优质开源项目:https://gitcode.com/ DELPHI控件开发深入简出经验分享篇,为开发者提供高效编程的核心功能与场景。 项目介绍 DELPHI控件开发深入简出经验分享篇,是一份汇聚了作者一年多实践经验的心得分享。作者从初次接触DELPHI的困惑,到逐渐掌握控件开发的技巧,详细记录了过程中的艰辛与收获。本项目旨在为...

gitblog_06710的博客 454

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Delphi控件使用经验札记

1、notebook的使用 Pages属性里添加page 右键点击notebook, next page|Previous page,然后把控件加到页面上

疯流人物 3039

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

delphi忘记了控件属性怎么设置以及控件安装经验

比如怎么设置垂直居中,之前做过一次但是后来忘记了怎么办? 用记事本打开之前的设置过的.dfm文件里面全是配置信息,就可以看到之前的东西了。   delphi真的好麻烦啊     总之要到什么控件就装,然后再库里添加引用地址就可以了。 或者缺少什么引用,就去到可能存在的地方查找这个缺少的文件,然后把地址添加到库中即可。

爬行 306

delphi xe2 常用控件安装经验分享

为大家节省些时间,是写常用的控件安装方法,小经验小分享,时间匆忙就不写仔细了,大家可以看附件。 转载于:https://blog.51cto.com/hhc134x071122/1702049...

weixin_34273481的博客 365

delphi mousemove 判断鼠标是否移入控件_实战经验:鼠标在控件上悬停和离开的使用...

问题在最近的工作中,碰到这样一个需求:系统能根据鼠标是否在控件上来做出不同的响应。这里所说的是否在控件上,实际上有个专门的名称:Hover和Leave。所谓Hover,指的是鼠标在窗口所在的矩形区域上悬停指定的一段时间。所谓Leave,则是指鼠标离开窗口所在的矩形区域。使用到的消息在Windows中,分别使用WM_MOUSEHOVER和WM_MOUSELEAVE来表示这两种事件。我们先来看看MSD...

weixin_39552317的博客 932

被遗忘的Delphi——小知识分享

为大家节省些时间,是写常用的控件安装方法,小经验小分享,时间匆忙就不写仔细了。

JYunF的博客 51
上一篇: 遍历逻辑驱动器片断code
下一篇: 清除病毒代码
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值