Hola loadminds, puedes utilizar la función IndexOf de tu ComBoBox,
Código Delphi
[-]
With dbgrid1.datasource.dataset do begin
First;
While not eof do begin
if Ccat.Items.IndexOf(FieldByName('Categoria').AsString)=-1 then
Ccat.Items.Add(FieldByName('Categoria').AsString);
Next;
end;
Si recorres el DataSet que esta enlazado a tu DBGrid, también deberías utilizar EnableCOntrol y DisableControl, para que no veas como se mueve entre registros.
Otra cosita estas cargando en el evento OnChange del COmboBox, deberías hacerlo en otro lado, donde solo se ejecute una vez.
También podrías haber hecho otra consulta sobre esa tabla con distinct sobre el campo categoría.
Saluditos