He conseguido asi:
Si estoy fuera del primero dia del mes, pego el primero dia y hago un Encodedate ahora con el primer Dia y despues, voy a la funcion DayOfWeek y veo cual este dia [Domingo..Sabado], y entonces hago mis operaciones. Ahora voy mejorar esta funcion para que si quede mejor, si for posible. Este ejemplo funciona para lo que quiero.
Código Delphi
[-]var
Ano, Mes, Dia,pDia : word;
DiaDaSemana, DiaDoMes : Integer;
begin
DecodeDate (Data, Ano, Mes, Dia);
pDia := Dia - Dia + 1;
Data := EncodeDate(Ano,Mes,pDia);
DiaDaSemana := DayOfWeek(Data);
if DiaDaSemana in [1,7] then
Result := '02' + '/' + IntToStr(Mes)
else
if (DiaDaSemana = 2)and(EFeriado(Trunc(now))) then
Result := '03' + '/' + IntToStr(Mes)
else
if (DiaDaSemana = 6)and(EFeriado(Trunc(now))) then
Result := '04' + '/' + IntToStr(Mes)
else
Result := StrZeros(IntToStr(pDia),2) + '/' + IntToStr(Mes);
end;