Если я не ошибаюсь, то в операторе case НЕ может быть НИКАКИХ выражений, а ТОЛЬКО какое-то значение.
Не совсем так. Может быть константное выражение, которое можно вычислить на этапе компиляции.
Надо писать
switch (Form2->Day->Text)
{
case "Понедельник": Form2->Edit3->Text = "P"; break;
А вот это - совершенно неверно. Придется повторить еще раз: константа, используемая как метка case, должна быть интегрального типа. К примеру, "Понедельник" является массивом литерного типа и никоим образом не попадает в число интегральных констант.
Если не верите на слово, вот кусок MSDN:
The switch statement allows selection among multiple sections of code, depending on the value of an integral expression.
switch ( expression )
case constant-expression : statement
[default : statement]
The expression must be of an integral type or of a class type for which there is an unambiguous conversion to integral type.