I have just noticed that one of our very (very) old custom controls (not created by me) has this WM_SIZE message handler (I used a TPanel here for the demo):
TPanel = class(ExtCtrls.TPanel)
private
procedure WMSize(var Message: TWMSize); message WM_SIZE;
end;
procedure TPanel.WMSize(var Message: TWMSize);
begin
DoSomethingWhenResized;
end;
The inherited is not being called. the DoSomethingWhenResized creates a cached gradient bitmap which is used in the paint process of the control.
Every thing "looks" and behaves fine, but I just wonder if anything could go wrong by not calling the inherited handler first?
Naturally, if you don't call inherited then you lose the behaviour that is implemented in the ancestor controls. Whether or not this is a problem for you is something only you can decide. The VCL source shows you exactly what those ancestors are doing. In your example the first ancestor up the chain to handle WM_SIZE is TWinControl which does this :
procedure TWinControl.WMSize(var Message: TWMSize);
var
LList: TList;
begin
UpdateBounds;
UpdateExplicitBounds;
inherited;
LList := nil;
if (Parent <> nil) and (Parent.FAlignControlList <> nil) then
LList := Parent.FAlignControlList
else if FAlignControlList <> nil then
LList := FAlignControlList;
if LList <> nil then
begin
if LList.IndexOf(Self) = -1 then
LList.Add(Self);
end
else
begin
Realign;
if not (csLoading in ComponentState) then
Resize;
end;
end;
Here WMSize calls inherited, but there are (currently) no ancestor objects above TWinControl that implement this, so the above is what you are missing by not calling inherited. If your DoSomethingWhenResized manages your control bounds, sizing, and component alignment of child controls (or if you don't need it to do this) then you're fine. If you find, however, that the control is not handling these things properly then you might suspect that DoSomethingWHenResized has missed one or more of these responsibilities in its implementation.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With