程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 2016/6/30 10:12:06 delphi7 tips,2016delphi7

2016/6/30 10:12:06 delphi7 tips,2016delphi7

編輯:Delphi

2016/6/30 10:12:06 delphi7 tips,2016delphi7


2016/7/4 0:41:58  倒敘
  1. for i:=7 downto 1do
    ....

     

2016/7/3 22:24:27 for in do
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 算法
  1. 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.

     

  2016/7/2 13:14:51 判斷是否為數字,是則返回數字,否則返回0 
比如我要判斷一個文本框裡輸入的字符串能不能轉換為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;

 

 

  2016/7/1 15:12:56  數字轉字符串
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. 如何讓窗體加載圖片:
  1. 改變窗體顏色:先選擇窗體,修改窗體的“color”屬性就可以了;
  2. 加入圖片,先在窗體上加入一個image控件,控件在“Additional”控件選項卡中;
  3. 修改image控件屬性:picture;在出現的窗口右下方有“load...”加入一張圖片即可;如果image顯示圖片全部就修改image的“stretch”屬性,改為“True”就可以了;
2. delphi中用Memo控件,F9執行時會顯示“memo1”,如何清除
  1. 在Lines屬性那裡清除
3.  您好!向您請教一個問題:我在delphi 7中運行一個程序,提示:file not found 'EditNew.dcu'
  1. 兩個辦法解決,不用你去設置的,任選其一;
  2. 1,把D:\ERP\dcu 文件下EditNew.dcu 文件復制到你的工程根目錄
  3. 2,把EditNew.dcu 復制到你的Delphi7安裝目錄的Lib文件夾下面,如我裝在D盤,就是在D:\Program Files\Borland\Delphi7\Lib 目錄下
  4. 按我說的去做,包你OK
2016/7/1 1:30:36   Delphi 字符串截取函數

如果要使用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);

 

 

 



  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved