Модераторы: Snowy, MetalFan, bems, Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не вызывается Code Completion... 
:(
    Опции темы
Aleks26
Дата 7.6.2012, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 12.3.2010

Репутация: нет
Всего: нет



Сегодня пробовал простейший пример из учебника и столкнулся с такой штукой: открываю новое приложение и после описания формы вставляю описания двух классов - родительского и дочернего
Код

Klass1 = class
 procedure proc;
end;

Klass2 = class(Klass1);
 procedure proc;
end;


Потом в секции implementation пробую сделать реализацию этих процедур. Как только я нажимаю Ctrl-пробел, получаю ошибку "Unable to invoke Code Completion due to errors in source code". Раньше все было нормально, т.е. высвечивались описанные классы, переменные, свойства и пр. Что могло случиться не могу понять. Подскажите.
PM MAIL   Вверх
DarkProg
Дата 7.6.2012, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Законченный романтик
***


Профиль
Группа: Завсегдатай
Сообщений: 1784
Регистрация: 11.3.2009
Где: Земля

Репутация: 4
Всего: 19



Реализация всех методов класса делается нажатием Shift+Ctrl+C и у вас появляются в секции implementation все ваши процедуры и функции с пустыми телами(только нужно чтобы курсор стоял где-нить в описании класса)

Проект даже не компилируется у вас сейчас, и проблема в том что где-то грубая ошибка вроде отсутствующей точки с запятой или отсутствия end, begin или ещё что-то... в общем смотрите где и что не так написали.
Либо полный код модуля в студию, возможно скачем в чём трабла.

Это сообщение отредактировал(а) DarkProg - 7.6.2012, 22:41


--------------------
"И твоя голова всегда в ответе за то куда сядет твой зад..."

"Я студент - скажите с какого я ВУЗа..."

 smile  smile  smile 
PM MAIL   Вверх
superVad
Дата 7.6.2012, 23:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 735
Регистрация: 6.4.2006
Где: Черкассы, Украина

Репутация: 7
Всего: 15



Цитата(Aleks26 @ 7.6.2012,  20:15)
Сегодня пробовал простейший пример из учебника и столкнулся с такой штукой: открываю новое приложение и после описания формы вставляю описания двух классов - родительского и дочернего
Код

Klass1 = class
 procedure proc;
end;

Klass2 = class(Klass1);
 procedure proc;
end;


Потом в секции implementation пробую сделать реализацию этих процедур. Как только я нажимаю Ctrl-пробел, получаю ошибку "Unable to invoke Code Completion due to errors in source code". Раньше все было нормально, т.е. высвечивались описанные классы, переменные, свойства и пр. Что могло случиться не могу понять. Подскажите.

А оно без virtual и override работать будет?
PM MAIL   Вверх
XperT
Дата 8.6.2012, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 269
Регистрация: 19.8.2006

Репутация: нет
Всего: 4



Цитата(superVad @ 7.6.2012,  23:12)
Цитата(Aleks26 @ 7.6.2012,  20:15)
Сегодня пробовал простейший пример из учебника и столкнулся с такой штукой: открываю новое приложение и после описания формы вставляю описания двух классов - родительского и дочернего
Код

Klass1 = class
 procedure proc;
end;

Klass2 = class(Klass1);
 procedure proc;
end;


Потом в секции implementation пробую сделать реализацию этих процедур. Как только я нажимаю Ctrl-пробел, получаю ошибку "Unable to invoke Code Completion due to errors in source code". Раньше все было нормально, т.е. высвечивались описанные классы, переменные, свойства и пр. Что могло случиться не могу понять. Подскажите.

А оно без virtual и override работать будет?

Будет, но компилятор выдаст хинт, что-то типа переопределен родительский метод
PM MAIL   Вверх
Aleks26
Дата 9.6.2012, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 12.3.2010

Репутация: нет
Всего: нет



Цитата

Либо полный код модуля в студию, возможно скачем в чём трабла.

Модуль выглядит так:
Код

unit unUnit1;

interface

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

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

  Tklass1 = class
   procedure proc;
  end;

  TKlass2 = class(Tklass1)
   procedure proc;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
 var1: Klass1;
 var2: Klass2;
begin
 var1:=Klass1.Create;
 var2:=Klass2.Create;

 var1.proc;
 var2.proc;

 var1.Free;
 var2.Free;

end;

Procedure  Tklass1.proc;
begin
  ShowMessage('родительский класс');
end;

Procedure TKlass2.proc;
begin
  ShowMessage('дочерний класс');
end;

end.

Причем, если я начинаю с реализации Button1Click, а потом реализую сначала Klass1.proc, а затем Klass2.proc, это сочетание клавиш работает. Работает оно и в ранее откомпилированных проектах. smile 
Но если я начинаю реализацию Klass1.proc, то сразу выскакивает эта ошибка smile 
PM MAIL   Вверх
Aleks26
Дата 9.6.2012, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 12.3.2010

Репутация: нет
Всего: нет



Еще немного уточню: если я оставляю описание лишь формы и родительского класса и обращаюсь к событию Button1Click, то там Ctrl-Space идет без проблем. Компилирую. Затем добавляю дочерний метод и проблем тоже никаких нет. 
Стоит мне оставить форму и оба класса, то при обращении к событию Button1Click выдается вышеупомянутая ошибка. Не может ли быть каких-то проблем с совместимостью компилятора Delphi 7 и "семерки Windows"? smile 
PM MAIL   Вверх
Keeper89
Дата 10.6.2012, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 9
Всего: 58



Aleks26, тот код, который ты приводишь просто не скомпилируется - название классов при реализации вообще другое (без T). Кроме того, в самом первом курсе кода в первом сообщении лишняя ; в TKlass2.
Так что приводи, реально что есть.


--------------------
PM MAIL WWW   Вверх
DarkProg
Дата 10.6.2012, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Законченный романтик
***


Профиль
Группа: Завсегдатай
Сообщений: 1784
Регистрация: 11.3.2009
Где: Земля

Репутация: 4
Всего: 19



Код

  Tklass1 = class
   procedure proc;
  end;

  TKlass2 = class(Tklass1)
   procedure proc;
  end;


Я вообще думал, что вы нам чисто условное тело классов показали показали... зачем вам такие классы, состоящие из одной процедуры? И как бы когда пишется наследник и предполагается, что функции будут иметь одинаковые имена, то у родителя метод виртуальный, а у наследника пишется override.

В чём трабла не знаю, у меня XE и вот такой код без проблем скомпилировался и работает, и я уже давно реализацию функций не пишу через Ctrl+Пробел, т.к. быстрее через Shift+Ctrl+C, но если была бы ошибка, то я бы её полчил, вот код модуля который скомпилился и работает

Код

unit Unit1;

interface

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

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

  Tklass1 = class
   procedure proc;
  end;
  TKlass2 = class(Tklass1)
   procedure proc;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ Tklass1 }

