I need to post this in an answer because of the limited comment length. To handle the scaling you need to override the ChangeScale like this:
procedure ChangeScale(M, D: Integer); override;
procedure TMyControl.ChangeScale(M, D: Integer);
begin
inherited;
// Now update the internal items that need to be scaled
Label.Caption.Font.Height := MulDiv(Label.Caption.Font.Height, M, D);
// Other items go here
end;
The component should be doing this for internal items. You could either modify the source code to scale what should be scaled or create your own control that inherits from it and do it there.
Their component should be doing something like this already if there are some changes which would mean that you will more than likely have to change their code. The alternative in that case is to do something like this which is messy:
procedure TMyControl.ChangeScale(M, D: Integer);
var
OldHeight: Integer;
begin
OldHeight := Label.Caption.Font.Height;
inherited;
// Overwrite the bad scaling in the component
Label.Caption.Font.Height := MulDiv(OldHeight, M, D);
// Other items go here
end;