Delphi не показывает подсказки объекта/компонента, когда я кодирую
Автор вопроса: FernandoSBSОтветов: 4
Если я не ошибаюсь, в 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.
Есть ли красная волнистая линия под названием компонента? Как насчет имени формы? Если да, то что подскажет всплывающая подсказка, когда вы наведете на нее курсор? Jerry Dodge 07.05.2013
Не могли бы вы указать источник вашей формы, пожалуйста? Jerry Dodge 07.05.2013
Или, по крайней мере, только предложение uses... все единицы, которые использует единица вашей формы. Jerry Dodge 07.05.2013
я отредактировал оригинал с кодом. FernandoSBS 07.05.2013
строка TextoCompleto:= EditTexto.Text; не будет компилироваться. Вы пропустили строку вроде procedure TForm1.ButtonGOClick(Sender: TObject); непосредственно перед ней? Если нет, обратите внимание, что EditTexto является компонентом формы типа TForm1. На него можно ссылаться только из методов класса TForm1. например ButtonGOClick или используя переменную или поле экземпляра, например переменную Form1 по умолчанию (Form1.EditTexto.Text). Без отсутствующей строки вы добавляете эквивалент раздела инициализации в код модуля. Gerry Coll 07.05.2013
Также обратите внимание, что SL, Count and AppWin, вероятно, должны быть локальными переменными. Gerry Coll 07.05.2013
У вас есть два разных стиля единиц измерения 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.
Новый файл vcl form unit в Delphi выглядит примерно так:
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 · рейтинг 1 · Dale M
Это называется завершением кода. Возможно, вы случайно отключили его в настройках. Посмотрите в разделе Инструменты/Параметры/Параметры редактора/Code Insight и убедитесь, что завершение кода отмечено.
Ответ 3 · Gerry Coll
Я немного предполагаю, предполагая, что этот код, вставленный выше, не отредактирован.
Я подозреваю, что вам нужно добавить 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.
Ответ 4 · FernandoSBS
Итак, как выяснили другие, проблема заключалась в моей структуре кодирования, которая была невероятно неправильной.
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**
Как легко заметить, я начал программировать без функции или процедуры. Вот почему "подсказки" (на самом деле называемые "Code Insights", как я также узнал с помощью других) не работали. Delphi не распознавала код как часть чего-либо и поэтому не могла дать представление о коде.