Своя функция на OnClick кнопки и не только
От: Mal Hack Россия http://mal-hack.net
Дата: 08.08.05 16:25
Оценка:
Пишу в 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.Cpp
void __fastcall BBCode_InputMemo(TObject *Sender)
// В unit2.h
void __fastcall BBCode_InputMemo(TObject *Sender);


Заранее спасибо за ответ.
In vita veritas, et vivare decet per principium "Veni, Vidi, Vice".
Re: Своя функция на OnClick кнопки и не только
От: Rius Россия  
Дата: 08.08.05 16:27
Оценка:
сто раз уже было...

присваивайте существующий обработчик, являющий членом класса формы
Re[2]: Своя функция на OnClick кнопки и не только
От: Mal Hack Россия http://mal-hack.net
Дата: 08.08.05 16:30
Оценка:
Здравствуйте, Rius, Вы писали:

R>сто раз уже было...


R>присваивайте существующий обработчик, являющий членом класса формы


В том-то и дело, что не хочу завязывать с формой. Хочется чтобы эта функция была только в данном модуле и к форме не относилась
In vita veritas, et vivare decet per principium "Veni, Vidi, Vice".
Re[3]: Своя функция на OnClick кнопки и не только
От: Rius Россия  
Дата: 08.08.05 16:32
Оценка:
для этого мне пришлось сделать отдельную функцию, вызываемую и из формы где надо и извне, причем к форме она тоже может обращаться т.к. обьявлен указатель на неё
Re[3]: Своя функция на OnClick кнопки и не только
От: svd71 http://visualdesigner.fatal.ru/
Дата: 08.08.05 19:15
Оценка:
Здравствуйте, 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;

initialization
M.Data := nil;
M.Code := @OnClick;
Form1.Button1.OnClick := TNotifyEvent(M);
end;

ничего, что я на Дельфевый код привел? просто я в наСильничать не силен.
Re[4]: Своя функция на OnClick кнопки и не только
От: Mal Hack Россия http://mal-hack.net
Дата: 08.08.05 23:28
Оценка:
Здравствуйте, Rius, Вы писали:

R>для этого мне пришлось сделать отдельную функцию, вызываемую и из формы где надо и извне, причем к форме она тоже может обращаться т.к. обьявлен указатель на неё


Я эту отдельную функцию и сделал, но не могу ее привинтить к самому OnCLick.
In vita veritas, et vivare decet per principium "Veni, Vidi, Vice".
Re[4]: Своя функция на OnClick кнопки и не только
От: Mal Hack Россия http://mal-hack.net
Дата: 08.08.05 23:30
Оценка:
Здравствуйте, 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".
Re: Своя функция на OnClick кнопки и не только
От: wind13  
Дата: 09.08.05 03:14
Оценка: 2 (1)
Манипуляции с методами классов, или как вызвать функцию по ее символьному имени
Re[4]: Своя функция на OnClick кнопки и не только
От: AlFox  
Дата: 16.08.05 04:51
Оценка:
Здравствуйте, svd71, Вы писали:

S>Здравствуйте, Mal Hack, Вы писали:


MH>>Здравствуйте, Rius, Вы писали:


R>>>сто раз уже было...


R>>>присваивайте существующий обработчик, являющий членом класса формы


MH>>В том-то и дело, что не хочу завязывать с формой. Хочется чтобы эта функция была только в данном модуле и к форме не относилась


S>В Дельфе это тоже по определению не должно пройходить.

Полная ерунда, в Delphi всё проходит
надо просто объявить процедурный тип и на него вешать переход по событию....
<< RSDN@Home 1.1.4 stable SR1 rev. 568>>


Всегда с Вами... AlFox...

 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.