Merhaba,
Çok zamanım olmadığından performanslı bir şey yazamadım ama kaba mantığı bu, geliştirip kullanılmasını öneririm.
Uses
 System.Character;

function kontrolet(str:String):Boolean;
var
  i: integer;
  durum: array[0..2] of Boolean;
begin
  if str.Trim ='' then
  exit(false);
  durum[0] := false; durum[1] := false; durum[2] := false;
  for i := 0 to Length(str) do
  begin
    if str[i].IsUpper = true then
    durum[0] := True;
    if str[i].IsLower = true then
    durum[1] := True;
    if str[i].IsPunctuation = true then
    durum[2] := True;
  end;
  if (durum[0]=true)and(durum[1]=true)and(durum[2]=true) then
  Result := true;
end;