Цитата:
Сообщение от dzr_gregory
Всем доброго времени суток. У меня такая проблема - необходимо в программе через SendMessage() отправить сообщение самому себе. Делаю так:
1. Объявляю константы сообщения:
const
WM_MY_MESSAGES = WM_USER + 1983;
MSG_ADD2LOG = WM_MY_MESSAGES + 1;
2. Декларирую обработчик в главной форме приложения:
// Мои обработчики событий
procedure OnMsg_ADD2LOG(var Msg: TMessage); message MSG_ADD2LOG;
3. Мне необходимо отправить сообщение с неким параметром, в данном случае это указатель на строку pChar. Делаю так:
var
ErrMsg: string;
pErr: pChar;
begin
pErr := '123';
SendMessage(Handle, MSG_ADD2LOG, 0, Integer(@pErr));
4. В обработчике OnMsg_ADD2LOG пишу:
procedure TfrmMain.OnMsg_ADD2LOG(var Msg: TMessage);
var
pErr: PChar;
begin
ShowMessage('da da da!!!');
pErr := PChar(Pointer(Msg.LParam)^);
ShowMessage(pErr);
end;
Вопрос: правомерна ли такая передача параметра, не будет ли утечки памяти (ведь созданная строка не освобождается), правильно ли передавать указатель на локальную переменную, память под которую будет освобождена при выходе из функции?
|
Конечно, да ты не имеешь права освобождать память в обработчике сообщения
__________________
---------------------------------------------
Программирование - не профессия, а стиль жизни
|