procedure Tklass1.proc;
begin
 ShowMessage('dfdfdf');
end;

{ TKlass2 }

procedure TKlass2.proc;
begin
  ShowMessage('dfdfdf');
end;

procedure TForm1.Button1Click(Sender: TObject);
Var s:TKlass2;
begin
  s:=TKlass2.Create;
  s.proc;
  S.Free;
end;


Добавлено через 1 минуту и 8 секунд
Код

var1: Klass1;
 var2: Klass2;
begin
 var1:=Klass1.Create;
 var2:=Klass2.Create;


ё-моё, а где же буковки T в именах?


--------------------
"И твоя голова всегда в ответе за то куда сядет твой зад..."

"Я студент - скажите с какого я ВУЗа..."

 smile  smile  smile 
PM MAIL   Вверх
Aleks26
  Дата 10.6.2012, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 12.3.2010

Репутация: нет
Всего: нет



Цитата

ё-моё, а где же буковки T в именах? 

Да, это ошибка, но суть не в ней.
Привожу пример, в котором все, что касается TKlass2 я закомментировал:
Код

unit Unit1;

interface

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

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

  TKlass1 = class
   procedure proc;
  end;

  {TKlass2 = class(TKlass1);
   procedure proc;
  end;}

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TKlass1.proc;
begin
 ShowMessage('ðîäèòåëüñêèé êëàññ');
