{ 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. :-) }