Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
Как сделать, чтобы первая буква каждого слова в строке была в верхнем регистре

Вчера хакерам удалось взломать програмное обеспечение новой российской ракеты "Tополь". Получив root, они заменили заглавную букву в названии на "Ж".


function LowCase(ch: CHAR): CHAR;
begin
  case ch of
    'A'..'Z': LowCase := CHR(ORD(ch) + 31);
  else
    LowCase := ch;
  end;
end;

function Proper(source, separators: string): string;
var
  LastWasSeparator: BOOLEAN;
  ndx: INTEGER;
begin
  LastWasSeparator := TRUE;
  ndx := 1;
  while (ndx <= Length(source)) do
  begin
    if LastWasSeparator then
      source[ndx] := UpCase(source[ndx])
    else
      source[ndx] := LowCase(source[ndx]);
    LastWasSeparator := Pos(source[ndx], separators) > 0;
    inc(ndx);
  end;
  Result := source;
end;

Можно так:


function TfrmLoadProtocolTable.ToMixCase(InString: string): string;
var
  I: Integer;
begin
  Result := LowerCase(InString);
  Result[1] := UpCase(Result[1]);
  for I := 1 to Length(InString) - 1 do
  begin
    if (Result[I] = ' ') or (Result[I] = '''') or (Result[I] = '"')
      or (Result[I] = '-') or (Result[I] = '.') or (Result[I] = '(') then
      Result[I + 1] := UpCase(Result[I + 1]);
  end;
end;

Примечание:

Приведенные выше функции вызовут нарушение прав доступа, в случае, если в качестве входного параметра им послать пустую строку (первая функция) или последний символ имеется в проверяемом наборе (вторая функция).

Попробуйте взамен это:


function proper(s: string): string;
var
  t: string;
  i: integer;
  newWord: boolean;
begin
  if s = '' then
    exit;
  s := lowercase(s);
  t := uppercase(s);
  newWord := true;
  for i := 1 to length(s) do
  begin
    if newWord and (s[i] in ['a'..'z']) then
    begin
      s[i] := t[i];
      newWord := false;
      continue;
    end;
    if s[i] in ['a'..'z', ''''] then
      continue;
    newWord := true;
  end;
  result := s;
end;

Проект Delphi World © Выпуск 2002 - 2004
Автор проекта: ___Nikolay