随笔 - 2146  文章 - 19 评论 - 11846 阅读 - 1267万

随笔分类 -  点点滴滴-日积月累

1 2 下一页
高亮 TRichEdit 当前行
摘要:var gStart, gLength, gCol: Integer;procedure SetRichEdit(aRichEdit: TRichEdit);var fRow, fCol: Integer; fStart, fLength, tStart: Integer;begin fRo... 阅读全文
posted @ 2014-09-29 11:08 万一 阅读(7053) 评论(7) 推荐(3) 编辑
现在使用控件, 更喜欢继承
摘要:以前写代码, 总是把主单元弄得满满当当; 现在更喜欢把控件比较独立的功能写成一个单元, 改写属性、重载方法...哪怕只有一点点和默认不同, 也喜欢独立出来.刚刚用到 TListBox, 需要能拖动元素、双击删除.unit ListBox2;interfaceuses System.Classes, Vcl.Controls, Vcl.StdCtrls, System.Types;type TListBox2 = class(TCustomListBox) protected procedure DragOver(Source: TObject; X: Integer; Y: Int... 阅读全文
posted @ 2013-07-24 13:20 万一 阅读(5224) 评论(15) 推荐(1) 编辑
写了一个字符串的二维表: TSta
摘要:STA 单元 (用到 System.SysUtils.TStringHelper):unit STA;interfaceuses System.SysUtils, System.Classes;type TSta = record FSeparator: Char; FArr: TArray>; constructor Create(const aStr: string; const aSeparator: Char = ';'); overload; class operator Explicit(const aStr: string): TSta; clas... 阅读全文
posted @ 2013-07-23 14:50 万一 阅读(3005) 评论(0) 推荐(1) 编辑
Delphi 资源管理器套件
摘要:需要个类似资源管理器的东西, 首先试了下 TDriveComboBox、TDirectoryListBox、TFileListBox, 嘿! Win31 时代的东西, 不是一般地丑.试了下 Vcl.Shell.ShellCtrls 下的 TShellComboBox、TShellTreeView、TShellListView, 非常满意! 并且 TShellComboBox 也可以免掉了.unit Unit1;interfaceuses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Clas. 阅读全文
posted @ 2013-07-08 00:11 万一 阅读(4843) 评论(2) 推荐(0) 编辑
Delphi 的链式代码
摘要:有了一系列的 Helper, Delphi 也可以使用链式代码了.//譬如要把 3.1415926 中的 141 提取为一个整数:var num: Integer;begin num := Pi.ToString().Split(['.'])[1].Substring(0,3).ToInteger(); // 输入 . 后, 记得使用 Ctrl+Space 提示代码 ShowMessage(num.ToString()); // 141end;我是在写类似下面程序时开始使用的:{程序要求从下面的文本中提取 A: B: ... 后面的文本到指定的变量:A: qwertyuiopB 阅读全文
posted @ 2013-06-20 01:00 万一 阅读(3613) 评论(3) 推荐(0) 编辑
执行 Application.Terminate 后, OnDestroy 中的代码还会执行
摘要:执行 Application.Terminate 后, OnDestroy 中的代码还会执行, 但不会理会 OnCloseQuery、OnClose 中的代码了.procedure TForm1.Button1Click(Sender: TObject);begin// SendMessage(Application.Handle, WM_CLOSE, 0, 0);// SendMessage(Handle, WM_CLOSE, 0, 0);// Halt(0);// PostQuitMessage(0); Application.Terminate;end;procedure TF... 阅读全文
posted @ 2012-02-14 23:15 万一 阅读(4344) 评论(4) 推荐(0) 编辑
一组文件名(主要以数字命名), 我想按数字大小排序
摘要:uses System.IOUtils, System.Types, System.Generics.Collections, System.Generics.Defaults, System.Character;procedure StrArrNumberSort(var Arr: TArray<string>);begin TArray.Sort<string>(Arr, TComparer<string>.Construct( function (const s1,s2: string): Integer var L1,L2: string; ... 阅读全文
posted @ 2012-02-10 15:57 万一 阅读(7352) 评论(1) 推荐(1) 编辑
给 System.Zip 增加了个(多文件解压时的)解压进度事件
摘要:很喜欢 System.Zip; 手头的程序需要把压缩后的一组文件从内存流解压, 这用 System.Zip 非常简单, 但我需要呈现解压进度, 同时给出当前文件名.因此给 System.Zip.TZipFile 添加了一个 OnUnZipProgress 事件.在 System.Zip 的基础上添加了不足 10 行代码, 新加代码都在行尾标记了 ///.修改后的文件(Zip2.pas):unit Zip2;interfaceuses System.SysUtils, System.IOUtils, System.Generics.Collections, System.Classes;... 阅读全文
posted @ 2012-02-04 13:51 万一 阅读(6130) 评论(10) 推荐(2) 编辑
把一个"结构体"当做属性后碰到的问题
摘要:当我把一个"结构体"在类中当做属性后, 在实用中可以直接读取结构体成员, 但不能直接写入...下面是由此引发的小练习:unit Unit1;interfaceuses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;type TForm1 = class(TForm) Button1: TButton; Button2: TBut 阅读全文
posted @ 2012-01-05 16:56 万一 阅读(4337) 评论(7) 推荐(3) 编辑
混合排序小练习
摘要:2011 年的最后一天了...混合排序 -> 搅乱、重新洗牌; 以 Integer 动态数组为例.//两个辅助函数 Swap、ToStr, 分别用于交换数组元素和呈现为字符串procedure Swap(var Arr: TArray<Integer>; a,b: Cardinal);var tmp: Integer;begin if (a >= Length(Arr)) or (b >= Length(Arr)) or (a = b) then Exit; tmp := Arr[a]; Arr[a] := Arr[b]; Arr[b] := tmp;end;fu 阅读全文
posted @ 2011-12-31 13:30 万一 阅读(2057) 评论(1) 推荐(0) 编辑
在 Delphi 中使用微软全文翻译的小例子
摘要:刚刚从博客园看到有朋友用 C# 做了这么个东西, 我用 Delphi 尝试了一下.需要先去申请一个 AppID: http://www.bing.com/toolbox/bingdeveloper/使用帮助在: http://msdn.microsoft.com/en-us/library/dd576287.aspxuses MsXML;{函数}function Translate(AAppID: string; AText: string; InLanguage: string='en'; OutLanguage: string='zh-CHS'): stri 阅读全文
posted @ 2011-11-14 17:59 万一 阅读(5702) 评论(18) 推荐(1) 编辑
关于禁止程序重复启动的另一种需要与实现
摘要:手头的程序需要禁止重复启动, 但需要保留新的、关闭旧的.我想还是从主窗口的类名下手吧; 写了一个函数, 在 OnCreate 中调用即可:{ 函数 }procedure CloseSameClassNameWindow(ACurrentWindow: HWND; const AClassName: string);var h: HWND; buf: array[0..255] of Char;begin h := ACurrentWindow; while h > 0 do begin h := GetWindow(h, GW_HWNDNEXT); GetClassNam... 阅读全文
posted @ 2011-10-12 00:31 万一 阅读(4573) 评论(6) 推荐(1) 编辑
关于三语 (简体、繁体、英语) 切换的尝试
摘要:在空白窗体上添加 PopupMenu1, 并添加几个测试用的菜单项, 分别命名为: m1、m2、m3、mCn、mBig、mEn; 激活 mCn 的 OnClick 事件和窗体的 OnCreate 事件.unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Menus;type TForm1 = class(TForm) PopupMenu1: TPopupMenu; m1: TMenuItem; m2: TMen 阅读全文
posted @ 2011-07-14 00:30 万一 阅读(3970) 评论(1) 推荐(0) 编辑
判断集合从属关系的练习: 是否同时按下了 Ctrl 和 Shift 键
摘要://不少鼠标与键盘事件用到了集合参数: Shift: TShiftState;TShiftState = set of (ssShift, ssAlt, ssCtrl, ssLeft, ssRight, ssMiddle, ssDouble, ssTouch, ssPen);{判断是否按下了 Ctrl 键: 方法一}procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);begin Text := ''; if ssCtrl in Shift then Text := 阅读全文
posted @ 2011-06-18 11:37 万一 阅读(3556) 评论(0) 推荐(1) 编辑
简单获取钢琴 88 个键的音高频率值
摘要:procedure TForm1.Button1Click(Sender: TObject);var i: Integer; f: Double;begin f := 440/2/2/2/2; for i := 0 to 87 do begin Memo1.Lines.Add(Format('%.3f', [f])); f := f * 1.0594630944; end;end;{*********27.50029.13530.86832.70334.64836.70838.89141.20343.65446.24948.99951.91355.00058.27061.735 阅读全文
posted @ 2011-06-14 15:15 万一 阅读(5060) 评论(6) 推荐(0) 编辑
解压 svgz 到 svg
摘要:手头的程序中需要解压 svgz 到 svg.之前我在手动解压时, 一般就用 WinRar, 所以曾经以为 svgz 是 zip 格式的(因为和 zip 的压缩率基本一致), 现在知道了它是 gzip 压缩格式.在解决这个问题之前, 曾经傻呵呵地找来 VclZip、ZipTV、7Zip 等相关组件... 等问题解决时, 实在没想到会是这样容易:可用 IdZLib 单元中的 TCompressionStream、TDecompressionStream 类,该单元还有更易用的 CompressStream()、CompressString()、DecompressStream() 等函数.压缩时可 阅读全文
posted @ 2011-06-12 22:57 万一 阅读(11220) 评论(2) 推荐(1) 编辑
获取 "斐波那契数列" 的函数
摘要:{ 斐波那契数列: 1、2、3、5、8、13、21、34、55、89、144 ... 等于前两数之和 }{ 昂纳多·斐波那契(Leonardo Fibonacci, 1170-1240, 意大利数学家) }uses Types;{参数 2 是要获取的总数}procedure fbnc(var A: TInt64DynArray; Count: Integer);var i: Integer;be... 阅读全文
posted @ 2010-05-10 11:08 万一 阅读(5234) 评论(5) 推荐(0) 编辑
Int64 与 Currency
摘要:procedure TForm1.Button1Click(Sender: TObject);var c: Currency; i: Int64 absolute c;begin c := 1234.5678; ShowMessage(IntToStr(i)); //12345678end;procedure TForm1.Button2Click(Sender: TObject);var... 阅读全文
posted @ 2010-05-03 23:54 万一 阅读(2996) 评论(0) 推荐(0) 编辑
在 API 函数中使用 PChar 参数的几种方法
摘要://以 GetWindowsDirectory 为例:{ 以静态数组做缓冲区 }procedure TForm1.Button1Click(Sender: TObject);var buf: array[0..MAX_PATH-1] of Char;begin GetWindowsDirectory(buf, SizeOf(buf)); ShowMessage(buf); { C:\\WIN... 阅读全文
posted @ 2010-04-26 16:51 万一 阅读(3130) 评论(4) 推荐(0) 编辑
从哪查找当前程序所有可用的环境变量?
摘要:当前程序所有可用的环境变量 = 系统环境变量 + 用户环境变量 + 当前程序环境变量.以前列出过一些, 但不全: http://www.cnblogs.com/del/archive/2009/02/22/1396164.html"系统环境变量" 与 "用户环境变量" 在: 我的电脑 - (右键)属性 - 高级 - 环境变量;"当前程序所有可用的环境变量" 在: IDE 菜单 - Tool... 阅读全文
posted @ 2010-01-19 22:00 万一 阅读(4216) 评论(5) 推荐(0) 编辑

1 2 下一页


点击右上角即可分享
微信分享提示