Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
botsik
262 / 262 / 140
Регистрация: 05.06.2016
Сообщений: 1,247
Записей в блоге: 1
1

Ошибка: Undeclared identifier: 'speedbutton1'

04.09.2016, 10:44. Показов 1671. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
При разработке приложения столкнулся с проблемой. В нужно выполнить действия в разных местах. Решил создать процедуру и залить туда весь нужный мне код. При компилировании жалуется на имена компонентов. Что-то типа такого:
Код
[Error] un_main.pas(292): Undeclared identifier: 'speedbutton1'
Прописал все эти имена в скобки:
Delphi
1
2
procedure setsetting(image1:Timage; memo1,memo2:Tmemo;idHTTP1:TidHTTP;
image2,image3,image4:Timage {и так далее и тому подобное});
Вроде бы проблема решена, но все равно не идёт из-за ошибки в этом месте:
Delphi
1
2
3
4
5
for i := 0 to ComponentCount - 1 do
begin
if (Components[i] is TLMDspeedbutton) then
(Components[i] as TLMDSpeedbutton).UsePNGGlyph:=true;
end;
Код ошибки:
Код
[Error] un_main.pas(314): Undeclared identifier: 'ComponentCount'
[Error] un_main.pas(316): Undeclared identifier: 'Components'
[Error] un_main.pas(355): Operator not applicable to this operand type
...
Помогите новичку)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.09.2016, 10:44
Ответы с готовыми решениями:

Ошибка: Undeclared identifier
Добрый день! Не понимаю из-за чего возникает ошибка: Unit13.pas(104): Undeclared identifier:...

Ошибка Undeclared identifier
Здравствуйте, пожалуйста, помогите найти причину ошибку в программе. Прога выводит все номера...

Ошибка: Undeclared identifier
не понимаю в чем ошибка, ссылки настроены , почему то выдает Undeclared...

Ошибка Undeclared Identifier
Помогите пожалуйста. При компиляции выводит ошибку Undeclared Identifier: "AddXY". Что делать?...

5
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
04.09.2016, 10:59 2
Лучший ответ Сообщение было отмечено cfbogd как решение

Решение

Объявите процедуры в разделе interface
примерно так.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
type
  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure aaa(n:integer); //например здесь
  private
    { Private declarations }
  public
 
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
procedure TForm1.aaa(n:integer);
var i:Integer;
begin
Label1.Caption:='';
for i:=1 to n do
Label1.Caption:=Label1.Caption+chr(65+random(26));
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
aaa(25);
end;
Добавлено через 4 минуты
Если объявлять в разделе implementation, то так.
Delphi
1
2
3
4
5
6
7
8
9
10
11
procedure aaa(n:integer);
var i:Integer;
begin
Form1.Label1.Caption:='';
for i:=1 to n do
Form1.Label1.Caption:=Form1.Label1.Caption+chr(65+random(26));
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
aaa(25);
end;
1
botsik
262 / 262 / 140
Регистрация: 05.06.2016
Сообщений: 1,247
Записей в блоге: 1
04.09.2016, 12:36  [ТС] 3
Вы меня неправильно поняли... я не хочу дублировать код на каждую кнопку, а сделать процедуру и вызвать ее одной строчкой кода.
Например:
Delphi
1
2
3
4
procedure Tfm_main.SpeedButton1Click(Sender: TObject);
begin
setsetting;
end;
Добавлено через 5 минут
записал в interface, процедуру прочитало, но стоит на строке, которую я указал выше.

Цитата Сообщение от cfbogd Посмотреть сообщение
procedure setsetting(image1:Timage; memo1,memo2:Tmemo;idHTTP1:TidHTTP; image2,image3,image4:Timage {и так далее и тому подобное});
то что в скобках я удалил

Добавлено через 1 минуту
Все, запустилось

Благодарю за помощь!
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
04.09.2016, 12:53 4
Цитата Сообщение от cfbogd Посмотреть сообщение
то что в скобках я удалил
Это параметры и их не удалять нужно, а заменять на фактические.
1
botsik
262 / 262 / 140
Регистрация: 05.06.2016
Сообщений: 1,247
Записей в блоге: 1
06.09.2016, 19:03  [ТС] 5
продолжаю тему, ибо без ошибки у меня не обошлось.