end;

{procedure
 begin
  ShowMessage('äî÷åðíèé êëàññ');
 end;}

procedure TForm1.Button1Click(Sender: TObject);
var
 klass1: TKlass1;
// klass2: TKlass2;
begin
  klass1:=TKlass1.Create;
//  klass2:=TKlass2.Create;

  klass1.proc;
//  klass2.proc;

  klass1.Free;
//  klass2.Free;
end;

end.



При попытке реализации TKlass1.proc или TForm1.Button1Click никаких проблем при нажатии Ctrl-Space нет. Я компилирую этот усеченный проект, а потом снимаю комментарии и приступаю к реализации TKlass2.proc. Проблем тоже никаких.
Проблемы возникают, если я сразу сниму комментарии и попытаюсь реализовать Button1Click, TKlass1.proc или TKlass2.proc - я сразу получаю ошибку "Unable to invoke Code Completion due to errors in source code"  smile 
PM MAIL   Вверх
northener
Дата 10.6.2012, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 12
Всего: 20



Цитата(Aleks26 @  10.6.2012,  12:41 Найти цитируемый пост)
{procedure
 begin
  ShowMessage('äî÷åðíèé êëàññ');
 end;}

А это что такое?


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
Aleks26
Дата 10.6.2012, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 12.3.2010

Репутация: нет
Всего: нет



Цитата

Цитата(Aleks26 @  10.6.2012,  12:41 Найти цитируемый пост)
{procedure
 begin
  ShowMessage('äî÷åðíèé êëàññ');
 end;}

А это что такое? 

Так отображается кирилица. smile 
PM MAIL   Вверх
northener
Дата 10.6.2012, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 12
Всего: 20



Цитата(Aleks26 @  10.6.2012,  17:15 Найти цитируемый пост)
Так отображается кирилица. 

А я не про кириллицу. А про процедуру без имени.



--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
Keeper89
Дата 10.6.2012, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 9
Всего: 58



northener, у меня такое ощущение он код прям тут набирает, а не добавляет компилированный вариант из среды smile


--------------------
PM MAIL WWW   Вверх
northener
Дата 10.6.2012, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 12
Всего: 20



Цитата(Keeper89 @  10.6.2012,  18:18 Найти цитируемый пост)
у меня такое ощущение он код прям тут набирает, а не добавляет компилированный вариант из среды

Откуда тогда кракозябры? smile


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
Keeper89
Дата 10.6.2012, 23:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 9
Всего: 58



Цитата(northener @  10.6.2012,  19:03 Найти цитируемый пост)
Откуда тогда кракозябры? smile 

Ну эта часть видимо вставлена оттуда. Хотя надо было просто на русскую раскладку перейти перед копированием smile


--------------------
PM MAIL WWW   Вверх
northener
Дата 11.6.2012, 00:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 12
Всего: 20



Цитата(Keeper89 @  10.6.2012,  23:57 Найти цитируемый пост)
Ну эта часть видимо вставлена оттуда.

Имхо, всё "вставлено оттуда".  Просто автор по причине незнания аглицкого не может понять смысл сообщения "Unable to invoke Code Completion due to errors in source code".
Ну и в добавок автор полагает, что Code Completion позволит ему написать программу не вникая ни во что! smile

Добавлено через 4 минуты и 1 секунду
Нажал бы Ctrl+F9 или F9 и IDE ему бы показала, где у него ошибка в коде.


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
Aleks26
  Дата 11.6.2012, 09:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 12.3.2010

Репутация: нет
Всего: нет



Я прошу прощения. Ошибка была в том, что после первой строки объявления дочернего класса стояла точка с запятой:
Код

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

  TKlass1 = class
   procedure proc;
  end;

  TKlass2 = class(TKlass1);
   procedure proc;
  end;


Прошу всех прощения за беспокойство и спасибо всем за ответы. smile 
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1171 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.