Что хочет компонента ?
TButton *tb = new TButton(?????);
и что в
tb->Parent = ?????
И еще вопрос.
Как сделать текст bold (установить fsBold)
tb->????? = fsBold;
(через ...Font->Style... не получается)
Нужно создать класс, в котором создаются и рисуются компоненты (TLabel,TButton и пр.), допустим, на стандарную Form1 или GroupBox. Вопрос - что надо указывать в качестве параметра при создании внутри класса:
TButton *tb = new TButton(?????);
и что в
tb->Parent = ?????
Form1, Form1 или Form1, Groupbox1
И еще вопрос.
Как сделать текст bold (установить fsBold)
tb->????? = fsBold;
(через ...Font->Style... не получается)
Прога вышла из ступора.
Как организовать обработку событий (напр. button click) в таком классе?
А можно еще вопрос, чтобы закрыть эту тему.
Как организовать обработку событий (напр. button click) в таком классе?
попробуй что-то типа такого
TButton *tb = new TButton(?????);
tb->Font->Style = TFontStyles() << fsBold;
tb->OnClick = myfunc;
Ерунда в том, что надо организовать обрабоку клика динамических кнопок, создаваемых в классе.
Это как-то рассматривается в разных форумах, но варианты предлагаются навороченные донекуда.
сlass a {
void b(TForm*);
};
void b(TForm *tt) {
TButton *bt = new TButton(tt);
.....
bt->OnClick = ???
};
где-то в проге:
void TForm1::mf() {
....
a* tt = new a(TForm);
}
Наверняка многие с этой задачей сталкивались.
Не проходит.
Лезешь в HELP и смотришь описание события.
Для OnClick кажется нужно чтобы так.
// всякая чушь которую надо сделать
}
TButton *bt = new TButton(this);
// this - ето указатель на тот обект которий
//создает tb (если конечно етот код написан в
//методе етого обекта)
bt->Parent = this; // или то на чем кнопка будет лежать
bt->OnClick = myfunc;
А если тяжело самому описать обработчик, то можно на форму тыкнуть кнопку, создать обработчик с помощю инспектора обектов, вместо myfunc присваевать его имя, а левую кнопку удалить.
(Если где ошибся - извените. Попробовать неначем.)
Фишка в том, что мне надо добраться из! класса (где кнопка создается) до обработчика кнопки, который находится вне! класса, имея в конструкторе в качестве одного из параметров инициализации Form* - для размещения кнопки на форме.
Спасибо, но с этим проблем нет.
Фишка в том, что мне надо добраться из! класса (где кнопка создается) до обработчика кнопки, который находится вне! класса, имея в конструкторе в качестве одного из параметров инициализации Form* - для размещения кнопки на форме.
Бред какой то. Какя разница, где определять функцию обработчик. Есть стандартный механизм глобальных функций (см. public, extern). Причем здесь форма передаваемая в качестве параметра конструктора чего - то вообще непонятно.
Бред какой то. Какя разница, где определять функцию обработчик.
Уверяю Вас Александр, что разница есть. По моему в 4-байтa.
В функции-члены по умолчанию первым параметром неявно передается this-указатель. Так что может быть прокатит, если объявить глобальную функцию-обработчик с первым параметром - указателем, который можно не использовать, остальные параметры - стандартные параметры функции-обработчика.
Сам так не пробовал, но это первое, что я попробовал бы сделать, если бы мне это было нужно сделать :)
Уверяю Вас Александр, что разница есть. По моему в 4-байтa.
В этом смысле да.P(
Обработчик кнопки это лишь сигнал на то что кнопка нажата.
А выполнять действие опреедленные следуюют в иной ф-ции. Это я перефразироал слова Грина.
Как я понял рассуждения нужно указать в качестве обработчика сообщений функцию, которая не является членом класса.
В функции-члены по умолчанию первым параметром неявно передается this-указатель. Так что может быть прокатит, если объявить глобальную функцию-обработчик с первым параметром - указателем, который можно не использовать, остальные параметры - стандартные параметры функции-обработчика.
Сам так не пробовал, но это первое, что я попробовал бы сделать, если бы мне это было нужно сделать :)
Не прокатит.
Не прокатит.
Нет, так нет.
А это тебе известно из опыта, или также как я - предположение сделал?
Нет, так нет.
А это тебе известно из опыта, или также как я - предположение сделал?
Попробовал.
А вообще я пошел еще дальше, аж до typedef OnClick
Но все попытки создания статической функции не члена класса оказались неудачными.
Нет, так нет.
А это тебе известно из опыта, или также как я - предположение сделал?
Здесь и предположений не надо. Приведение типов не сработает
в этом случае совсем разные типы. Соответсвенно:
myBut->OnClick = a не катит.
Это все равно, что сделать:
int* a;
myBut->OnClick = a;
Здесь и предположений не надо. Приведение типов не сработает
в этом случае совсем разные типы. Соответсвенно:
myBut->OnClick = a не катит.
Это все равно, что сделать:
int* a;
myBut->OnClick = a;
Не совсе понял, что вы хотите сказать, какой "а" вы присваиваете в вашем примере? Разве кто-то говорит, что это одно и тоже?
Тип TNotifyEvent объявлен как указатель на функцию с модификатором __closure, (или по-паскалевски - of object), это означает что это указатель на функцию-член класса, у которой есть первый неявный параметр.
То, что closure-функция не подменяется функцией с дополнительным параметром, это я только что проверил. Так что действительно не прокатит.
Тип TNotifyEvent
То, что closure-функция не подменяется функцией с дополнительным параметром, это я только что проверил. Так что действительно не прокатит.
Тоже нашел TNotifyEvent :D :D :D ??
Вот я пытался создать ф-цию используя этот тип(( не получилось.