Пишу в Borland C++ Builder 6.
Создаю динамически несколько кнопок на форме. генерация кнопок — осуществляется в своих функциях из unit2.cpp, форма в unit1.cpp.
for( i = 0 ; i < 5 ; i++ )
{
BBCode[ i ] = new TButton( BBCodePanel );
BBCode[ i ] -> Parent = BBCodePanel;
BBCode[ i ] -> Tag = i;
BBCode[ i ] -> Caption = BBCodeNames[ i ];
BBCode[ i ] -> OnClick = BBCode_InputMemo;
}
Хочу на OnClick "повесить" свою функцию, лежащую в этом же unit2.cpp
В делфи такое работало. Тут же компилятор выдает ошибку: "[C++ Error] Unit2.cpp(64): E2034 Cannot convert 'void (_fastcall *)(TObject *)' to 'void (_fastcall * (_closure )(TObject *))(TObject *)'". Понятно что ему не нравится определение... Но, пытался прикрутить __closure но не до конца из хэлпов понял как это сделать и зачем оно нужно.
На данный момент функция объявлена так:
// В Unit2.Cppvoid __fastcall BBCode_InputMemo(TObject *Sender)
// В unit2.hvoid __fastcall BBCode_InputMemo(TObject *Sender);
Заранее спасибо за ответ.
In vita veritas, et vivare decet per principium "Veni, Vidi, Vice".
для этого мне пришлось сделать отдельную функцию, вызываемую и из формы где надо и извне, причем к форме она тоже может обращаться т.к. обьявлен указатель на неё
Здравствуйте, Mal Hack, Вы писали:
MH>Здравствуйте, Rius, Вы писали:
R>>сто раз уже было...
R>>присваивайте существующий обработчик, являющий членом класса формы
MH>В том-то и дело, что не хочу завязывать с формой. Хочется чтобы эта функция была только в данном модуле и к форме не относилась
В Дельфе это тоже по определению не должно пройходить. OnClick описана как процедура объекта. Есть 2 способа
1)
Создать "Мнимый" объект:
unit U1;
uses Classes;
type
TTO = class
procedure OnClick(Sender: TObject);
end;
var TO : TTO = nil;
implementation
uses Form1;
procedure TTO.OnClick;
begin
.....
Yours code
...
end;
initialization
TO := TTO.Create;
Form1.Button1.OnClick := TO.OnClick;
finalization
FreeAndNil(TO);
end;
2) тут идет пилотаж с TypIno:
.....
implementation
uses TypInfo, Form1;
var M : TMethod;
procedure OnClick(Sender: TObject);
begin
...
Yours code
....
end;
Здравствуйте, Rius, Вы писали:
R>для этого мне пришлось сделать отдельную функцию, вызываемую и из формы где надо и извне, причем к форме она тоже может обращаться т.к. обьявлен указатель на неё
Я эту отдельную функцию и сделал, но не могу ее привинтить к самому OnCLick.
In vita veritas, et vivare decet per principium "Veni, Vidi, Vice".
Здравствуйте, svd71, Вы писали:
S>Здравствуйте, Mal Hack, Вы писали:
MH>>Здравствуйте, Rius, Вы писали:
R>>>сто раз уже было...
R>>>присваивайте существующий обработчик, являющий членом класса формы
MH>>В том-то и дело, что не хочу завязывать с формой. Хочется чтобы эта функция была только в данном модуле и к форме не относилась
S>В Дельфе это тоже по определению не должно пройходить. OnClick описана как процедура объекта. Есть 2 способа S>1) S> Создать "Мнимый" объект: S>2) тут идет пилотаж с TypIno:
1. Класс да, это вариант, но не хотелось бы его использовать. Смысла нет.
2. хм.. Попробую что-ть подобное сделать, но боюсь на сях не прокатит
In vita veritas, et vivare decet per principium "Veni, Vidi, Vice".
Здравствуйте, svd71, Вы писали:
S>Здравствуйте, Mal Hack, Вы писали:
MH>>Здравствуйте, Rius, Вы писали:
R>>>сто раз уже было...
R>>>присваивайте существующий обработчик, являющий членом класса формы
MH>>В том-то и дело, что не хочу завязывать с формой. Хочется чтобы эта функция была только в данном модуле и к форме не относилась
S>В Дельфе это тоже по определению не должно пройходить.
Полная ерунда, в Delphi всё проходит
надо просто объявить процедурный тип и на него вешать переход по событию....