Vamos a ver, no sé qué tan eficiente resulte pero al parecer funciona.
El punto aquí es que los valores del PickList cambian de registro a registro así que debemos llenar la lista según el registro en el que estemos. Primero pensé en el evento AfterScroll pero tiene dos problemas: funciona si nos movemos sobre un registro ya existente pero no si estamos insertando uno nuevo, y además estaríamos actualizando el PickList incluso si no entramos a editar el campo. Así que opto por el evento OnCellClick del DBGrid:
Código Delphi
[-]
procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
if Column.Title.Caption = 'PRE_REAL' then
begin
Column.PickList.Clear;
Column.PickList.Add(Table1.FieldByName('PRECIO1').AsString);
Column.PickList.Add(Table1.FieldByName('PRECIO2').AsString);
Column.PickList.Add(Table1.FieldByName('PRECIO3').AsString);
end;
end;
// Saludos