delphi tips and articles 5

delphi Tip delphi code tip Local Ver DB : SQLLite 立即下载
1 判断字符串中的中文字符是否存在等问题。

procedure TForm1.Button1Click(Sender: TObject);
var
  t:string;
  s,s1:WideString;
v:WideChar;
begin
  s  := '_3到8年';
  s1:='年';

v:=s[1];

showmessage(v);


    if ansiContainsText(s,s1[1]) then
    begin
     s:= AnsiReplaceText(s,s1[1],'');
     s1 := '到';
     s := ansireplaceText(s,s1[1],'');
     s := ansireplaceText(s,'_','');
     showmessage(s);
    end;


showmessage(inttostr( Ord(v)));
end;

对WideString而言,s[1]意即:第一个字符。

2String到WideString
http://groups.google.com/group/borland.public.delphi.winapi/browse_frm/thread/7920cdc4c4d4f1ab/2bed31bcb703d614?lnk=st&q=delphi+string+to+widestring&rnum=1#2bed31bcb703d614
I just wasted 4 hours so maybe I can save some of your time.
Assigning a string to a widestring such as in:

var
  wString: wideString;
  nString: string;
begin
  nString := 'hello';
  wString := nString;
end;

works fine UNLESS the nString is greater than 4096 characters, in
which case the assignment to wString results in a empty string.
3 捕捉窗口最小化等类似事件
在Form上放一个TApplicationEvents,然后在它的OnMinimize事件里捕获最小化消息。
TApplicationEvents,在additional面板中
4 几种常用Grid导出到excel

a cxgrid:

uses
    cxExportGrid4Link;

   procedure TForm1.Button1Click(Sender: TObject);
   begin
    ExportGrid4ToEXCEL('d:/wang.xsl',cxGrid1,True,True);
    ExportGrid4ToTEXT('d:/wang.txt',cxGrid1,True,True);
    ExportGrid4ToXML('d:/wang.xml',cxGrid1,True,True);
    ExportGrid4ToHTML('d:/wang.html',cxGrid1,True,True);
   end;

b dbgrid和stringgrid

procedure TDM.CopyDbDataToExcel(Target: TDBGridEh;mb,FileName: string);
var
iCount, jCount: Integer;
XLApp: Variant;
Sheet: Variant;
begin
Screen.Cursor := crHourGlass;
if not VarIsEmpty(XLApp) then
begin
 XLApp.DisplayAlerts := False;
 XLApp.Quit;
 VarClear(XLApp);
end;
//--------------------------选择模板------
// CopyFile(pChar(Trim(ExtractFilePath(Application.ExeName))+mb+'.xls'),pChar(FileName+'1.xls'),false);
//------------------------
//通过ole创建Excel对象
try
 XLApp := CreateOleObject('Excel.Application');
except
 Screen.Cursor := crDefault;
 Exit;
end;
if mb = '统计-项目信息前' then
  XLApp.WorkBooks.Add[Trim(ExtractFilePath(Application.ExeName))+mb+'.xls']    //你要把数据放在那里啊,先生成个文件在e:/1.xls
else
 XLApp.WorkBooks.Add;
XLApp.WorkBooks[1].WorkSheets[1].Name := 'sheet1';
Sheet := XLApp.Workbooks[1].WorkSheets['sheet1'];
if not Target.DataSource.DataSet.Active then
begin
 Screen.Cursor := crDefault;
 Exit;
end;
Target.DataSource.DataSet.first;

for iCount := 0 to Target.Columns.Count - 1 do
begin
 Sheet.cells[1, iCount + 1] := trim(Target.Columns.Items[iCount].Title.Caption);
end;

jCount := 1;
while not Target.DataSource.DataSet.Eof do
begin

 for iCount := 0 to Target.Columns.Count - 1 do   //
 begin
  if iCount = 0 then
   Sheet.cells[jCount + 1, iCount + 1] := IntToStr(jCount)
  else
   Sheet.cells[jCount + 1, iCount + 1] := trim(Target.Columns.Items[iCount].Field.AsString);
 end;
Inc(jCount);
Target.DataSource.DataSet.Next;
end;

//--------------------可以在此添加Excel的宏-----------

XLApp.ActiveWorkbook.SaveAs(FileName:=FileName);                                                                                                            ;
Screen.Cursor := crDefault;
XLApp.ActiveWorkbook.Close;
end;
-----------------------------------------StringGridToExcel

