TSpeedButton.Create... Ошибка компиляции на onclick'е
Модератор: Модераторы
-
DeeMOONger
- незнакомец
- Сообщения: 6
- Зарегистрирован: 15.05.2012 08:32:14
- Откуда: Нижний Новгород
- Контактная информация:
TSpeedButton.Create... Ошибка компиляции на onclick'е
Доброго времени суток!
Помогите понять в чем косячина:
Нужно создать в 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. Хотя, по-моему, это не существенно для данной задачи...
Помогите понять в чем косячина:
Нужно создать в 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. Хотя, по-моему, это не существенно для данной задачи...
поправте
и
Код: Выделить всё
Btns[i].onclick:=@MyBtnClick;и
Код: Выделить всё
procedure TForm1.MyBtnClick(Sender: TObject);
begin
...
end;Вот они - отупляющие последствия работы в Дельфи. 
-
DeeMOONger
- незнакомец
- Сообщения: 6
- Зарегистрирован: 15.05.2012 08:32:14
- Откуда: Нижний Новгород
- Контактная информация:
zub, спасибо, попробую.
А на счет procedure TForm1.MyBtnClick(Sender: TObject); - я здесь не верно написал, в проге так оно и есть. Но, и за это замечание - спасибо!
Еще вопросик (дело в том, что я программист С++, паскаль давно юзал, еще в школе в 90-х...): @MyBtnClick - это то же, что и в С++ &MyBtnClick - передает указатель на процедуру? И еще, за одно уж, почему тогда на всех дельфинариях пишут onclick:= БЕЗ знака @? На фиг в заблуждение вводят?
А на счет procedure TForm1.MyBtnClick(Sender: TObject); - я здесь не верно написал, в проге так оно и есть. Но, и за это замечание - спасибо!
Еще вопросик (дело в том, что я программист С++, паскаль давно юзал, еще в школе в 90-х...): @MyBtnClick - это то же, что и в С++ &MyBtnClick - передает указатель на процедуру? И еще, за одно уж, почему тогда на всех дельфинариях пишут onclick:= БЕЗ знака @? На фиг в заблуждение вводят?
>>передает указатель на процедуру? И еще, за одно уж, почему тогда на всех дельфинариях пишут onclick:= БЕЗ знака @? На фиг в заблуждение вводят?
Да это указатель на метод и это одно из отличий fpc от delphi - в delphi знак @ в данном случае опускается. Включите {$mode delphi} и поведение fpc будет как в delphi
Да это указатель на метод и это одно из отличий fpc от delphi - в delphi знак @ в данном случае опускается. Включите {$mode delphi} и поведение fpc будет как в delphi
-
DeeMOONger
- незнакомец
- Сообщения: 6
- Зарегистрирован: 15.05.2012 08:32:14
- Откуда: Нижний Новгород
- Контактная информация:
zub, спасибо за все ответы! Все работает, все понял. 
for i := 1 to 10 do begin
Ой, а что теперь массивы начинаются с 1?.
Ой, а что теперь массивы начинаются с 1?.
Насколько я помню метод объявлений массивов в паскале - массив может начинаться хоть с -3 хоть с 5. С нуля дефолтно начинаются сишные массивы. Разве нет?
Код: Выделить всё
а: array [1..10] of real;
b: array [0..50] of Char;
с: array [-3..4] of Boolean;
Хотя если объявлять динамический массив, то тут я с Вами согласен
