Показать сообщение отдельно
  #2  
Старый 22.10.2007, 01:37
Аватар для mav_c
mav_c mav_c вне форума
Активный
 
Регистрация: 26.03.2007
Адрес: Москва
Сообщения: 287
Репутация: 30
По умолчанию

Цитата:
Сообщение от 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;



Вопрос: правомерна ли такая передача параметра, не будет ли утечки памяти (ведь созданная строка не освобождается), правильно ли передавать указатель на локальную переменную, память под которую будет освобождена при выходе из функции?

Конечно, да ты не имеешь права освобождать память в обработчике сообщения
__________________
---------------------------------------------
Программирование - не профессия, а стиль жизни
Ответить с цитированием