当我编写代码时,Delphi没有显示对象/组件“提示”

时间:2013-05-07 00:40:25

标签: delphi delphi-7

如果我没有弄错,delphi能够在您插入一个组件名称之后显示一个选项列表,然后输入"。" (点)在更多参数之前。

我的delphi 7在"。"

之后没有显示此列表

例如:当我进入

form1.edit1.

它应该显示" TEdit"的选项列表。零件。没有发生,有什么不对?

代码:

unit Banri;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Clipbrd;

type
  TForm1 = class(TForm)
    EditTexto: TEdit;
    ButtonGO: TButton;
    procedure ButtonGOClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  SL: TStringList;
  Count: Integer;
  Appwin : hWnd;

implementation

{$R *.dfm}

  var
  TextoCompleto: String;



begin
  TextoCompleto:= EditTexto.Text;
  Appwin:= FindWindow(PChar(0),'Banrisul');
  if Appwin <> 0 then
  begin
      StringReplace(TextoCompleto, '.', '', [rfReplaceAll, rfIgnoreCase]);

      SL:= TStringList.Create;
      try
        ExtractStrings([' '], [], PChar(TextoCompleto), SL);
        WriteLn(SL.Text);
        ReadLn;
      finally
        SL.Free;
  end;
      Count:= 0;
      while Count <> SL.Count - 1 do
        begin
          Clipboard.AsText:= SL[Count];; //place text in clipboard
          //if Clipboard.HasFormat(CF_TEXT) then
          //do something with text
          ShowMessage(Clipboard.AsText);
          Clipboard.AsText:= SL[Count + 1];; //place next line text in clipboard
          //if Clipboard.HasFormat(CF_TEXT) then
          //do something with text
          inc(Count);
        end; //while Count <> SL.Count - 1 do
      SL.Free;
  end; //if Appwin <> 0 then


end.

4 个答案:

答案 0 :(得分:1)

它被称为代码完成。您可能无意中将其关闭了。在Tools / Options / Editor Options / Code Insight下查看,并确保选中Code Completion。

答案 1 :(得分:1)

您将两种不同的Delphi单元样式混合为一种。您正在使用的单位是表单背后的单位(.pas)文件。但是,项目主文件(.dpr)具有不同的样式。

项目的主文件是唯一应包含begin..end.部分的文件。另一方面,其余单元必须有implementation部分,其中实际代码驻留在多个函数/过程/方法等中。

因此,在您的情况下,您需要保持默认表单的单位默认情况下的创建方式。

新的Delphi 主项目文件如下所示:

program Project1;

uses
  Vcl.Forms,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.

新的Delphi 标准单元文件看起来像这样:

unit Unit2;

interface

implementation

end.

新的Delphi vcl表单元文件看起来像这样:

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

end.

如果你实施任何代码......

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure DoSomething;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  Form1.DoSomething;
end;

procedure TForm1.DoSomething;
begin
  //Do Something...

end;

end.

您可能犯的一个错误是您添加到表单单元的原始代码采用了示例控制台应用程序的形式,这与VCL Forms应用程序不同。控制台应用程序主要基于命令提示符,这对于演示示例代码似乎非常常见。但是,您不应该将该代码样式与任何其他标准单元样式混淆。

答案 2 :(得分:0)

我猜这里有点,假设上面粘贴的代码是未经编辑的。

我怀疑您需要做的是在代码中的第一个procedure TForm1.ButtonGOClick(Sender: TObject);之前添加begin

unit Banri;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Clipbrd;

type
  TForm1 = class(TForm)
    EditTexto: TEdit;
    ButtonGO: TButton;
    procedure ButtonGOClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ButtonGOClick(Sender: TObject); // <--- added line
var
  SL: TStringList;                               // <-- moved variables from global to local scope. Form1 needs to remain global
  Count: Integer;
  Appwin : hWnd;
  TextoCompleto: String;
begin
  TextoCompleto:= EditTexto.Text;
  Appwin:= FindWindow(PChar(0),'Banrisul');
  if Appwin <> 0 then
  begin
      StringReplace(TextoCompleto, '.', '', [rfReplaceAll, rfIgnoreCase]);

      SL:= TStringList.Create;
      try
        ExtractStrings([' '], [], PChar(TextoCompleto), SL);
        WriteLn(SL.Text);
        ReadLn;
      finally
        SL.Free;
  end;
      Count:= 0;
      while Count <> SL.Count - 1 do
        begin
          Clipboard.AsText:= SL[Count];; //place text in clipboard
          //if Clipboard.HasFormat(CF_TEXT) then
          //do something with text
          ShowMessage(Clipboard.AsText);
          Clipboard.AsText:= SL[Count + 1];; //place next line text in clipboard
          //if Clipboard.HasFormat(CF_TEXT) then
          //do something with text
          inc(Count);
        end; //while Count <> SL.Count - 1 do
      SL.Free;
  end; //if Appwin <> 0 then


end.

答案 3 :(得分:0)

正如其他人已经发现问题出现在我的编码结构中,这是令人难以置信的错误。

unit Banri;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Clipbrd;

type
  TForm1 = class(TForm)
    EditTexto: TEdit;
    ButtonGO: TButton;
    procedure ButtonGOClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  SL: TStringList;
  Count: Integer;
  Appwin : hWnd;

**implementation

{$R *.dfm}

  var
  TextoCompleto: String;



begin
  TextoCompleto:= EditTexto.Text;
  Appwin:= FindWindow(PChar(0),'Banrisul');
  if Appwin <> 0 then**

很容易看到我在没有功能或程序的情况下开始编码。这就是为什么“提示”(实际上称为“代码见解”,因为我也在其他人的帮助下发现)不起作用。 Delphi没有将代码视为任何内容的一部分,因此无法提供代码见解。