{
Here's a few routines you might find useful For your name problem.
I call the Function "UpperName" whenever the user presses a
valid Text key in a name field, but it can also be called just
once after the entire input String is entered.
}

(* First, some general routines: *)
(* ----------------------------- *)

Function  FindStrLength(S: String): Byte;
{ Finds "S"'s length, not counting trailing spaces }
Var
  StrLen: Byte Absolute S;
  I     : Byte;

begin
  I := StrLen;
  if StrLen > 0 then
    For I := StrLen downto 0 do
      if S[I] <> ' ' then
        Break;
  FindStrLength := I;
end; { FindStrLength }

Function WordDelimiter(C: Char): Boolean;
{ -Checks if "C" qualifies as a String Word-delimiter }
Const
  WordDels: Array[1..34] of Char =
    #32#9#13#10#39',./?;:"<>[]{}-=\+|()*%@&^$#!~';
Var
  I: Integer;

begin
  WordDelimiter := False;
  For I := 1 to 34 do
    if C = WordDels[I] then
    begin
      WordDelimiter := True;
      Break;
    end;
end; { WordDelimiter }

Function  ParceWord(S: String; Ind, L: Integer): String;
{ Returns the next Word from "Ind" index in "S" }
Var
  I: Integer;

begin
  ParceWord := '';
  I := Ind;
  For I := Ind to L do
    if WordDelimiter(S[I+1]) then
    begin
      ParceWord := Copy(S, Ind, I-Ind+1);
      Break;
    end;
end; { ParceWord }


(* Now down to business: *)
(* --------------------- *)

Procedure UpperName(Var S: String);
{ Converts the first Character in Words to upper Case letters }
Var
  I, L: Integer;
  St  : String;

begin
  L := FindStrLength(S);
  if L = 0 then
    Exit;
  For I := L downto 2 do
    if WordDelimiter(S[I-1]) then
    begin
      St := StUpCase(ParceWord(S, I, L));
      { you can put in exception Words here... }
      if (St = 'DE') or (St = 'DEN') then
      { ie: Markis de Bleuchamp or van den Haag }
         S[I] := 'd'
      else
        S[I] := UpCase(S[I]);
    end;
  S[1] := UpCase(S[1]);
end; { UpperName }

{
(The Function "StupCase" is from TurboPower Tpro, but any
routine that converts a String to upper Case letters will do).

Please note that I had to modify this source beFore
posting it here (it was full of norwegian name style
identifiers that only would've confused you), so it's not
tested in the current Form and may contain bugs.
...But I'm sure you get the general idea.  :-)

posting it here (it was full of norwegian name style
identifiers that only would've confused you), so it's not
tested in the current Form and may contain bugs.
...But I'm sure you get the general idea.  :-)
}