Я хочу сделать что то типа такого (пример) :
Delphi
1
2
3
4
5
6
7
procedure setsetting;
var   i:integer;
begin
button1.caption:='12';
memo1.Lines.Strings[0]:='95';
image1.Visible:=true;
end;
а потом в нужном мне месте прописать
Delphi
1
setsetting;
опишите плиз детально, а то я не понимаю этих процедур, что куда вводить. Да и что в скобки после объявления процедуры писать.
Заранее спасибо за ответ.
0
Модератор
9260 / 6038 / 2379
Регистрация: 21.01.2014
Сообщений: 25,802
Записей в блоге: 3
07.09.2016, 07:12 6
Лучший ответ Сообщение было отмечено cfbogd как решение

Решение

cfbogd, Вам бы следовало для начала ознакомиться с базовыми концепциями ООП. Тема обширная, в двух словах на форуме не рассказать, поэтому придется книжку прочесть. А конкретно по Вашему вопросу в двух словах скажу:
Есть у Вас форма, на этой форме находятся различные компоненты. Все это объекты, описанные в различных классах. Но если класс формы описан непосредственно в Вашем модуле, то классы остальных компонентов описаны в других файлах. Чтобы получить доступ к описанию этих объектов, мы подключаем к своему проекту эти самые другие файлы. Для этого и используется секция uses
Каждый объект может реагировать на определенные системные события: список этих событий можно посмотреть в инспекторе объектов на закладке Events. Реакция объекта на событие описывается в специальной процедуре и называется методом класса.
Все компоненты, лежащие на форме, принадлежат этой самой форме и являются по отношению к ней дочерними объектами. Сама же форма является родительским объектом для всех объектов расположенных на ней. Иными словами, все конкретные объекты, их свойства и методы - все это включено в класс формы. Внутри класса все объекты могут "видеть" друг друга, обращаться к свойствам и методам других компонентов.
Теперь о Вашей проблеме: когда Вы пишите свою процедуру/функцию - она находится за пределами класса формы. Это означает, что все объекты, описанные в классе, для этой процедуры не доступны: она их просто не "видит", объекты "в домике"
Есть два пути решения:
1. Обратиться к "родителю", чтобы тот "дал разрешение пообщаться" с дочерним объектом: т.е. вместо прямого обращения
Delphi
1
button1.caption:='12';
Вы пишете:
Delphi
1
Form1.button1.caption:='12';

Не по теме:

Все как в армии: стоит твой непосредственный командир и левый дядя, старше по званию. И вот чтобы пообщаться со своим, так тебе необходимым в данный момент лейтенантом, ты обращаешься к этому нафиг тебе не нужному майору:
"Товарищ майор, разрешите обратиться к товарищу лейтенанту..." Так и тут.


2. Сделать свою процедуру методом класса.
включив свою процедуру в класс, мы добьемся того, что все объекты класса, их свойства и методы станут доступны для обращения: процедура становится "своей", а своим позволено гораздо больше, чем чужим
Как это реализовать:
1. Поместить описание процедуры в раздел private или public класса формы
Delphi
1
2
3
4
5
6
7
8
9
type
  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    procedure setsetting;
  public
  end;
в разделе реализации заголовок Вашей процедуры должен выглядеть не просто так:
Delphi
1
2
3
4
procedure setsetting;
begin
...
end;
а с указанием класса, к которому отныне принадлежит наша процедура
Delphi
1
2
3
4
procedure Form1.setsetting;
begin
...
end;
Все это изложено в крайнем приближении и упрощении, но суть, я думаю, ясна.

Не по теме:

Не знаю, зачем все это пишу, если Puporev все это показал еще во 2-м посте

1
07.09.2016, 07:12
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.09.2016, 07:12
Помогаю со студенческими работами здесь

Ошибка: Undeclared identifier 'i'
begin t:=TStringList.Create; if OpenDialog1.Execute then t.LoadFromFile(OpenDialog1.FileName);...

Ошибка: Undeclared identifier: 'this'
как обратиться к экземпляру класса из метода этого экземпляра? this не знает что такое

Ошибка undeclared identifier
дана вспомогательная функция, которая при выборе какой-либо строчки из комбобокса, присваивает...

Ошибка: Undeclared identifier
День добры Гуру!!! Нужна помощь. Выполняю лабораторную на сессию, до этого с Дэлфи не сталкивался....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru