RadioGroup, cada vez pressionada tecla altera os items

Delphi

27/10/2007

Olá.

Gostaria de saber como posso fazer o seguinte:


Eu tenho um RadioGroup com 4 Items, certo!
Utilizo um ActionList e atribuo a ShorCut := F7

Oque quero, é que cada vez que eu pressionar F7 ele altere a posição dos Items no meu RadioGroup.
Exemplo:


Inicio meu Form.
RadioGroup := 0

Pressiono F7
RadioGroup := 1

Pressiono novamente F7
RadioGroup := 2

Pressiono novamente F7
RadioGroup := 3


Será que os amigos podem me ajudar?
Agradeço.

Att.


Devmedia

Devmedia

Curtidas 0

Respostas

Alecsandro Moura

Alecsandro Moura

27/10/2007

E ai lucasfss blz!
Bom usando uma action list eu não sei como te ajudar, mas dá para fazer da seguinte maneira:

  public
    { Public declarations }
  end;

var
  Form1: TForm1;
//Aqui vc coloca uma varialvel para controlar a entrada do focu no componente
  controle :Integer;
implementation


Depois no OnEnter do RadioGroup coloca
begin
  controle := 1;
end;


depois no OnExit do RadioGroup
begin
  controle := 0;
end;


depois mude o keyPreview do form para true

e depois no OnKeyDown do form faça:
var
  tecla :Integer;
begin
  if (controle = 1) and(Key = VK_F7) Then
    begin
      tecla := RadioGroup1.ItemIndex;
      RadioGroup1.ItemIndex := tecla + 1;
      if tecla = RadioGroup1.Items.Count -1 Then
        RadioGroup1.ItemIndex := 0;
    end;
end;


Bom pelo menos dessa maneira dá para fazer o que vc deseja. :wink:

espero ter ajudado :D


GOSTEI 0
Marco Salles

Marco Salles

27/10/2007

outra maneira

particularmente gosto de concentrar os meus codigos facilita a manutenção

Adicione um componente TApplicationEvents no Projeto e no seu evento
ShortCut escreva..

procedure TForm1.ApplicationEvents1ShortCut(var Msg: TWMKey;
  var Handled: Boolean);
begin
if msg.CharCode = vk_F7 then
  with RadioGroup1 do
    if itemIndex = componentCount-1 then
       itemIndex:=0
    else
      itemIndex:=itemIndex+1;
end;


P:S Se não quiser disparar o evento OnClick do RadioGroup deve desabilita-lo temporariamente


GOSTEI 0
Devmedia

Devmedia

27/10/2007

Cara, muito obrigado pela ajuda.
Deu certo.


Fiz algumas modificações no codigo.
Porque eu preciso de colocar mudanças em outros componentes apartir do Item selecionado no meu RadioGroup. Falo no OnClick do RadioGroup.

Segue a modificação:

procedure TFormProdutosPesquisa.FormShow(Sender: TObject);
begin
//Ao iniciar o Form, manda o foco para RadioGroupOpcaoProdutosPesquisa
RadioGroupOpcaoProdutosPesquisa.SetFocus;
//Fim do Codigo.
end;



procedure TFormProdutosPesquisa.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var 
  Tecla : Integer;

begin 

  [color=blue]If Key = VK_F7 then
     Begin
        RadioGroupOpcaoProdutosPesquisa.SetFocus;
     end;        [/color]

  If (Controle = 1) and (Key = VK_F7) Then
    begin 
      Tecla := RadioGroupOpcaoProdutosPesquisa.ItemIndex;
      RadioGroupOpcaoProdutosPesquisa.ItemIndex := Tecla + 1;
      If Tecla = RadioGroupOpcaoProdutosPesquisa.Items.Count -1 Then
         RadioGroupOpcaoProdutosPesquisa.ItemIndex := 0;
    end; 
end; 



Meu Onclick do RadioGroup:

   If RadioGroupOpcaoProdutosPesquisa.ItemIndex = 0 then
        Begin
           LabelTextoPorOpcaoProdutosPesquisa.Caption := ´Digite aqui o NOME a ser pesquisado:´;
           EditDigiteProdutosPesquisa.MaxLength := 30;
           EditDigiteProdutosPesquisa.SetFocus;
        end;
     If RadioGroupOpcaoProdutosPesquisa.ItemIndex = 1 then
        Begin
           LabelTextoPorOpcaoProdutosPesquisa.Caption := ´Digite aqui a REFERÊNCIA a ser pesquisado:´;
           EditDigiteProdutosPesquisa.MaxLength := 6;
           EditDigiteProdutosPesquisa.SetFocus;
        end;
     If RadioGroupOpcaoProdutosPesquisa.ItemIndex = 2 then
        Begin
           LabelTextoPorOpcaoProdutosPesquisa.Caption := ´Digite aqui o CÓDIGO SEQUÊNCIA a ser pesquisado:´;
           EditDigiteProdutosPesquisa.MaxLength := 6;
           EditDigiteProdutosPesquisa.SetFocus;
        end;
     If RadioGroupOpcaoProdutosPesquisa.ItemIndex = 3 then
        Begin
           LabelTextoPorOpcaoProdutosPesquisa.Caption := ´Digite aqui o CÓDIGO DE BARRA a ser pesquisado ou utilize a Leitora:´;
           EditDigiteProdutosPesquisa.MaxLength := 13;
           EditDigiteProdutosPesquisa.SetFocus;
        end;



Agora porque fiz isto?
Porque toda vez que teclava F7 ele fazia oque foi prometido, mas não retornava o Focu para o RadioGroup. Com isso não retornava para alterar o Item desejado.

Muito obrigado pela ajuda.
Att.


GOSTEI 0
Devmedia

Devmedia

27/10/2007

[color=blue:85425fbeda]If Key = VK_F7 then Begin RadioGroupOpcaoProdutosPesquisa.SetFocus; end; [/color:85425fbeda]



Estes colors foi bug do forum. Não sei porque não saiu azul o texo.
Inté.


GOSTEI 0
POSTAR