I don't know what change but now is print, I put in my form printer dialog and printer setup, then I delete and it work
.
the unit printer declare a global variable: printer of type Tprinter, the problem is that this variable is uninitalized because unit printer is part of LCL, LCL should contain only plataform independant code so no windows or linux specific code can be used to initilize the printer variable.
That is the work of package Printer4Lazarus it provides an platform specific implementation, so in projects it's necesary to do
uses ..., printers, osprinters, ....
if osprinters is not found then add dependecy to package printer4lazarus in project inspector.
it happens that PrintersDlg uses unit OsPrinters so when including PrintersDlgs unit it initialize printer variable correcly and that is why it worked fine, after deleting the dialog component the unit reference is left in the uses clause and it worked ok too