Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.04.2016, 22:02   #1
Mat Bourn
Форумчанин
 
Регистрация: 13.04.2015
Сообщений: 141
По умолчанию Присвоить событие в процедуре C++ Builder

Всем доброго. Написал процедуру, которая динамически создает компоненты. Сделал обработчик OnMouseDown для этих самых компонентов.

Код:
MyCom->OnMouseDown = Aiming;
Почему если событие присвоить вне процедуры, оно работает, а если внутри процедуры то нет? В чем проблема? Помогите пожалуйста.

Т. е. написанное мною новое событие для компонента не работает внутри написанной мной процедуры, а за ее пределами работает ???
[C++ Error] Designer.cpp(108): E2451 Undefined symbol 'Aiming'

Последний раз редактировалось Mat Bourn; 16.04.2016 в 00:59.
Mat Bourn вне форума Ответить с цитированием
Старый 16.04.2016, 11:45   #2
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

код покажь. телепатов тут нет.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 16.04.2016, 12:38   #3
Mat Bourn
Форумчанин
 
Регистрация: 13.04.2015
Сообщений: 141
По умолчанию

Вот моя процедура:

Код:
void Remake()
{
 // в ней создаю динамические компоненты
}
Для динамического компонента написал обработчик события OnMouseDown.


В файле .cpp прописал:
Код:
void __fastcall TFormDesigner::Aiming(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
 TStringGrid * MyButton = dynamic_cast<TStringGrid *>(Sender);
 ReleaseCapture();
 Perform(WM_SYSCOMMAND,0xF012,0);
}
В файле .h прописал, в разделе published:
Код:
void __fastcall Aiming(TObject *Sender,
          TMouseButton Button, TShiftState Shift, int X, int Y);

Вот и проблема возникает в том что в процедуре void Remake(), не могу присвоить событие динамическому компоненту:
Код:
void Remake()
{
MyButton->OnMouseDown = Aiming; // ругается
}
Как все ровно моего обработчика внутри процедуры почему то невидно?
Mat Bourn вне форума Ответить с цитированием
Старый 16.04.2016, 12:52   #4
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
моего обработчика внутри процедуры почему то невидно?
ну правильно, это ж метод класса TFormDesigner.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 16.04.2016, 12:56   #5
Mat Bourn
Форумчанин
 
Регистрация: 13.04.2015
Сообщений: 141
По умолчанию

А как тогда поступить ?
Mat Bourn вне форума Ответить с цитированием
Старый 16.04.2016, 12:59   #6
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
А как тогда поступить ?
один из вариатов - сделать функцию remake() методом того же класса.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 16.04.2016, 13:38   #7
Mat Bourn
Форумчанин
 
Регистрация: 13.04.2015
Сообщений: 141
По умолчанию

Извини. Т. е. в сам обработчик вставить код процедуры? А процедуру удалить?
Mat Bourn вне форума Ответить с цитированием
Старый 16.04.2016, 13:57   #8
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Т. е. в сам обработчик вставить код процедуры? А процедуру удалить?
какую ещё процедуру? В С++ нет процедур.
ты чо, нерусский? по-русски не понимаешь? я тебе русским по белому написал "сделать функцию remake() методом того же класса".
Вот и делай, чо говорю.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 16.04.2016, 14:23   #9
Mat Bourn
Форумчанин
 
Регистрация: 13.04.2015
Сообщений: 141
По умолчанию

Спасибо за помощь min@y™. Но для меня это: cделать то незная что .
Возьму просто присвою событие стороннего компонента.
Mat Bourn вне форума Ответить с цитированием
Старый 16.04.2016, 15:16   #10
Mat Bourn
Форумчанин
 
Регистрация: 13.04.2015
Сообщений: 141
По умолчанию

Код:
 class CppStudio
{
 public:


 void __fastcall Aiming(TObject *Sender,
          TMouseButton Button, TShiftState Shift, int X, int Y)
{
 Color = clRed;
}


 void Remake()
{
 TStringGrid *MyButton = new TStringGrid(FormDesigner);
 MyButton->Parent = FormDesigner->ScrollBox1;

 MyButton->OnMouseDown = Aiming;
}

};

 int main(int argc, char* argv[])
{
 CppStudio objMessage;
 objMessage.Remake();
}
Не знаю об этом ты мне вбивал в мой мозг, но пока все как надо!
Mat Bourn вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как присвоить юникод компоненту Label c++ Builder Mat Bourn Помощь студентам 36 13.09.2015 06:02
С++ Builder, я перевожу прогу из консоли MVS в builder и возникли ошибки. [C++ Error] Unit1.cpp(49): E2277 Lva Rasa777 C++ Builder 2 10.07.2015 05:08
CodeGear C++ Builder 2007 Lite не может откомпилировать исходники C++ Builder 6 Ecosasha C++ Builder 2 22.11.2013 15:02
У динамически созданной формы есть событие OnClick, но само событие не происходит Hunter_bog Компоненты Delphi 25 23.01.2012 23:50
Какое событие присвоить кнопке?(делфи) Gunet Помощь студентам 1 16.11.2009 20:16