Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Что хочет компонента ?

3.8K
14 октября 2005 года
VovaL
50 / / 26.09.2005
Нужно создать класс, в котором создаются и рисуются компоненты (TLabel,TButton и пр.), допустим, на стандарную Form1 или GroupBox. Вопрос - что надо указывать в качестве параметра при создании внутри класса:
TButton *tb = new TButton(?????);
и что в
tb->Parent = ?????


И еще вопрос.
Как сделать текст bold (установить fsBold)
tb->????? = fsBold;
(через ...Font->Style... не получается)
246
14 октября 2005 года
GIZMO
1.8K / / 30.07.2004
Цитата:
Originally posted by VovaL
Нужно создать класс, в котором создаются и рисуются компоненты (TLabel,TButton и пр.), допустим, на стандарную Form1 или GroupBox. Вопрос - что надо указывать в качестве параметра при создании внутри класса:
TButton *tb = new TButton(?????);
и что в
tb->Parent = ?????


Form1, Form1 или Form1, Groupbox1

Цитата:
Originally posted by VovaL

И еще вопрос.
Как сделать текст bold (установить fsBold)
tb->????? = fsBold;
(через ...Font->Style... не получается)



 
Код:
Font->Style = TFontStyles() << fsBold;
3.8K
14 октября 2005 года
VovaL
50 / / 26.09.2005
Большое спасибо.
Прога вышла из ступора.
3.8K
15 октября 2005 года
VovaL
50 / / 26.09.2005
А можно еще вопрос, чтобы закрыть эту тему.
Как организовать обработку событий (напр. button click) в таком классе?
12K
16 октября 2005 года
CtstdX
10 / / 10.10.2005
Цитата:
Originally posted by VovaL
А можно еще вопрос, чтобы закрыть эту тему.
Как организовать обработку событий (напр. button click) в таком классе?


попробуй что-то типа такого

TButton *tb = new TButton(?????);
tb->Font->Style = TFontStyles() << fsBold;

tb->OnClick = myfunc;

3.8K
17 октября 2005 года
VovaL
50 / / 26.09.2005
Не проходит.

Ерунда в том, что надо организовать обрабоку клика динамических кнопок, создаваемых в классе.
Это как-то рассматривается в разных форумах, но варианты предлагаются навороченные донекуда.


сlass a {
void b(TForm*);
};
void b(TForm *tt) {
TButton *bt = new TButton(tt);
.....
bt->OnClick = ???
};

где-то в проге:

void TForm1::mf() {
....
a* tt = new a(TForm);

}

Наверняка многие с этой задачей сталкивались.
276
17 октября 2005 года
Rebbit
1.1K / / 01.08.2005
Цитата:
Originally posted by VovaL
Не проходит.



Лезешь в HELP и смотришь описание события.
Для OnClick кажется нужно чтобы так.

 
Код:
void __fastcall myfunc(TObject *Sender) {
  // всякая чушь которую надо сделать
}

TButton *bt = new TButton(this);
  // this - ето указатель на тот обект которий
  //создает tb (если конечно етот код написан в
  //методе етого обекта)
bt->Parent = this; // или то на чем кнопка будет лежать
bt->OnClick = myfunc;


А если тяжело самому описать обработчик, то можно на форму тыкнуть кнопку, создать обработчик с помощю инспектора обектов, вместо myfunc присваевать его имя, а левую кнопку удалить.

(Если где ошибся - извените. Попробовать неначем.)
3.8K
17 октября 2005 года
VovaL
50 / / 26.09.2005
Спасибо, но с этим проблем нет.
Фишка в том, что мне надо добраться из! класса (где кнопка создается) до обработчика кнопки, который находится вне! класса, имея в конструкторе в качестве одного из параметров инициализации Form* - для размещения кнопки на форме.
259
17 октября 2005 года
AlexandrVSmirno
1.4K / / 03.12.2004
Цитата:
Originally posted by VovaL
Спасибо, но с этим проблем нет.
Фишка в том, что мне надо добраться из! класса (где кнопка создается) до обработчика кнопки, который находится вне! класса, имея в конструкторе в качестве одного из параметров инициализации Form* - для размещения кнопки на форме.


Бред какой то. Какя разница, где определять функцию обработчик. Есть стандартный механизм глобальных функций (см. public, extern). Причем здесь форма передаваемая в качестве параметра конструктора чего - то вообще непонятно.

