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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> процедура в dpr-файле, ошибка при описании процедуры 
V
    Опции темы
Kusik
Дата 18.11.2009, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 9.12.2005
Где: Харьков

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



Есть бесформенный проект. В теле между begin..end создаю форму, панель и кнопки (массив кнопок). Но как дошел до присвоения процедуры на OnClick при попытке описать процедуру, которая должна выполнятся на нажатие кнопки (любой в массиве) вылазит следующая ошибка:

Statement Expected but 'PROCEDURE' found

тело dpr-файла выглядит следующим образом:

Код

program blablabla;

uses ...;

var
 ...
 btns:array[1..15] of tButton;

begin

 procedure click;   //<-тут и вылазит эта ошибка
 begin
  //чтото делаем
 end;
 ...
 //Динамическое создание формы, панели и в цикле кнопок
 btns[i].OnClick:=click; //тут естественно тоже ошибка
 ...
end;


Подскажите, что я делаю не так или чего не хватает?


M
Rrader
Пользуйтесь кнопкой "Код" для подсветки синтаксиса!


Это сообщение отредактировал(а) Rrader - 19.11.2009, 15:43
PM MAIL ICQ   Вверх
Демо
Дата 18.11.2009, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(Kusik @  18.11.2009,  17:59 Найти цитируемый пост)
procedure click;   //<-тут и вылазит эта ошибка begin  //чтото делаем end;


Обработчик должен быть объектного типа:

Код

  TDummyClass=class
    procedure Click(Sender: TObject);
  end;
...

var
  Dummy: TDummyClass;
...

btns[i].OnClick := Dummy.Click;



--------------------
    
PM MAIL ICQ Skype   Вверх
Kusik
Дата 18.11.2009, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 9.12.2005
Где: Харьков

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



все равно, таже ошибка. может нехватает какойнить директивы. это не пас-файл.
делал класс левый, и ему присваивал эту процедуру, но все равно, даже если так написать после бегина:

Код

...
begin

 procedure Dummy.click(Sender: TObject);    //чезанах?!1
 begin
  ShowMessage('  ');
 end;

то ошибка таже и повторяется



Это сообщение отредактировал(а) Rrader - 19.11.2009, 15:43
PM MAIL ICQ   Вверх
Демо
Дата 18.11.2009, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Блин, ты ж наверняка не первый раз видишь код для реализации класса.
Код

procedure TDummyClass.Click(Sender: TObject);
begin
  ShowMessage('ok');
end;



--------------------
    
PM MAIL ICQ Skype   Вверх
Kusik
Дата 18.11.2009, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 9.12.2005
Где: Харьков

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



ну ладно, написал не так. да. не первый раз конечно же. ошибка говорит о том что чегото нехватает. а чего  хз. как не пиши эту процедуру, хоть относительно класса, хоть отфона, ошибка та же. уже сварился%)
PM MAIL ICQ   Вверх
Демо
Дата 18.11.2009, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Kusik, 

Ну так получил нужный результат или нет?

Добавлено @ 19:43
Тьфу... Понял, что ЕЩЁ у тебя не получается.

В файле проекта консольного приложения нет секции implementation.

Если у тебя есть модуль отдельный - включи фиктивный класс в него, реализацию тоже там сделай.
Или создай смодуль с одним этим классом...

Добавлено @ 19:45
Код

unit Unit2;

interface

type

  TDummyClass=class
    procedure Click(Sender: TObject);
  end;

implementation

{ TDummyClass }

procedure TDummyClass.Click(Sender: TObject);
begin
  //В качестве Sender будет передаваться твой Btns[i]
end;

end.



А в файле проекта всё остаётся так же:

Код

var
  Dummy: TDummyClass;
...
Btns[i].OnClick := Dummy.Click;


Это сообщение отредактировал(а) Демо - 18.11.2009, 19:47


--------------------
    
PM MAIL ICQ Skype   Вверх
Frees
Дата 18.11.2009, 22:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Код

var
 ...
 btns:array[1..15] of tButton;


procedure ClickBtn(Sender: TObject);   //<-тут уже НЕ вылазит эта ошибка
 begin
  //чтото делаем
 end;

begin
....
 @btns[i].OnClick:=@ClickBtn; 
....
end.


Это сообщение отредактировал(а) Frees - 18.11.2009, 22:53


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
kami
Дата 19.11.2009, 01:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(Frees @  18.11.2009,  22:50 Найти цитируемый пост)
//<-тут уже НЕ вылазит эта ошибка

Синтаксически, может и не вылазит. 
Но как быть с параметром Self, неявно передаваемым при вызове любого метода объекта?
PM MAIL WWW   Вверх
Frees
Дата 19.11.2009, 07:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(kami @  19.11.2009,  04:55 Найти цитируемый пост)
Но как быть с параметром Self, неявно передаваемым при вызове любого метода объекта?

согласен, self будет nil, но Sender будет правильный 


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
CodeMonkey
Дата 19.11.2009, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Frees, а ты вообще свой код проверял? smile  указатель (4 байта) <-> метод (8 байт).

Добавлено через 5 минут и 36 секунд
Тыц

Цитата(Kusik @  18.11.2009,  18:39 Найти цитируемый пост)
ошибка говорит о том что чегото нехватает. а чего  хз.

Текст ошибки, как и полный код, являются военной тайной?



--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Frees
Дата 19.11.2009, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(CodeMonkey @  19.11.2009,  16:13 Найти цитируемый пост)
Frees, а ты вообще свой код проверял

проверял работает

Добавлено @ 14:11
Цитата
@btns[i]....



Это сообщение отредактировал(а) Frees - 19.11.2009, 14:12


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
CodeMonkey
Дата 19.11.2009, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(Frees @  19.11.2009,  14:07 Найти цитируемый пост)
работает

 smile  и как же это это работает?


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Frees
Дата 19.11.2009, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(CodeMonkey @  19.11.2009,  17:28 Найти цитируемый пост)
smile  и как же это это работает?

не совсем конечно правельно в клике не будет self а так все норм.

вот так я проверял...может что и недоглядел...
Код

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

var
  Form1: TForm1;

implementation

{$R *.dfm}
procedure BtnClick(Sender: TObject);
begin
  ShowMessage('BtnClick');
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  @Button1.OnClick := @BtnClick;
end;



--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
Демо
Дата 19.11.2009, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Frees, 

На всякий случай проверь и такую процедуру:

Код

procedure BtnClick(Sender: TObject);
begin
  ShowMessage('BtnClick, CallerName: '+TButton(Sender).Name);
end;



 smile 


--------------------
    
PM MAIL ICQ Skype   Вверх
Frees
Дата 19.11.2009, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Демо @  19.11.2009,  18:00 Найти цитируемый пост)
На всякий случай проверь и такую процедуру:

действительно сендер тоже нил...


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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