Prima non avevo capito il motivo per il quale il codice non funzionava, almeno ho scoperto che posizionavo tutto bene.
Cmq a questa parte:
dataBase.FieldByName('NomeCampo1').Tag :=
4 + Canvas.TextWidth(dataBase.FieldByName('NomeCampo1' ).DisplayName);

se provo a mettere al posto di dataBase i nome della dbgrid mi dice che la TBgrid non contiene un membro chiamato FieldByName

p.s.: io ho creato una connessione ADO (quindi un ADODataSet, DataSetProvider, DataSource e un ClientDataSet), usando una DBGrid per visualizzare i dati