zoukankan      html  css  js  c++  java
  • 2016/6/30 10:12:06 delphi7 tips

    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,然后找到SourceUtilsflchash.pas 文件,以及Sourceflcinclude.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)ImportsTPerlRegEx (注:就是刚才放置的路径)。
    4、打开delphi根目录下 ImportsTPerlRegExpcre ,把 pcre3.dll 文件复制到 C:WINDOWSsystem32 文件夹下,这个文件夹里是windows系统存放 dll 文件的大本营。如果不复制pcre3.dll,在应用 TPerlRegEx 正则的时候,系统提示出错。
    5、用delphi打开 ImportsTPerlRegEx 目录下的 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   :='([A-D]+)([1-4]+)'; //这个表达式有两个子表达式构成
    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:ERPdcu 文件下EditNew.dcu 文件复制到你的工程根目录
    3. 2,把EditNew.dcu 复制到你的Delphi7安装目录的Lib文件夹下面,如我装在D盘,就是在D:Program FilesBorlandDelphi7Lib 目录下
    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);
    
     

     

     



  • 相关阅读:
    51nod 1113 矩阵快速幂 如题目
    poj Raising Modulo Numbers 快速幂模板(取膜)
    bzoj 1503: [NOI2004]郁闷的出纳员 平衡树
    codevs 1063 合并果子 优先队列相关
    bzoj 3224: Tyvj 1728 普通平衡树 Treap模版
    快排模板
    hdu 4353 统计点在三角形内的个数
    hdu 3264 圆的交+二分
    hdu 3685 多边形重心+凸包
    hdu 3992 AC自动机上的高斯消元求期望
  • 原文地址:https://www.cnblogs.com/topshooter/p/delphi7_tips.html
Copyright © 2011-2022 走看看