246
18 октября 2005 года
GIZMO
1.8K / / 30.07.2004
Цитата:
Originally posted by AlexandrVSmirno
Бред какой то. Какя разница, где определять функцию обработчик.


Уверяю Вас Александр, что разница есть. По моему в 4-байтa.

362
18 октября 2005 года
_kolyan
339 / / 03.12.2002
Как я понял рассуждения нужно указать в качестве обработчика сообщений функцию, которая не является членом класса.

В функции-члены по умолчанию первым параметром неявно передается this-указатель. Так что может быть прокатит, если объявить глобальную функцию-обработчик с первым параметром - указателем, который можно не использовать, остальные параметры - стандартные параметры функции-обработчика.

Сам так не пробовал, но это первое, что я попробовал бы сделать, если бы мне это было нужно сделать :)
259
18 октября 2005 года
AlexandrVSmirno
1.4K / / 03.12.2004
Цитата:
Originally posted by GIZMO
Уверяю Вас Александр, что разница есть. По моему в 4-байтa.


В этом смысле да.P(

299
18 октября 2005 года
3D Bob
885 / / 18.04.2005
А как насчет вызвать из ф-ции функцию?
Обработчик кнопки это лишь сигнал на то что кнопка нажата.
А выполнять действие опреедленные следуюют в иной ф-ции. Это я перефразироал слова Грина.
299
18 октября 2005 года
3D Bob
885 / / 18.04.2005
Цитата:
Originally posted by _kolyan
Как я понял рассуждения нужно указать в качестве обработчика сообщений функцию, которая не является членом класса.

В функции-члены по умолчанию первым параметром неявно передается this-указатель. Так что может быть прокатит, если объявить глобальную функцию-обработчик с первым параметром - указателем, который можно не использовать, остальные параметры - стандартные параметры функции-обработчика.

Сам так не пробовал, но это первое, что я попробовал бы сделать, если бы мне это было нужно сделать :)


Не прокатит.

362
18 октября 2005 года
_kolyan
339 / / 03.12.2002
Цитата:
Originally posted by 3D Bob
Не прокатит.



Нет, так нет.

А это тебе известно из опыта, или также как я - предположение сделал?

299
18 октября 2005 года
3D Bob
885 / / 18.04.2005
Цитата:
Originally posted by _kolyan
Нет, так нет.

А это тебе известно из опыта, или также как я - предположение сделал?


Попробовал.
А вообще я пошел еще дальше, аж до typedef OnClick
Но все попытки создания статической функции не члена класса оказались неудачными.

259
18 октября 2005 года
AlexandrVSmirno
1.4K / / 03.12.2004
Цитата:
Originally posted by _kolyan
Нет, так нет.

А это тебе известно из опыта, или также как я - предположение сделал?


Здесь и предположений не надо. Приведение типов не сработает

 
Код:
void a(void* b,NObject* s) и void a(NObject* s)
в этом случае совсем разные типы. Соответсвенно:
myBut->OnClick = a не катит.
Это все равно, что сделать:
int* a;
myBut->OnClick = a;
362
18 октября 2005 года
_kolyan
339 / / 03.12.2002
Цитата:
Originally posted by AlexandrVSmirno
Здесь и предположений не надо. Приведение типов не сработает
 
Код:
void a(void* b,NObject* s) и void a(NObject* s)
в этом случае совсем разные типы. Соответсвенно:
myBut->OnClick = a не катит.
Это все равно, что сделать:
int* a;
myBut->OnClick = a;



Не совсе понял, что вы хотите сказать, какой "а" вы присваиваете в вашем примере? Разве кто-то говорит, что это одно и тоже?

Тип TNotifyEvent объявлен как указатель на функцию с модификатором __closure, (или по-паскалевски - of object), это означает что это указатель на функцию-член класса, у которой есть первый неявный параметр.

То, что closure-функция не подменяется функцией с дополнительным параметром, это я только что проверил. Так что действительно не прокатит.

299
18 октября 2005 года
3D Bob
885 / / 18.04.2005
Цитата:
Originally posted by _kolyan
Тип TNotifyEvent
То, что closure-функция не подменяется функцией с дополнительным параметром, это я только что проверил. Так что действительно не прокатит.


Тоже нашел TNotifyEvent :D :D :D ??
Вот я пытался создать ф-цию используя этот тип(( не получилось.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог