for i:=7 downto 1do ....
for betStart:=1 to 7 do ShowMessage(IntToStr(betStart));
2016/7/3 19:38:17 Howto convert a float or double to string in delphi
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!
2016/7/2 18:42:40 怎麼使用 HMAC Sha256 算法
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這個函數來判斷一個文本框輸入的是否是整數.
2016/7/2 12:25:50 提取字符串裡面的數字
{ 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;
2016/7/2 1:28:25 表格自動列寬
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 }
2016/7/1 20:53:36 詢問是否退出:
if Application.MessageBox('您好,確定要退出本程序嗎', '提示', MB_OKCANCEL) = IDOK then Application.Terminate;
2016/7/1 20:44:37 MessageBox 用法
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)
2016/7/1 12:26:00 Delphi正則表達式使用方法(TPerlRegEx)
目前主流的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;
2016/7/1 2:18:30 if command
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
1. 如何讓窗體加載圖片:
改變窗體顏色:先選擇窗體,修改窗體的“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);