TSpeedButton.Create... Ошибка компиляции на onclick'е

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

TSpeedButton.Create... Ошибка компиляции на onclick'е

Сообщение DeeMOONger » 26.11.2013 10:05:14

Доброго времени суток!
Помогите понять в чем косячина:

Нужно создать в RT массив кнопок. Откинув лишнее получилось примерно следующее:

TForm1 = class(TForm)
...
public
procedure MyBtnClick(Sender: TObject);
...
var
...
Btns : array of TSpeedButton;
...
procedure TForm1.Go( chn : Integer );
begin
...
SetLength(Btns, 10);
for i := 1 to 10 do begin
Btns[i] := TSpeedButton.Create( Self );
Btns[i].Parent := Form1;
Btns[i].tag:=i;
Btns[i].Left := i*48;
Btns[i].Top := 100;
Btns[i].Width := 48;
Btns[i].Height := 48;
Btns[i].onclick:=MyBtnClick;
end;

procedure MyBtnClick(Sender: TObject);
begin
...
end;

При попытке компиляции вываливается с ошибкой: Error: Wrong number of parameters specified for call to "MyBtnClick"

Что не так-то?

На случай: компилю под Windows Mobile. Хотя, по-моему, это не существенно для данной задачи...
DeeMOONger
незнакомец
 
Сообщения: 6
Зарегистрирован: 15.05.2012 08:32:14
Откуда: Нижний Новгород

Re: TSpeedButton.Create... Ошибка компиляции на onclick'е

Сообщение zub » 26.11.2013 13:18:14

поправте
Код: Выделить всё
Btns[i].onclick:=@MyBtnClick;

и
Код: Выделить всё
procedure TForm1.MyBtnClick(Sender: TObject);
begin
...
end;
zub
долгожитель
 
Сообщения: 2887
Зарегистрирован: 14.11.2005 23:51:26

Re: TSpeedButton.Create... Ошибка компиляции на onclick'е

Сообщение Vadim » 26.11.2013 14:34:59

Вот они - отупляющие последствия работы в Дельфи. :)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: TSpeedButton.Create... Ошибка компиляции на onclick'е

Сообщение DeeMOONger » 26.11.2013 14:57:02

zub, спасибо, попробую.
А на счет procedure TForm1.MyBtnClick(Sender: TObject); - я здесь не верно написал, в проге так оно и есть. Но, и за это замечание - спасибо!
Еще вопросик (дело в том, что я программист С++, паскаль давно юзал, еще в школе в 90-х...): @MyBtnClick - это то же, что и в С++ &MyBtnClick - передает указатель на процедуру? И еще, за одно уж, почему тогда на всех дельфинариях пишут onclick:= БЕЗ знака @? На фиг в заблуждение вводят?
DeeMOONger
незнакомец
 
Сообщения: 6
Зарегистрирован: 15.05.2012 08:32:14
Откуда: Нижний Новгород

Re: TSpeedButton.Create... Ошибка компиляции на onclick'е

Сообщение zub » 26.11.2013 16:42:10

>>передает указатель на процедуру? И еще, за одно уж, почему тогда на всех дельфинариях пишут onclick:= БЕЗ знака @? На фиг в заблуждение вводят?
Да это указатель на метод и это одно из отличий fpc от delphi - в delphi знак @ в данном случае опускается. Включите {$mode delphi} и поведение fpc будет как в delphi
zub
долгожитель
 
Сообщения: 2887
Зарегистрирован: 14.11.2005 23:51:26

Re: TSpeedButton.Create... Ошибка компиляции на onclick'е

Сообщение DeeMOONger » 26.11.2013 19:07:25

zub, спасибо за все ответы! Все работает, все понял. :D
DeeMOONger
незнакомец
 
Сообщения: 6
Зарегистрирован: 15.05.2012 08:32:14
Откуда: Нижний Новгород

Re: TSpeedButton.Create... Ошибка компиляции на onclick'е

Сообщение Maxizar » 26.11.2013 20:38:58

for i := 1 to 10 do begin


Ой, а что теперь массивы начинаются с 1?.
Maxizar
постоялец
 
Сообщения: 385
Зарегистрирован: 20.03.2010 19:48:14

Re: TSpeedButton.Create... Ошибка компиляции на onclick'е

Сообщение Deimos » 06.12.2013 12:51:36

Ой, а что теперь массивы начинаются с 1?.


Насколько я помню метод объявлений массивов в паскале - массив может начинаться хоть с -3 хоть с 5. С нуля дефолтно начинаются сишные массивы. Разве нет?

Код: Выделить всё
а: array [1..10] of real;
b: array [0..50] of Char;
с: array [-3..4] of Boolean;


Хотя если объявлять динамический массив, то тут я с Вами согласен :)
Deimos
постоялец
 
Сообщения: 174
Зарегистрирован: 17.01.2010 00:31:30


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 242

Рейтинг@Mail.ru