新手学堂:Delphi基础开发技巧浅析

新手学堂:Delphi基础开发技巧浅析,第1张

◇[DELPHI]网络邻居复制文件uses shellapicopyfile(pchar( newfile txt ) pchar( //putername/direction/targer txt ) false)◇[DELPHI]产销碧清生鼠标拖动效果通过MouseMove事件 DragOver事件 EndDrag事件实现 例如在PANEL上的LABEL var xpanel ypanel xlabel ylabel:integerPANEL的MouseMove事件 xpanel:=xypanel:=yPANEL的DragOver事件 xpanel:=xypanel:=yLABEL的MouseMove事件 xlabel:=xylabel:=yLABEL的EndDrag事件 label left:=xpanel xlabellabel top:=ypanel ylabel◇[DELPHI]取得WINDOWS目录uses shellapivar windir:array[ ] of chargeindowsdirectory(windir sizeof(windir))或者从注册表中读取 位置 HKEY_LOCAL_MACHINE\Sofare\Microsoft\Windows\CurrentVersionSystemRoot键 取得如 C:\WINDOWS◇[DELPHI]在form或其他容器上画线var x y:array [ ] of integerlor:=clredcanvas pen style:=psDashform canvas moveto(trunc(x[i]) trunc(y[i]))form canvas lineto(trunc(x[j]) trunc(y[j]))◇[DELPHI]字符串列表使用var tips:tstringlisttips:=tstringlist createtips loadfromfile( filename txt )edit text:=tips[ ]tips add( last line addition string )tips insert( insert string at NO line )tips savetofile( newfile txt )tips free◇[DELPHI]简单的剪贴板 *** 作richedit selectallpytoclipboardrichedit cuttoclipboardedit pastefromclipboard◇[DELPHI]关于文件 目录 *** 作Chdir( c:\abcdir )转到目录Mkdir( dirname )建立目录Rmdir( dirname )删除目录 慧仿 GetCurrentDir//取当前目录亏前名 无 \ Getdir( s)//取工作目录名s:= c:\abcdir Deletfile( abc txt )//删除文件Renamefile( old txt new txt )//文件更名ExtractFilename(filelistbox filename)//取文件名ExtractFileExt(filelistbox filename)//取文件后缀◇[DELPHI]处理文件属性attr:=filegetattr(filelistbox filename)if (attr and faReadonly)=faReadonly then //只读if (attr and faSysfile)=faSysfile then //系统if (attr and faArchive)=faArchive then //存档if (attr and faHidden)=faHidden then //隐藏◇[DELPHI]执行程序外文件WINEXEC//调用可执行文件winexec( /c copy * * c:\ SW_Normal)winexec( start abc txt )ShellExecute或ShellExecuteEx//启动文件关联程序function executefile(const filename params defaultDir:stringshowCmd:integer):THandleExecuteFile( C:\abc\a txt x abc c:\abc\ )ExecuteFile( )ExecuteFile( mailto: )◇[DELPHI]取得系统运行的进程名var hCurrentWindow:HWndszText:array[ ] of charbeginhCurrentWindow:=Geindow(handle GW_HWndFrist)while hCurrentWindow <>dobeginif Geindowtext(hcurrneindow @sztext )>then ems add(strpas(@sztext))hCurrentWindow:=Geindow(hCurrenindow GW_HWndNext)endend◇[DELPHI]关于汇编的嵌入A *** End可以任意修改EAX ECX EDX 不能修改ESI EDI ESP EBP EBX ◇[DELPHI]关于类型转换函数FloatToStr//浮点转字符串FloatToStrF//带格式的浮点转字符串IntToHex//整数转 进制TimeToStrDateToStrDateTimeToStrFmtStr//按指定格式输出字符串formatDateTime( YYYY MM DD hh mm ss DATE)◇[DELPHI]字符串的过程和函数Insert(obj target pos)//字符串target插入在pos的位置 如插入结果大于target最大长度 多出字符将被截掉 如Pos在 以外 会产生运行错 例如 st:= Brian 则Insert( OK st )会使st变为 BrOKian Delete(st pos Num)//从st串中的pos(整型)位置开始删去个数为Num(整型)个字符的子字串 例如 st:= Brian 则Delete(st )将变为Brn Str(value st)//将数值value(整型或实型)转换成字符串放在st中 例如 a= E 时 则str(a: st)将使st的值为 Val(st var code)//把字符串表达式st转换为对应整型或实型数值 存放在var中 St必须是一个表示数值的字符串 并符合数值常数的规则 在转换过程中 如果没有检测出错误 变量code置为 否则置为第一个出错字符的位置 例如 st:= E x是一个实型变量 则val(st x code)将使X值为 code值为 Copy(st pos num)//返回st串中一个位置pos(整型)处开始的 含有num(整型)个字符的子串 如果pos大于st字符串的长度 那就会返回一个空串 如果pos在 以外 会引起运行错误 例如 st:= Brian 则Copy(st )返回 ri Concat(st st st …… stn)//把所有自变量表示出的字符串按所给出的顺序连接起来 并返回连接后的值 如果结果的长度 将产生运行错误 例如 st := Brian st := st := Wilfred 则Concat(st st st )返回 Brian Wilfred Length(st)//返回字符串表达式st的长度 例如 st:= Brian 则Length(st)返回值为 Pos(obj target)//返回字符串obj在目标字符串target的第一次出现的位置 如果target没有匹配的串 Pos函数的返回值为 例如 target:= Brian Wilfred 则Pos( Wil target)的返回值是 Pos( hurbet target)的返回值是 ◇[DELPHI]关于处理注册表uses Registryvar reg:Tregistryreg:=Tregistry createreg rootkey:= HKey_Current_User reg openkey( Control Panel\Desktop false)reg WriteString( Title Wallpaper )reg writeString( Wallpaper filelistbox filename)reg closeregreg free◇[DELPHI]关于键盘常量名VK_BACK/VK_TAB/VK_RETURN/VK_SHIFT/VK_CONTROL/VK_MENU/VK_PAUSE/VK_ESCAPE/VK_SPACE/VK_LEFT/VK_RIGHT/VK_UP/VK_DOWNF F $ ( ) $ B( )A Z $ ( ) $ A( ) $ ( ) $ ( )◇[DELPHI]初步判断程序母语DELPHI软件的DOS提示 This Program Must Be Run Under Win VC++软件的DOS提示 This Program Cannot Be Run In DOS Mode ◇[DELPHI] *** 作Cookieokies( name ) domain:= with okies add dobeginname:= username value:= username end◇[DELPHI]增加到文档菜单连接uses shellapi shlOBJshAddToRecentDocs(shArd_path pchar(filepath))//增加连接shAddToRecentDocs(shArd_path nil)//清空◇[杂类]备份智能ABC输入法词库windows\system\user remwindows\system\tmmr rem◇[DELPHI]判断鼠标按键if GetAsyncKeyState(VK_LButton)<>then //左键if GetAsyncKeyState(VK_MButton)<>then //中键if GetAsyncKeyState(VK_RButton)<>then //右键◇[DELPHI]设置窗体的最大显示onformCreate事件self width:=screen widthself height:=screen height◇[DELPHI]按键接受消息OnCreate事件中处理 Application OnMessage:=MyOnMessageprocedure Tform MyOnMessage(var MSG:TMSGvar Handle:Boolean)beginif ssage= then //ANY键if ssage= then //F if ssage= then //F end◇[杂类]隐藏共享文件夹共享效果 可访问 但不可见(在资源管理 网络邻居中)取共享名为 direction$访问 //puter/dirction/◇[Java Script]Java Script网页常用效果网页 秒定时关闭关闭窗口关闭定时转URL设为首页设为首页收藏本站收藏本站加入频道加入频道◇[DELPHI]随机产生文本色randomize//随机种子lor:=rgb(random( ) random( ) random( ))◇[DELPHI]DELPHI UPDATE升级补丁序列号 X fx ◇[DELPHI]文件名的非法字符过滤for i:= to length(s) doif s[i] in [ \ / : * ? <>| ] then◇[DELPHI]转换函数的定义及说明datetimetofiledate (datetime:Tdate lishixinzhi/Article/program/Delphi/201311/8427

 知弊  ——此文章摘自《Delphi开发经验技巧宝典》定价 ¥  特价 ¥ 购买>>//track linktech cn/?m_id=dangdang&a_id=A &l= &l_type = width= height= border= nosave>

    在语句中查找汉字的个数

    本实例是用paremem()函数对字符中的汉字进行比较 如果符合要查找的汉字 则将没字友祥的个数加 运行结果如图 所示

//develop csai cn/delphi/images/ jpg >图   在语句中查找汉字的个数

    主要代码如下     function TForm findcount(const s sFind: string): Integer    var      i: Integer    begin      i :=      result :=      while i <= Length(s) Length(sFind)+ do       if paremem(@(s[i]) @(sFind[ ]) Length(sFind)) then       begin        inc(result)       inc(i Length(sFind))      end       else if byte(s[i])>then        inc(i )       else inc(i)    end

    统计中英文个数

    字符由一个字节组成 ASCII码的范围在 ~ 之间 而汉字由两个字节组成 每个字节的ASCII码都大于等于 本实例将通过以上条件对字符串中的中英文个数进行统计 运行结果如图 所示

//develop csai cn/delphi/images/ jpg >图   统计中英文字个数

    程序代码如下     procedure TForm Button Click(Sender: TObject)    var      Str : String     i E C:Integer    begin      Str:=Memo Text     E:= C:=      for i:= to Length(Str) do      begin       if (Ord(Str[i])>= )and(Ord(Str[i])<= ) then       begin        inc(E)       Label Caption:= 英文个数 +IntToStr(E)      end       else       if (Ord(Str[i])>好猛搏= ) then       begin        inc(C)       Label Caption:= 中文个数 +IntToStr(C div )      end     end    endlishixinzhi/Article/program/Delphi/201311/8463

目前在许多学习软件 游戏光盘中 经常会看到各种图形显示技巧 凭著图形的移动 交错 雨滴状 百页窗 积木堆叠等显现方式 使画面变得更为生动活泼 更能吸引观众 本文将探讨如何在Delphi中实现各种图形显示技巧 一 基山陵本原理在Delphi中 实现一副图像的显示是非常简单的 只要在Form中定义一个TImage组件 设置其picture属性 然后选择任何有效的 ICO BMP EMF或 WMF文件 进行Load 所选文件就显示在TImage组件中了 但这只是直接将图形显示在窗体中 毫无技巧可言 为了使图形显示具有别具一格的效果 可以按下列步骤实现 定义一个TImage组件 把要显示的图形先装入到TImage组件中 也就是说 把图形内容从磁盘载入内存瞎键中 作为图形缓存 创建一新的位图对象 其尺寸跟TImage组件中的图形一样 利用画布(Canvas)的CopyRect功能(将一个画布的矩形区域拷贝到另一个画布的矩形区域) 使用一定技巧 动态形成位图文件内容 然后在窗体中显示位图 二 实现方法下面介绍各种图形显示技巧 推拉效果将要显示的图形由上 下 左 右方向拉进屏幕内显示 同时将屏幕上原来的旧图覆盖掉 此种效果可分为四种 上拉 下拉 左拉 右拉 但原理都差不多 以上拉效果为例 原理 首先将放在暂存图形的第一条水平线搬移至要显示的位图的最后一条 接着再将暂存图形的前两条水平线 依序搬移至要显示位图的最后两条水平线 然后搬移前三条 前四条 直到全部图形数据搬完为止 在搬移的过程中即可看到显示的位图由下而上浮起 而达到上拉的效果 程序算法 procedure TForm Button Click(Sender: TObject)varnewbmp: TBitmapi bmpheight bmpwidth:integerbeginnewbmp:= TBitmap Createnewbmp Width:=image Widthnewbmp Height:=image Heightbmpheight:=image Heightbmpwidth:=image Widthfor i:= to bmpheight dobeginnewbmp Canvas CopyRect(Rect( bmpheight-i bmpwidth bmpheight) image Canvas Rect( bmpwidth i))form Canvas Draw( newbmp)endnewbmp freeend垂直交错效果原理 将要显示的图形拆成两部分 奇数条扫描逗神戚线由上往下搬移 偶数条扫描线则由下往上搬移 而且两者同时进行 从屏幕上便可看到分别由上下两端出现的较淡图形向屏幕中央移动 直到完全清楚为止 程序算法 procedure TForm Button Click(Sender: TObject)varnewbmp:TBitmapi j bmpheight bmpwidth:integerbeginnewbmp:= TBitmap Createnewbmp Width:=image Widthnewbmp Height:=image Heightbmpheight:=image Heightbmpwidth:=image Widthi:= while i<=bmpheight dobeginj:=iwhile j >dobeginnewbmp Canvas CopyRect(Rect( j- bmpwidth j) image Canvas Rect( bmpheight-i+j- bmpwidth bmpheight-i+j))newbmp Canvas CopyRect(Rect( bmpheight-j bmpwidth bmpheight-j+ ) image Canvas Rect( i-j bmpwidth i-j+ ))j:=j- endform Canvas Draw( newbmp)i:=i+ endnewbmp freeend水平交错效果同垂直交错效果原理一样 只是将分成两组后的图形分别由左右两端移进屏幕 程序算法从略 雨滴效果原理 将暂存图形的最后一条扫描线 依序搬移到可视位图的第一条到最后一条扫描线 让此条扫描线在屏幕上留下它的轨迹 接着再把暂存图形的倒数第二条扫描线 依序搬移到可视位图的第一条到倒数第二条扫描线 其余的扫描线依此类推 程序算法 procedure TForm Button Click(Sender: TObject)varnewbmp:TBitmapi j bmpheight bmpwidth:integerbeginnewbmp:= TBitmap Createnewbmp Width:=image Widthnewbmp Height:=image Heightbmpheight:=image Heightbmpwidth:=image Widthfor i:=bmpheight downto dofor j:= to i dobeginnewbmp Canvas CopyRect(Rect( j- bmpwidth j) image Canvas Rect( i- bmpwidth i))form Canvas Draw( newbmp)endnewbmp freeend百叶窗效果原理 将放在暂存图形的数据分成若干组 然后依次从第一组到最后一组搬移 第一次每组各搬移第一条扫描线到可视位图的相应位置 第二次搬移第二条扫描线 接着搬移第三条 第四条扫描线 其余扫描线依此类推 程序算法 procedure TForm Button Click(Sender: TObject)varnewbmp:TBitmapi j bmpheight bmpwidth:integerxgroup xcount:integerbeginnewbmp:= TBitmap Createnewbmp Width:=image Widthnewbmp Height:=image Heightbmpheight:=image Heightbmpwidth:=image Widthxgroup:= xcount:=bmpheight div xgroupfor i:= to xcount dofor j:= to xgroup dobeginnewbmp Canvas CopyRect(Rect( xcount*j+i- bmpwidth xcount*j+i) image Canvas Rect( xcount*j+i- bmpwidth xcount*j+i))form Canvas Draw( newbmp)endnewbmp Freeendlishixinzhi/Article/program/Delphi/201311/8405


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12533672.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2025-08-26
下一篇2025-08-26

发表评论

登录后才能评论

评论列表(0条)

    保存