Освобождение компонента из его же собственного обработчика
Написал Yanis
08.01.2008
VCL-справка по объекту TObject и его методу Free гласит: Warning: Never explicitly free a component within one of its own event handlers or the event handler of a component it owns or contains. For example, don't free a button, or the form that owns the button, in its OnClick event handler.
Ниже предлагается способ, который позволит убить компонент из его же собственного обработчика.
const
WM_KILL_CONTROL = WM_USER+ 66;
type
TForm1 = class(TForm)
...
private procedure WMKillControl(var msg:TMessage); message WM_KILL_CONTROL;
....
procedure TForm1.WMKillControl(var msg: TMessage);
var
c : TControl;
begin
c := TControl(msg.LParam);
ifnot Assigned(c) then
Exit;
c.Free;
windows.MessageBeep($FFFFFFFF);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
// Sender.Free; // würde meistens eine Exception auslösen
PostMessage(Self.Handle, WM_KILL_CONTROL, 0, Integer(Sender));
end
потенциально опасен. Указатели нельзя приводить к Integer, лучше к LongInt, так как в будущем LongInt станет 64х разрядным, а Integer останется 32х разарядным.
Ну так он и уточнил.
Это всего лишь частный случай использования PostMessage.
Ну а вообще приём очевидный.
Просто пример, скорее, из разряда FAQ для новичков.
Все с точностью наоборот Integer как раз может менять разрядность, а Longint как был всегда 32-бита, так им и останется (вспомним-ка 16-битный Паскаль!)
ответ - лучший дизайн интерьера квартиры в Киеве и области
ничего нового автор не открыл для тех кто интересуется, а вообще...
Нет никакого совпадения - тут же написано, что вышла новая верси...
Ссылка вдогонку - Официальный сайт:http://crosskylix.untergrund....
Обновление CrossKylix - Удивительно всё совпало, но в день напис...
Ошибка - Установил Delphi 2010,При использовании кряка (Ctrl + A...
Перезалейте - Перезайлейте плиз delphi 7 на другой файлообменник...
Проще Lazarus использовать
Turbo Delphi Explorer - >Snowyспасибо за ключик! обыскался
re: Программы на Delphi - [quote=Chrome]Чтобы бесплатно распрост...