The way to go would be ActiveX controls (ActiveX controls are COM controls, there are no specific COM controls), however Lazarus currently does not provide any wizards to generate the necessary boilerplate code and thus it is probably not tested how well it would work. You could try to generate the necessary boilerplate code using a Community Edition of Delphi and then use that with Lazarus, however your mileage may vary.