Модераторы: 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   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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