2016/6/30 10:12:06 delphi7 tips
-
for i:=7 downto 1do ....
for betStart:=1 to 7 do ShowMessage(IntToStr(betStart));
Symptom: 2.You need to convert a float or double to a string in pascal 3. 4.Cause: 5.none 6. 7.Solution: 8.You can use the FunctionFloatToStr wich takes a float parameter.You can use the DoubleToStrfor converting a double. 9. 10.Here a little example: 11. 12.procedure TForm1.Button1Click(Sender:TObject); 13.var s : string; 14.var mydoubleD : double; 15.begin 16. mydoubleD :=3.14152341234234; 17. s :=FloatToStr( mydoubleD ); 18. 19.//you could as well use s in the ShowMessage:-) 20.ShowMessage('Your Double is: '+FloatToStr(mydoubleD)); 21.end; 22. 23. 24.Disclaimer: 25.The information provided in this document is intended for your information only.Lubby makes no claims to the validity of this information.Use of this information is at own risk!
-
https://github.com/fundamentalslib/fundamentals5
下载最新的package,然后找到Source\Utils\flchash.pas 文件,以及Source\flcinclude.inc 复制到安装目录的import下面
一个简单的例子 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, flchash, FlatUtils, FlatCtrls, StdCtrls; type TForm1 = class(TForm) FlatButton1: TFlatButton; FlatMemo1: TFlatMemo; FlatEdit1: TFlatEdit; FlatEdit2: TFlatEdit; procedure FlatButton1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FlatButton1Click(Sender: TObject); begin flatMemo1.Text := SHA512DigestToHexA(CalcHMAC_SHA512(flatEdit1.Text, flatEdit2.Text)); end; end.
比如我要判断一个文本框里输入的字符串能不能转换为integer类型,如果能,则返回转换后的整型数据,如果不能,则返回整数0,那么我就可以用strtointdef这个函数. 写法如下: 假设edit1.text:='1000'; 则strtointdef(edit1.text,0)返回值为1000. 如果edit1.text:='fdafds',则返回值为0. (如果你用strtoint(edit1.text)当edit1.text:='fdads'时会报错的)我们可以用strtointdef这个函数来判断一个文本框输入的是否是整数.
{ List Numberic } type TCharSet = set of Char; function StripNonConforming(const S: string;const ValidChars: TCharSet): string; var DestI: Integer; SourceI: Integer; begin SetLength(Result, Length(S)); DestI := 0; for SourceI := 1 to Length(S) do if S[SourceI] in ValidChars then begin Inc(DestI); Result[DestI] := S[SourceI] end; SetLength(Result, DestI) end; function StripNonNumeric(const S: string): string; begin Result := StripNonConforming(S, ['0'..'9']) end;
function DBGridAutoSize(mDBGrid: TDBGrid; mOffset: Integer = 15): Boolean; var I: Integer; begin Result := False; if not Assigned(mDBGrid) then Exit; if not Assigned(mDBGrid.DataSource) then Exit; if not Assigned(mDBGrid.DataSource.DataSet) then Exit; if not mDBGrid.DataSource.DataSet.Active then Exit; for I := 0 to mDBGrid.Columns.Count - 1 do begin if not mDBGrid.Columns[I].Visible then Continue; DBGridRecordSize(mdbgrid.Columns[i]); if Assigned(mDBGrid.Columns[I].Field) then mDBGrid.Columns[I].Width := Max(mDBGrid.Columns[I].Field.Tag, mDBGrid.Canvas.TextWidth(mDBGrid.Columns[I].Title.Caption)) + mOffset else mDBGrid.Columns[I].Width := mDBGrid.Canvas.TextWidth(mDBGrid.Columns[I].Title.Caption) + mOffset; mDBGrid.Refresh; // Application.ProcessMessages; end; Result := True; end; { DBGridAutoSize }
if Application.MessageBox('您好,确定要退出本程序吗', '提示', MB_OKCANCEL) = IDOK then Application.Terminate;
MessageBox对话框是比较常用的一个信息对话框,其不仅能够定义显示的信息内容、信息提示图标,而且可以定义按钮组合及对话框的标题,是一个功能齐全的信息对话框信息提示图标,而且可以定义按钮组合及对话框的标题,是一个功能齐全的信息对框。
1、函数原型及参数
function MessageBox(hWnd: HWND;Text,Caption:PChar;Type:Word):Integer;
hWnd:对话框父窗口句柄,对话框显示在Delphi窗体内,可使用窗体的Handle属性,否则可用0,使其直接作为桌面窗口的子窗口。
Text:欲显示的信息字符串。
Caption:对话框标题字符串。
Type:对话框类型常量。
该函数的返回值为整数,用于对话框按钮的识别。
2、类型常量
对话框的类型常量可由按钮组合、缺省按钮、显示图标、运行模式四种常量组合而成。
(1)按钮组合常量
MB_OK = $00000000; //一个确定按钮
MB_OKCANCEL = $00000001; //一个确定按钮,一个取消按钮
MB_ABORTRETRYIGNORE = $00000002; //一个异常终止按钮,一个重试按钮,一个忽略按钮
MB_YESNOCANCEL = $00000003; //一个是按钮,一个否按钮,一个取消按钮
MB_YESNO = $00000004; //一个是按钮,一个否按钮
MB_RETRYCANCEL = $00000005; //一个重试按钮,一个取消按钮
(2)缺省按钮常量
MB_DEFBUTTON1 = $00000000; //第一个按钮为缺省按钮
MB_DEFBUTTON2 = $00000100; //第二个按钮为缺省按钮
MB_DEFBUTTON3 = $00000200; //第三个按钮为缺省按钮
MB_DEFBUTTON4 = $00000300; //第四个按钮为缺省按钮
(3)图标常量
MB_ICONHAND = $00000010; //“×”号图标
MB_ICONQUESTION = $00000020; //“?”号图标
MB_ICONEXCLAMATION = $00000030; //“!”号图标
MB_ICONASTERISK = $00000040; //“i”图标
MB_USERICON = $00000080; //用户图标
MB_ICONWARNING = MB_ICONEXCLAMATION; //“!”号图标
MB_IConERROR = MB_ICONHAND; //“×”号图标
MB_ICONINFORMATION = MB_ICONASTERISK; //“i”图标
MB_ICONSTOP = MB_ICONHAND; //“×”号图标
(4)运行模式常量
MB_APPLMODAL = $00000000; //应用程序模式,在未结束对话框前也能切换到另一应用程序
MB_SYSTEMMODAL = $00001000; //系统模式,必须结束对话框后,才能做其他操作
MB_TASKMODAL = $00002000; //任务模式,在未结束对话框前也能切换到另一应用程序
MB_HELP = $00004000; //HelpButton
3、函数返回值
0 //对话框建立失败
idOk =1 //按确定按钮
idCancel =2 //按取消按钮
idAbout =3 //按异常终止按钮
idRetry =4 //按重试按钮
idIgnore =5 //按忽略按钮
idYes =6 //按是按钮
idNo =7 //按否按钮
例子:messagebox(0,'没有选择播放类型','错误',MB_ICONEXCLAMATION ); --Application.MessageBox('MessageBox','警告',MB_ICONWARNING+MB_YesNo); --MessageBox(Form1.Handle,'MessageBox','提示',MB_ICONINFORMATION+MB_OkCancel); --MessageBox(Form1.Handle,'MessageBox','提示‘,MB_ICONINFORMATION+MB_OkCancel+MB_DEFBUTTON2); -- if MessageBox(Form1.Handle,'MessageBox','提示',MB_ICONINFORMATION+MB_OkCancel)= idOk then begin ShowMessage('Ok'); end;
A:=IntToStr(123)
目前主流的delphi下的正则表达式,应该是 PerlRegEx 。 官方网站: http://www.regular-expressions.info/delphi.html 直接下载: http://www.regular-expressions.info/download/TPerlRegEx.zip 安装方法(我使用的delphi版本是 delphi2007): 1、先把解压的 TPerlRegEx 文件夹放在 Delphi 的根目录下的 Imports 目录中。 2、目前最新 For Win32 的版本是可以在 Delphi7,Delphi 2006,Delphi 2007,Delphi 2009 下使用。 我用的是2007,于是就打开了PerlRegExD2007.dpk ,在 Project Manager 窗口中的 PerlRegExD2007.bpl 上点击右键,执行 Install。这时在 Tool Palette 的列表中已经有了 TPerlRegEx,在 JGsoft 组。 3、Tools -> Options -> Environment Options -> Delphi Options -> Library-Win32 -> Library path -> 添加路径:$(BDS)\Imports\TPerlRegEx (注:就是刚才放置的路径)。 4、打开delphi根目录下 Imports\TPerlRegEx\pcre ,把 pcre3.dll 文件复制到 C:\WINDOWS\system32 文件夹下,这个文件夹里是windows系统存放 dll 文件的大本营。如果不复制pcre3.dll,在应用 TPerlRegEx 正则的时候,系统提示出错。 5、用delphi打开 Imports\TPerlRegEx 目录下的 pcre.pas 文件,找到 //{$DEFINE PCRE_STATICLINK} ,把之前的注释 // 删除;找到 {$DEFINE PCRE_LINKDLL} ,把它注释掉,即改为 //{$DEFINE PCRE_LINKDLL} 。注意:这点非常重要,如果不这样改的话,在软件开发完成后,分发到其他电脑上的时候,软件就会提示“缺少pcre3.dll错误”。这样修改的原因,是把正则直接封包到 exe 文件里,而不需要链接 pcre3.dll 了;封包进 exe,付出的代价是软件增大了 100KB 左右的大小,当然比起必须携带 pcre3.dll来说,这是有意义的付出。 6、可以使用了! 直接 uses PerlRegEx 或从 Tool Palette 添加都可以。 TPerlRegEx 安装设置完成后,就可以舒心地使用了,一些简单的使用方法如下: //查找是否存在 var reg: TPerlRegEx; begin reg := TPerlRegEx.Create(nil); reg.Subject := 'CodeGear Delphi 2007 for Win32'; reg.RegEx := '\d'; if reg.Match then ShowMessage('找到了') else ShowMessage('没找到'); FreeAndNil(reg); end; //替换一般字符串 var reg: TPerlRegEx; begin reg := TPerlRegEx.Create(nil); reg.Subject := '我爱DELPHI, 但Delphi不爱我!'; reg.RegEx := 'Delphi'; reg.Replacement := '◆'; reg.ReplaceAll; ShowMessage(reg.Subject); //返回: 我爱DELPHI, 但◆不爱我! FreeAndNil(reg); end; //分别显示找到的每一个和总数 var reg: TPerlRegEx; num: Integer; //用 num 来计数 begin reg := TPerlRegEx.Create(nil); reg.Subject := 'CodeGear Delphi 2007 for Win32'; reg.RegEx := '\d'; num := 0; while reg.MatchAgain do //MatchAgain 是下一个 begin ShowMessage(reg.MatchedExpression); //将分别显示: 2 0 0 7 3 2 Inc(num); end; ShowMessage(IntToStr(num)); //6 FreeAndNil(reg); end; //目标字符串的位置与长度 var reg: TPerlRegEx; begin reg := TPerlRegEx.Create(nil); reg.Subject := 'CodeGear Delphi 2007 for Win32'; reg.RegEx := 'Delphi'; while reg.MatchAgain do //很明显: 本例只能找到一个结果 begin ShowMessage(reg.MatchedExpression); //找到的字符串: Delphi ShowMessage(IntToStr(reg.MatchedExpressionOffset)); //它所在的位置: 10 ShowMessage(IntToStr(reg.MatchedExpressionLength)); //它的长度: 6 end; FreeAndNil(reg); end; // Matchedexpression_r 与Subexpression_rs[0] var reg: TPerlRegEx; begin reg := TPerlRegEx.Create(nil); reg.Subject := 'CodeGear Delphi 2007'; reg.RegEx := 'Delphi'; while reg.MatchAgain do begin ShowMessage(reg.Matchedexpression_r); //Delphi; 这是匹配到的内容 ShowMessage(reg.Subexpression_rs[0]); //Delphi; 也可以这样显示匹配到的内容 end; { Subexpression_rs 是一个数组: Subexpression_rs[1] 储存第 1 个表达式匹配的内容; Subexpression_rs[2] 储存第 2 个表达式匹配的内容; Subexpression_rs[n] 储存第 n 个表达式匹配的内容; Subexpression_rs[0] 储存整个表达式匹配的内容; Matchedexpression_r 表示的不过是 Subexpression_rs[0]. } FreeAndNil(reg); end; //提取子表达式匹配到的内容 var reg: TPerlRegEx; begin reg := TPerlRegEx.Create(nil); reg.Subject := 'abc A1111 BB222 CCC33 DDDD4'; reg.RegEx :='\b([A-D]+)([1-4]+)\b'; //这个表达式有两个子表达式构成 while reg.MatchAgain do begin ShowMessage(reg.Subexpression_rs[0]); //将分别显示: A1111 BB222 CCC33DDDD4 ShowMessage(reg.Subexpression_rs[1]); //将分别显示: A BB CCC DDDD ShowMessage(reg.Subexpression_rs[2]); //将分别显示: 1111 222 33 4 {另外: reg.Subexpression_rCount 是子表达式的个数; reg.Subexpression_rLengths[n] 是第 n 个表达式返回的字符串的长度; reg.Subexpression_rOffsets[n] 是第 n 个表达式返回的字符串在源字符串中的位置 } end; FreeAndNil(reg); end; //子表达式不能超过 MAX_SUBexpression_rS = 99 个, MAX_SUBexpression_rS 是TPerlRegEx 的内置常数. //设定搜索范围: Start、Stop var reg: TPerlRegEx; begin reg := TPerlRegEx.Create(nil); reg.Subject := 'ababab'; reg.RegEx := 'ab'; reg.Replacement := '◆'; reg.Start := 1; reg.Stop := 2; while reg.MatchAgain do begin reg.Replace; end; ShowMessage(reg.Subject); //返回: ◆abab reg.Subject := 'ababab'; reg.Start := 3; reg.Stop := 4; while reg.MatchAgain do begin reg.Replace; end; ShowMessage(reg.Subject); //返回: ab◆ab reg.Subject := 'ababab'; reg.Start := 5; reg.Stop := 6; while reg.MatchAgain do begin reg.Replace; end; ShowMessage(reg.Subject); //返回: abab◆ FreeAndNil(reg); end; // Replace var reg: TPerlRegEx; begin reg := TPerlRegEx.Create(nil); reg.RegEx := 'ab'; reg.Replacement := '◆'; reg.Subject := 'ababab'; reg.ReplaceAll; ShowMessage(reg.Subject); //返回: ◆◆◆ reg.Subject := 'ababab'; //下面四行程序, 相当于 reg.ReplaceAll; while reg.MatchAgain do begin reg.Replace; end; ShowMessage(reg.Subject); //返回: ◆◆◆ FreeAndNil(reg); end; { ReplaceAll 函数返回的是 Boolean; Replace 函数返回的是 Replacement 的值, 当然是不能赋值的, 它仅仅是返回值. } // Compile、Study var reg: TPerlRegEx; begin reg := TPerlRegEx.Create(nil); reg.RegEx := 'ab'; reg.Options := [preCaseLess]; reg.Compile; {编译表达式} reg.Study; {Study 方法会检查是否编译, 如果没有编译则执行 Compile} reg.Replacement := '◆'; reg.Subject := 'abAbaB'; reg.ReplaceAll; ShowMessage(reg.Subject); {返回: ◆◆◆} FreeAndNil(reg); end; { 编译表达式, 会加快执行速度、降低启动速度; 如果表达式比较复杂而又多次执行, 应该先编译; 编译内容包括表达式选项. } // EscapeRegExChars 函数可以自动为特殊字符加转义符号 \ var reg: TPerlRegEx; begin reg := TPerlRegEx.Create(nil); reg.Subject := 'C++Builer'; reg.RegEx :=reg.EscapeRegExChars('C+') + '{2}'; {相当于 'C\+{2}'} reg.Replacement := '◆'; reg.ReplaceAll; ShowMessage(reg.Subject); {返回: ◆Builer} FreeAndNil(reg); end; //字符串分割: Split var reg: TPerlRegEx; List: TStrings; begin List := TStringList.Create; reg := TPerlRegEx.Create(nil); reg.Subject := 'aaa,bbb,ccc,ddd'; reg.RegEx := ',';{这里可是运行相当复杂的分割符啊} reg.Split(List,MaxInt); {第一个参数读入的是 Subject; 第二个参数是分成多少份} { 输入一个最大整数, 表示能分多少就分多少} ShowMessage(List.Text); {返回: aaa bbb ccc ddd } FreeAndNil(reg); List.Free; end;
Example code : Illustrate the different flavours of the if statement begin // Illustrate a simple if statement that executes true If True then ShowMessage('True!'); // Illustrate the same, but with multiple actions If 1 = 1 then begin ShowMessage('We now have'); ShowMessage('multiple lines'); end; // Illustrate a simple if statement that fails If 1 = 2 then ShowMessage('1 = 2'); // Illustrate an if then else statement // Note the lack of a ';' after the 'then' clause If False then ShowMessage('True') else ShowMessage('False'); // Nested if statements - Delphi sensibly manages associations If true then If false then ShowMessage('Inner then satisfied') else ShowMessage('Inner else satisfied') else ShowMessage('Outer else satisfied') end; Show full unit code True! We now have multiple lines False Inner else satisfied
改变窗体颜色:先选择窗体,修改窗体的“color”属性就可以了;
加入图片,先在窗体上加入一个image控件,控件在“Additional”控件选项卡中;
修改image控件属性:picture;在出现的窗口右下方有“load...”加入一张图片即可;如果image显示图片全部就修改image的“stretch”属性,改为“True”就可以了;
在Lines属性那里清除
两个办法解决,不用你去设置的,任选其一;
1,把D:\ERP\dcu 文件下EditNew.dcu 文件复制到你的工程根目录
2,把EditNew.dcu 复制到你的Delphi7安装目录的Lib文件夹下面,如我装在D盘,就是在D:\Program Files\Borland\Delphi7\Lib 目录下
按我说的去做,包你OK
如果要使用LeftStr,RightStr,MidStr必需引用系统单元StrUtils; 声明变量Str:string; Str:=HelloWorld; 1,LeftStr(Str,2)=He;//从Str字符串变量的最左边(第一个字符包括第一个字符)开始截取2个字符; 2,RightStr(Str,2)=ld;//从Str字符串变量的最右边(第一个字符包括第一个字符)开始截取2个字符; 3,MidStr(Str,2,2)=el;//从Str字符串变量的中第2个字符开始取长度为2个字符的字符串; 另外有一个函数Copy 4,Copy(Str,2,2)=el;//从Str字符串变量的中第2个字符开始取长度为2个字符的字符串;(类似于MidStr);