Ir para conteúdo
Fórum Script Brasil
  • 0

Centralizar No Edit


Paulo Nobre

Pergunta

7 respostass a esta questão

Posts Recomendados

  • 0

Crie um TLabel (lb).

Ative a propriedade AutoSize.

procedure TForm1.EditKeyPress(Sender: TObject; var Key: Char);
begin
  lb.Font    := TEdit(Sender).Font;
  lb.Caption := TEdit(Sender).Text + Key;
  SendMessage(TEdit(Sender).Handle,
              EM_SETMARGINS,
              EC_LEFTMARGIN,
              (TEdit(Sender).Width-lb.Width) div 2);
end;

Para qualquer edit que queira centralizar, aponte o evento onKeyPress para o evento acima.

Link para o comentário
Compartilhar em outros sites

  • 0

s3c,

Criar um TLabel é simplesmente colocar um label no formulário com a propriedade visible = false ou significa alguma coisa mais complicada relacionada a classes.

Faço esta pergunta pois onde vi sua resposta(no trabalho) não tenho o delphi e portanto não testei.

obrigado

Paulo Npbre

Link para o comentário
Compartilhar em outros sites

  • 0

Tanto faz colocar um TLabel no Form e deixar visible=false ou criá-lo em execução.

Particularmente prefiro criá-lo em execução por ser um objeto de auxílio.

procedure TForm1.FormCreate(Sender:TObject);

begin

lb := TLabel.Create(Self);

lb.AutoSize := true;

end;

Se não for definida a prorpiedade Parent, automaticamente ele fica invisível.

E quando seu Owner é o TForm, ele se encarrega de liberá-lo.

Link para o comentário
Compartilhar em outros sites

  • 0

s3c, testado e aprovado!!

Apenas, como tive que usar também num edit que recebia resultado(embora pudesse ter feito isto num label), para colocar o código no evento OnChange retirei o "+ key" da linha do caption e funcionou corretamente.

Obrigado

PS: Se você puder( e quiser), poderia explicar um pouco em termos teoricos o que acontece com o código? Estou tentando(sou iniciante), aos poucos, aprender de fato Delphi e não ser um mero "colador de códigos-ctrl+c e ctrl+v".

Paulo Nobre

Link para o comentário
Compartilhar em outros sites

  • 0

Bom, um TEdit é uma janela Windows e como qualquer outra recebe e processa mensagens internamente. Em algumas delas temos acesso facilmente pelo Delphi, outras somente utilizando Apis, ou seja, mandamos que o Windows faça isso.

O Delphi poderia disponibilizar a propriedade Alignment num TEdit, mas não o fez.

Então fazemos isso mandando uma msg não para um TEdit do Delphi e sim para uma janela do Windows.

O SendMessage manda uma msg para um controle do Windows identificado pelo seu Handle(Edit.Handle); depois o tipo da mensagem(EM_SETMARGINS), qual margem(EC_LEFTMARGIN) e quantos pixels.

É claro que para cada tipo de mensagem existem tipos de parâmetros diferentes.

E também cada tipo de controle aceita certos tipos de mensagens e outros não.

No tipo EM_SETMARGINS o Windows já redesenha o controle, de modo que nem é preciso efeetuar o Repaint do TEdit.

Bom, acho que é mais ou menos isso.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,9k
×
×
  • Criar Novo...