Это относится к Назначение событий элементу управления VCL, создаваемому динамически во время выполнения .
Я использовал приведенный выше / справочный пост, чтобы решить проблему, возникшую у меня с некоторым кодом.Спасибо за предоставленный пример.Я нашел это очень полезным и реализовал «альтернативный» способ, который он предоставил, так как я не смог заставить работать первый способ.
Я использую C ++ Builder 10.x от Embarcadero.Я только что обновился до C ++ Builder 10.3.Это новое обновление теперь выдает предупреждение:
[bcc32c Warning] LogitToMemo.cpp (196): неявное преобразование между указателем на функцию и указателем на объект является расширением Microsoft
Строка, которую он выбрасывает:
Method.Code = &LogLevelComboBoxOnChange;
Я не уверен, как "исправить" это.
Код поддерживает функцию регистрации вполе памятки, где страница для заметки журнала имеет TComboBox
для выбора уровня регистрации / подробности.
TComboBox
является внешним по отношению к функции регистрации, как и в форме пользователя.Я хочу, чтобы событие TComboBox::OnChange
вызывало мою функцию LogLevelComboBoxOnChange
, которая регулирует уровень ведения журнала на основе выбранного элемента / записи TComboBox
.
Поддерживающий код включает в себя:
Функцияобъявление - TComboBox::OnChange
Событие Функция
void __fastcall LogLevelComboBoxOnChange(void *pThis, TObject *Sender);
Объявление функции - Журнал запускается при наличии поля TMemo
для входа в систему и TComboBox
int LogStartWithComboBox(TMemo *LogIt_MemoField, TComboBox *AppLogLevelComboBox, int iThreshold, AnsiString &asFieldTitles);
Этофункция, которая назначает функцию OnChange
для объекта TComboBox
в форме регистрации пользователя.
int LogStartWithComboBox(TMemo *LogIt_MemoField, TComboBox *AppLogLevelComboBox, int iThreshold, AnsiString &asFieldTitles)
{
static TMethod Method;
//
// Set-Up CombBox and OnChange Event
// - Save ComboBox pointer
// - Assign List of Log Levels
// - Assign/Set-Up OnChange Function
//
LogLevelComboBox = AppLogLevelComboBox;
AppLogLevelComboBox->Items->Text =
"Off\n"
"All Messages\n"
"Verbose\n"
"Trace\n"
"Informational\n"
"Warning\n"
"Error\n"
"Severe\n"
"Fatal";
AppLogLevelComboBox->ItemIndex = iThreshold + 1;
//
// Set-Up - On Change Function for "external" Log Level Combo-Box
//
Method.Data = NULL; // passed to the pThis parameter, can be whatever you want
//
// The Following line generates the warning
// [bcc32c Warning] LogitToMemo.cpp(196): implicit conversion between pointer-to-function and pointer-to-object is a Microsoft extension
//
Method.Code = &LogLevelComboBoxOnChange;
LogLevelComboBox->OnChange = reinterpret_cast<TNotifyEvent&>(Method);
return 0;
}