procedure TDM.CopySGDataToExcel(Target: TStringGrid;FileName: string);
var
iCount, jCount: Integer;
XLApp: Variant;
Sheet: Variant;
begin
Screen.Cursor := crHourGlass;
if not VarIsEmpty(XLApp) then
begin
XLApp.DisplayAlerts := False;
XLApp.Quit;
VarClear(XLApp);
end;
//通过ole创建Excel对象
try
XLApp := CreateOleObject('Excel.Application');
except
Screen.Cursor := crDefault;
Exit;
end;
XLApp.WorkBooks.Add;    //你要把数据放在那里啊,先生成个文件在e:/1.xls
XLApp.WorkBooks[1].WorkSheets[1].Name := 'sheet1';
Sheet := XLApp.Workbooks[1].WorkSheets['sheet1'];
Target.Row := 0;
for iCount := 0 to Target.RowCount - 1 do
begin
 for jCount := 0 to Target.ColCount - 1 do
   Sheet.cells[iCount + 1, jCount + 1] := Target.Cells[jCount,iCount];
 Target.Row := iCount;
end;
XLApp.ActiveWorkbook.SaveAs(FileName:=FileName);
Screen.Cursor := crDefault;
XLApp.ActiveWorkbook.Close;
end;


 

dbgridtoexcel参考2:

procedure CopyDbDataToExcel(Target: TDbgrid);
var
iCount, jCount: Integer;
XLApp: Variant;
Sheet: Variant;
begin
Screen.Cursor := crHourGlass;
if not VarIsEmpty(XLApp) then
begin
XLApp.DisplayAlerts := False;
XLApp.Quit;
VarClear(XLApp);
end;
//通过ole创建Excel对象
try
XLApp := CreateOleObject('Excel.Application');
except
Screen.Cursor := crDefault;
Exit;
end;
XLApp.WorkBooks.Add;
XLApp.WorkBooks[1].WorkSheets[1].Name := '测试工作薄';
Sheet := XLApp.Workbooks[1].WorkSheets['测试工作薄'];
if not Target.DataSource.DataSet.Active then
begin
Screen.Cursor := crDefault;
Exit;
end;
Target.DataSource.DataSet.first; 

for iCount := 0 to Target.Columns.Count - 1 do
begin
Sheet.cells[1, iCount + 1] := Target.Columns.Items[iCount].Title.Caption;
end;
jCount := 1;
while not Target.DataSource.DataSet.Eof do
begin
for iCount := 0 to Target.Columns.Count - 1 do
begin
Sheet.cells[jCount + 1, iCount + 1] := Target.Columns.Items[iCount].Field.AsString;
end;
Inc(jCount);
Target.DataSource.DataSet.Next;
end;
XlApp.Visible := True;
Screen.Cursor := crDefault;
end;

 

 

5 TStringList使用object

http://forums.devshed.com/delphi-programming-90/namevaluecollection-equivalent-in-delphi-6-0t-299165.html

1.Note that TStringList has an AddObject method, as well as an Add method. You can use AddObject to associate an object with a string.
2. The trick with AddObject is that the second object must be a descendant of TObject. This is no problem, since we can declare our value type as a TObject descendant:

Code:
type:
TMyValue = class(TObject)
public
nValue : integer;
end;

This is assuming that the data we want to store (nValue) is an integer. It can be a more complex type if you like (say, a bunch of values).
3. Then to add an item to the StringList, do something like this:
Code:
procedure TForm1.AddNameValue(sName: string; nValue: integer);
var
oMyValue : TMyValue;
begin
oMyValue := TMyValue.Create;
oMyValue.nValue := nValue;
stl.AddObject(sName, oMyValue);
end;

4. Now to get a value off the StringList, you can get the object associated with the string and cast it back to a TMyValue and extract the values from the object. It might be faster if you set StringList.sorted := true, so that the stringlist is sorted to start with.
5. To clear the list, you go through each entry in the stringlist, get the object (via the StringList.Objects[i] method) and free each one first. Then clear the stringlist.

004_DelphiTips Delphi 技巧集系列之4(共18集)004_DelphiTips 立即下载

相关推荐

LangFlow开源神器:拖拽构建AI Agent与MCP协议集成实战

LangFlow 15万星开源神器:拖拽搭建 AI Agent,一键部署 API / MCP / JSON 在AI应用开发领域,传统编码方式往往需要处理复杂的API调用、数据处理和流程编排,这让很多开发者望而却步。LangFlow作为GitHub上获得15万星的开源项目,通过可视化拖拽的方式彻底改变了AI Agent的开发体验。本文将完整介绍如何使用LangFlow快速构建功能强大的AI Agent,并实现API、MCP协议和JSON配置的一键部署。 1. LangFlow与AI Agent核心概念解析 1

weixin_33717117的博客 940

delphi tips

屏蔽系统功能键   当你不需要让用户按Alt+Enter、Ctrl+Alt+Del、Ctrl+Esc等功能键的时候加入以下代码:Vartemp:integer;beginSystemParametersInfo(Spi_screensaverrunning,1,@temp,0);end;   当你要恢复功能键时用以下代码:VarTemp:integer;beginSyste

Fairy tale's Blog 1289

告别命令行恐惧!用nTopology可视化工具5分钟搞定三维Voronoi泡沫建模

本文介绍如何利用nTopology可视化工具快速生成三维Voronoi泡沫结构,无需编程即可完成复杂建模。Voronoi结构在轻量化设计、能量吸收和生物医学等领域具有重要应用,传统命令行方法门槛较高。通过nTopology的四步流程,用户可在5分钟内创建仿真就绪模型,大幅提升设计效率。

weixin_30764771的博客 427

Delphi Tips

1、通过explorer打开文件所在文件夹,并选中文件. explorer /n,/select,[<文件全路径>,<文件夹路径>] 转载于:https://www.cnblogs.com/LDaqiang/articles/992381.html...

127

海康工业相机使用教程

海康工业相机连接电脑教程

qq_43251445的博客 2万+

PICO+Unity MR空间网格开发实战:从零构建透视交互场景

本文详细介绍了使用PICO 4 Ultra与Unity引擎进行MR空间网格开发的完整实战流程。从环境准备、项目初始化、核心组件配置,到空间网格的生成、可视化与物理交互实现,手把手教你构建一个能识别真实环境并发射虚拟小球的透视交互场景。文章重点解析了PICO SDK中空间网格功能的关键配置与优化技巧,并提供了真机部署与调试的实用指南。

e3f4g5的博客 490

Delphi tips

【文章】如何用Delphi控制Excel儲存格合併? 【編輯】領航天使   【作者】a6475 【內文】來源:http://delphi.ktop.com.tw/topic.asp?topic_id=45774 Q:我用下列方法動態create excel ole物件msexcel:= CreateOleObject(Excel.Application); 1.我要把 A1..Z1 CELL合

h_q_p的专栏 1080

OpenFOAM-v2006重叠网格挖洞问题实战:如何手动修复overset代码中的边缘识别缺陷

本文深入探讨了OpenFOAM-v2006中重叠网格挖洞问题的实战解决方案,重点修复overset代码中的边缘识别缺陷。通过逆向工程解析挖洞决策机制,设计最小侵入式的函数override方案,并建立多级验证体系,有效解决了网格挖洞区域覆盖不全的问题,提升了计算流体动力学模拟的准确性和可靠性。

weixin_29216049的博客 433

delphi tips and articles 2

1TColor中支持的颜色常量(unit Graphics): clSystemColorclScrollBarclBackgroundclActiveCaptionclInactiveCaptioclMenuclWindowclWindowFrameclMenuTextclWindowTextclCaptionTextclActiveBorderclInactiveBorderclAppWork

yethyeth的专栏 5094

uniapp无感刷新token实现过程

可以看到已经触发了刷新token接口,并且重新请求上次失败的列表接口,无感刷新token逻辑已经正常,但为什么列表接口请求成功,还一直loading没关闭捏,就是因为后续代码未执行,await接口的返回没有成功resolve。路漫漫其修远兮,前端道路逐渐迷茫,时隔好久好久终于想起了我还有一个小博客,最近在一直在弄uniapp,属实有被恶心到,但也至少会用了,最近实现了一个比较通用的功能,就是无感刷新token,但在过程中发现一个问题就是。3、排查await的列表接口为何没有成功resolve。

weixin_40618068的博客 3594

GameFramework框架详解之 DataTable配置表模块

一.前言: DataTable模块是项目的配置表模块,配置表一般是从excel导出csv/json/xml格式的,之所以是excel作为源文件,原因是因为策划同学使用配表最方便。然后一键导出到项目中,除了csv/json/xml配置文件外,一般还会伴随着导出配置的实体类,这样研发同学就可以使用了。GameFramework的DataTable模块也是秉持着这种一贯的策略来实现的。 二.DataRow DataRow在excel数据表中,对应的是一行数据,而在代码中对应的其实就是一条数据对象。 接口IData

TxNet 4726

delphi tips and articles 4

1用回车键代替Tab键 把Form的KeyPreview属性设为True在Form的OnKeyDown事件处理程序中:  if Key = VK_RETURN then  begin    Key := VK_TAB;    FindNextControl(ActiveControl, True, True, False).SetFocus;  end但是,发现对cxgrid类的控件上述代

yethyeth的专栏 3174

75、CAN总线收发器共模范围扩展与抗干扰芯片选型

摘要:本文探讨了CAN总线收发器共模范围扩展与抗干扰芯片选型的关键问题。作者通过风电场的实际案例,指出共模电压超标会导致总线故障甚至芯片损坏。文章分析了不同芯片(如SN65HVD1050、TJA1043等)的共模范围特性,并提供了电路设计建议,包括正确使用共模扼流圈和终端电阻。最后强调选型时要结合实际工况,在共模范围、功耗、速度和成本之间取得平衡,普通工业现场建议选择正负36V共模范围的芯片。

2401_88858637的博客 53

Delphi 三种气泡提示效果

一、方法一 说明:这个效果不好,鼠标必须放在按钮上,气泡提示才可以出来,如果鼠标在按钮的范围之外,        用回车键点击按钮也不会激活气泡提示。 unitUnit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,Forms, Dialogs, StdCtr

阳光小飞鱼's Blog 5074

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

数据保存时,出现‘record not found or changed by another user’错误信息的解决办法

record not found or changed by  another user,这个错误是我在做项目时,遇到的问题,找了一些参考才解决。如下:所用的控件有:TDataSetProvider,TADOQuery,TClientDataSet1.当 DataSetProvider.UpdateMode=upWhereAll 时,update时 where 是指定全部字段,比如,你有a、b

传的专栏 2878

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

delphi tips 6

1 dcom程序不能使用的问题(也许有用)http://topic.youkuaiyun.com/t/20010907/11/276353.html客户端需要运行regsvr32   midas.dll,regsvr32   stdvcl40.dll     服务端需要运行dcomcnfg进入“分布式COM配置属性”     1   “默认属性”页面,将“在这台计算机上启用分布式COM”打勾,将“默认

yethyeth的专栏 1091

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

突然提示:error loading MIDAS.DLL(注册dll的通用方式)

提示异常:error loading MIDAS.DLL。注册midas.dll1 先拷贝midas.dll()到本地系统目录下(假设c:/winnt/system32/),2 然后点击桌面/开始/运行/regsvr32 c:/winnt/system32/midas.dll(直接 regsvr32 midas.dll即可)注册成功时会有提示说明:如果系统为98,将regsvr32替换成regsv

yethyeth的专栏 3万+

delphi中调试信息输出

1 http://topic.youkuaiyun.com/t/20041018/02/3464822.html首先在你的*.DPR项目文件里加上这一行     {$APPTYPE   CONSOLE}         然后     调用     Writeln(文本);     就行了   2 http://blog.youkuaiyun.com/dogbear2000/archive/2005/02

yethyeth的专栏 1万+

delphi文章等

在Delphi编程中的文件操作 http://news.softhouse.com.cn/news/show/15723.html delphi关于文件操作的函数   http://www.cncfan.com/cncfan_com_article.asp?art_id=2502&cat_id=74关于文本文件http://www.75pc.com/viewthread.php?tid=2

yethyeth的专栏 1万+

EJunGrid使用总结

1   1。0版没有实现垂直方向上的对齐,procedure TOBGUI_ReportDesign.gridDrawCellText(ACanvas: TCanvas; const ARect:         TRect; const ACoord: TPoint; AGrid: TZJGrid; const Text: String; var         ADefaultDraw:

yethyeth的专栏 3432

cxgrid使用

1编码实现过滤with gridDBTableView1.DataController.Filter.Root do  begin    Clear;    BoolOperatorKind := fboor;    AddItem(gridDBTableView1.Columns[15], foEqual,      trim(myutils.getDepartmentNameFromNod

yethyeth的专栏 3282

delphi 程序发布问题

http://topic.youkuaiyun.com/t/20030102/15/1320762.htmlDelphi具有强大的数据库应用程序开发功能,其Client/Sever版本可以开发一般的单机数据库应用系统、普通Client/Sever应用系 统直至基于Web的多层应用,其中自然离不开Borland数据库引擎(BDE)的功劳。不过在没有安装过Delphi程序的计算机上运行数据库程序时, 必须同时分发

yethyeth的专栏 3182
上一篇: 突然提示:error loading MIDAS.DLL(注册dll的通用方式)
下一篇: GB2312 (Simplified Chinese) character code table
yethyeth
博客等级 码龄21年 140粉丝 265原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值