DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: tongxin21cn
今日帖子: 14
在线用户: 30
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 emailx45 (emailx45) ▲▲▲△△ -
注册会员
2019/7/12 2:11:07
标题:
InLine variable declaration WORKS! if used correctly 浏览:232
加入我的收藏
楼主: unit Unit1;

interface

uses
  Winapi.Windows,
  Winapi.Messages,
  System.SysUtils,
  System.Variants,
  System.Classes,
  Vcl.Graphics,
  Vcl.Controls,
  Vcl.Forms,
  Vcl.Dialogs,
  Vcl.StdCtrls;

type
  TForm1 = class(TForm)
    ComboBox1: TComboBox;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    private
      procedure prcPrivateProc(lVarA: Integer);
    public
      procedure prcPublicProc(lVarB: Integer);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
//
{
  //****************************************************************
  procedure prcSub_Procedure1;
  begin
  s := s + ', i dont work in prcSub_Procedure1! See my definition is below (later)';
  end;
  //****************************************************************
}
//
var // <---
  // i: Integer;  // if defined here, will conflict with "i" defined in "var inline below"
  //
  s: String; // scope global to your procedure, same if used in sub-procedures defined here!
  lUrl: String;
  //
  //
  // ****************************************************************
  procedure prcSub_Procedure2;
  begin
    s := s + ', im re-writed in prcSub_Procedure2! See my definition is above (before)';
  end;

// ****************************************************************
begin
  //
  // DONT WORRY ABOUT "line red" in your editor screen!
  //
  lUrl := 'http://www.idera.com&#39;;
  //
  ComboBox1.Items.Clear;

  begin // ITS NOT NECESSARY, AND DONT HELP YOU AND NOTHING HERE!
    //

    var  ext := LowerCase(ExtractFileExt(lUrl));
    ShowMessage(ext); // works!
    prcPrivateProc(ext.ToInteger()); // works!
    prcPublicProc(ext.ToInteger()); // works!

    for var i := 0 to 10 do { var "inline" only works on the "block" is defined! }
    begin // "BEGIN_NECESSARY" --> if commented, i is "out of scope" too
      //
      ComboBox1.Items.Add(Format('Value to i = %d', [i]));
      //
      ComboBox1.ItemIndex := i; // "BEGIN_NECESSARY" (above) is essential to works! and below definitions
      //
      //
      prcPrivateProc(i); // works! "i" on the scope!
      //
      prcPublicProc(i); // works! "i" on the scope!
      //
      {
       if (i = 4) then // works too, with BEGIN
        break;
       }
      //
      if (i = 10) then
        ShowMessage(Format('Value to i = %d', [i])); // works! "i" on the scope!
      //
    end; // end to "BEGIN_NECESSARY"
    //
    // prcPrivateProc(i); // dont works! "i" out of scope!
    //
    // prcPublicProc(i); //  ont works! "i" out of scope!
    //
    // ShowMessage(Format('Value to i = %d', [i]));  // dont works! "i" out of scope!
    //
  end;
  //
  // prcPrivateProc(i); // dont works! "i" out of scope!
  //
  // prcPublicProc(i);  // dont works! "i" out of scope!
  //
  // ShowMessage(Format('Value to i = %d', [i]));  // dont works! "i" out of scope!
  //
end;

procedure TForm1.Button2Click(Sender: TObject);
//
{
  //****************************************************************
  procedure prcSub_Procedure1;
  begin
  s := s + ', i dont work in prcSub_Procedure1! See my definition is below (later)';
  end;
  //****************************************************************
}
//
var // <---
  // i: Integer;  // if defined here, will conflict with "i" defined in "var inline below"
  //
  s: String; // scope global to your procedure, same if used in sub-procedures defined here!
  lUrl: String;
  //
  //
  // ****************************************************************
  procedure prcSub_Procedure2;
  begin
    s := s + ', im re-writed in prcSub_Procedure2! See my definition is above (before)';
  end;

// ****************************************************************
begin
  //
  // DONT WORRY ABOUT "line red" in your editor screen!  HERE NONE RED-LINE APPEARS!
  //
  lUrl := 'http://www.idera.com&#39;;
  //
  ComboBox1.Items.Clear;
  //
  // begin // BEGIN_1     { uncomment here and showmessage and my procedure prcPrivate and prcPublic}
  //
  var   i := Random(20); { var "inline" only works on the "block" is defined! }
  var   ext := LowerCase(ExtractFileExt(lUrl));
  //
  begin // BEGIN_2   // its not necessary to ShowMessage or my procedure prcPrivate and prcPublic works
    //
    ComboBox1.Items.Add(Format('Value to i = %d', [i]));
    //
    ComboBox1.ItemIndex := i; // "BEGIN_NECESSARY" (above) is essential to works! and below definitions
    //
    //
    prcPrivateProc(i); // works! "i" on the scope!
    //
    prcPublicProc(i); // works! "i" on the scope!
    //

    if (i = 10) then
      ShowMessage(Format('Value to i = %d', [i])); // works! "i" on the scope!
    //
  end; // end to BEGIN_2
  //
  prcPrivateProc(i); // works to BEGIN_1 and BEGIN_2 defined
  //
  prcPublicProc(i); // works to BEGIN_1 and BEGIN_2 defined
  //
  ShowMessage(Format('Value to i = %d', [i])); // works to BEGIN_1 and BEGIN_2 defined
  //
  // end; // end to BEGIN_1
  //
  prcPrivateProc(i); // dont works! if BEGIN_1 defined, then "i"/"ext" out of scope!
  //
  prcPublicProc(i); // dont works! if BEGIN_1 defined, then "i"/"ext" out of scope!
  //
  ShowMessage(Format('Value to i = %d', [i])); // dont works! if BEGIN_1 defined, then "i"/"ext" out of scope!
  //
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  ShowMessage('destroyng....');
end;

procedure TForm1.prcPrivateProc(lVarA: Integer);
begin
  ShowMessage(Format('lVarA = %d', [lVarA]));
end;

procedure TForm1.prcPublicProc(lVarB: Integer);
begin
  ShowMessage(Format('lVarB = %d', [lVarB]));
end;

end.


按此在新窗口浏览图片

按此在新窗口浏览图片
----------------------------------------------
The higher the degree, the greater the respect given to the humblest!
作者:
男 earthsbest (全能中间件) ▲▲△△△ -
注册会员
2019/7/12 9:04:26
1楼: I like the concept and I have played around with it for some time now. 

HOWEVER ... it annoys me that the editor shows inline code as being erroneous, with red wavy lines underneath.

Is the inline variable error highlighting fixed in the Delphi 10.3.2?
----------------------------------------------
Delphi4Linux交流群:734515869 http://www.cnblogs.com/rtcmw
作者:
男 emailx45 (emailx45) ▲▲▲△△ -
注册会员
2019/7/12 10:51:30
2楼: ROADMAP:

https://community.idera.com/developer-tools/b/blog/posts/may-2019-rad-studio-roadmap-commentary-from-product-management

https://community.idera.com/developer-tools/b/blog/posts/rad-studio-roadmap-may-2019

Who's knows? YES! or NOT!
----------------------------------------------
The higher the degree, the greater the respect given to the humblest!
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v2.1 版权所有 页面执行42.96875毫秒 RSS