WMKey

Delphi

05/06/2006

Estou fazendo um componente lista o problema que to tentando resolver é que quando o componente tiver em foco e quando apertar as setas mover dentro do componente entre os registro da lista??

Alguem pode me ajudar??


Rudá

Rudá

Curtidas 0

Respostas

Massuda

Massuda

05/06/2006

Imagino que ´lista´ seja um listbox... para trocar dois itens de posição dentro do listbox, faça...
// troca as posições dos dois primeiros itens do listbox
SeuListBox.Items.Exchange(0, 1);



GOSTEI 0
Rudá

Rudá

05/06/2006

Descupe acho que não expliquei direito, estou criando um componente tipo um listbox, só que eu to fazendo um personalizado para o que eu quero só que eu to tentando resolver esse problema de usar as setas para mudar de registro, quero saber como detectar elas!


GOSTEI 0
Massuda

Massuda

05/06/2006

No seu componente, sobreescreva o método protegido DoKeyDown...
type
  TSeuListBox = class...
  ...
  protected
    procedure KeyDown(var Key: Word; Shift: TShiftState); override;
  ...


procedure TSeuListBox.KeyDown(var Key: Word; Shift: TShiftState);
begin
  // talvez tenha que verificar o valor de Shift!

  // exemplo de como tratar seta para cima/para baixo
  if Key = VK_UP then begin
    ... trata seta para cima...
    Key := #0; // descarta
  end
  else if Key = VK_DOWN then begin
    ... trata seta para baixo...
    Key := 0; // descarta
  end;

  inherited KeyDown(Key, Shift);
end;



GOSTEI 0
Rudá

Rudá

05/06/2006

Fiz isso mas quando aperto alguma seta ele muda de componente e não executa nenhuma ação no componente!


GOSTEI 0
Massuda

Massuda

05/06/2006

Qual é a classe pai do seu componente?


GOSTEI 0
Rudá

Rudá

05/06/2006

TCustomControl


GOSTEI 0
Rudá

Rudá

05/06/2006

Alguem?


GOSTEI 0
Massuda

Massuda

05/06/2006

Como está o KeyPreview do seu form? Você tem algum tratamento especial de teclas no seu form?


GOSTEI 0
Rudá

Rudá

05/06/2006

O KeyPreview está false

Não tem nenhum tratamento!


GOSTEI 0
Massuda

Massuda

05/06/2006

O comportamento que você descreveu (seta para cima/para baixo muda de componente) só é possível se tiver algo no form interceptando e tratando as teclas antes dos componentes.


GOSTEI 0
Rudá

Rudá

05/06/2006

Criei um novo projeto e coloque dois botoes depois rode se vc apertar qualquer tecla ele vai mudar o foco entre os botoes!


GOSTEI 0
POSTAR