Jump to content
Fórum Script Brasil
  • 0

[resolvido] Converter Para Maiúcula


Pirambu!
 Share

Question

Estou precisando Converter as primeiras letras de um edit para maiúsculo "raimundo soares lima" para "Raimundo Soares Lima", eu tentei este código mas converte apenas a primeira letra da primeira palavra assim:

procedure TForm1.Edit1Change(Sender: TObject); 
var 
  OldStart : Integer; 
begin 
  With Edit1 do 
  if Text <> '' then begin 
  OnChange := NIL; 
  OldStart := SelStart; 
  Text := UpperCase(Copy(Text,1,1))+LowerCase(Copy(Text,2,Length(Text))); 
  SelStart := OldStart; 
  OnChange := Edit1Change; 
  end; 
end;
no caso eu precisaria identificar o espaço para que possa repetir o mando
Text := UpperCase(Copy(Text,1,1))+LowerCase(Copy(Text,2,Length(Text)));

alguém sabe como eu possa resolver isso?

Link to comment
Share on other sites

7 answers to this question

Recommended Posts

  • 0
Guest --felipe --
alguém sabe como eu possa resolver isso?

bom deve te uma função que faça isso.. mas como eu não sei

da pra você fazer assim:

s:=edit5.text;
  for i:=1 to Length(s) do begin
    mata:=s[i];
    if i=1 then mata:=(Uppercase(s[i]))
    else if s[i-1]=' ' then mata:=(Uppercase(s[i]));
    s[i]:=mata[1];
  end;
  edit5.text:=s;

~

a variavel aux é só porque da um erro de conversão entre "Char" e "String"

abraço

Link to comment
Share on other sites

  • 0

function ValidateString(Source :string; StrList: array of string) :Boolean;
var
  Idx :Integer;
begin
  Result := False;
  Idx := 0; // Incializa índice para a StrList
  // Enquanto não processar todas a palavras na lista e Source não fizer parte dela
  while (Idx < Length(StrList)) and not Result do
  begin
    Result := Source = StrList[Idx];
    Inc(Idx);
  end;
end;

function FirstCharUpper(Source :String) :String;
var
  Idx :Integer;
  StrWord :String;
begin
  Result := '';
  if Source = '' then
    Exit;
  Source := Trim(Source); // retira qualquer espaço extra
  repeat
    Idx := Pos(' ', Source); // Identifica o término da primeira palavra
    if Idx > 0 then // Se há espaço, há uma nova palavra após a encontrada
    begin
      StrWord := LowerCase(Trim(Copy(Source, 1, Idx-1))); // Isola primeira palavra de Source convertendo-a para minuscula
      if (Result = '') or // Se é primeira palavra ou não é uma das filtradas, converte primeira letra
        not ValidateString(StrWord, ['do', 'da', 'de', 'dos', 'e', 'das', 'na', 'no', 'nas', 'nos']) then
        StrWord := UpCase(StrWord[1]) +Copy(StrWord, 2, Length(StrWord));
      Source := Trim(Copy(Source, Idx +1, Length(Source))); // Retira primeira palavra de Source
      Result := Result +StrWord +' '; // Concatena palavras processadas, formando o resultado final
    end else // última palavra em Source a ser processada
      Result := Result +UpCase(Source[1]) +LowerCase(Copy(Source, 2, Length(Source)));
    until Idx = 0;
end;
Micheus, estou usando as funções acima como você indicou, Eu tentei assim:
TForm1.Edit1Change(Sender: TObject);
begin
edit1.text := FirstCharUpper(edit1.text);
end;

mas estar dando erro,

Verifica onde estou errando.

Link to comment
Share on other sites

  • 0
Micheus, estou usando as funções acima como você indicou, Eu tentei assim:

TForm1.Edit1Change(Sender: TObject);
begin
  edit1.text := FirstCharUpper(edit1.text);
end;
mas estar dando erro, Verifica onde estou errando.
Independente do uso da função, sempre que você fizer isto (alterar o conteúdo de um edit, dentro do evento OnChange) vai com certeza ter erro - voce estará provocando uma recursão infinita. Captou?! Quando precisar fazer algo assim, desative o evento antes de mudar o conteúdo do texto. Mas sempre que possível, dê preferência a fazer este tipo de coisa no evento OnExit. ;) Para desativar:
TForm1.Edit1Change(Sender: TObject);
begin
  edit1.OnChange := nil; // remove tratador do evento
  edit1.text := FirstCharUpper(edit1.text);
  edit1.OnChange := Edit1Change;  // recoloca
end;

Abraços

Link to comment
Share on other sites

  • 0

Micheus, eu tentei novamente mas não deu certo, ao digitar o cursor estar indo da direita para a esquerda assim a palavra "Carlos" estar aparecendo assim "Solrac". Talves seja a forma que eu esteja usando a função.

Link to comment
Share on other sites

  • 0
Quando precisar fazer algo assim, desative o evento antes de mudar o conteúdo do texto. Mas sempre que possível, dê preferência a fazer este tipo de coisa no evento OnExit.

é, eu tentei desta forma e deu certo.

valeu Micheus.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Forum Statistics

    • Total Topics
      149.8k
    • Total Posts
      646.6k
×
×
  • Create New...