Concatenar variaveis

28/07/2008

4

Oi.

Tenho uma dúvida...
Um dos meus programas gera um numero de 1 a 100... esse numero corresponde a 100 botoes...

porem o numero radonizado... eh pra selecionar o botão.
Aí vai um exemplo:
btnQrt_1;
btnQrt_2;
btnQrt_3;
//etc...
randomize;
numero := random(99);//vem o zero entao eu coloco 99 pois sao 100 possibilidades.
//aqui está o problema.
//suponha-se que o random tenha saido 3
(btnQrt_+numero).Enabled := True;


Na ultima linha quero selecionar o botão de numero tal usando o numero gerado pela função random.

Alguem pode me dar uma luz nesse problema!?


Responder

Posts

28/07/2008

Carlosrm

.lg.,

veja se te serve esta opção:

procedure TF_Compras.btnRandomizeClick(Sender: TObject);
var
  I, numero : integer;
begin
// randomize;
  numero := random(99);
  for I := 0 to ComponentCount - 1 do
     if (Components[I]  is TButton) then begin
        if ((Components[I] as TButton).name = ´btnQrt_´+inttostr(numero+1)) then begin
          (Components[I] as TButton).enabled := true;
        end
        else
          (Components[I] as TButton).enabled := false;
     end;
  btnRandomize.enabled := true;   //este botão que vai acionar a função random.
end;


Obs: Testei apenas no Delphi7. Tenha especial atenção com os ´is´ e ´as´. Espero que ajude.
carlosrm


Responder

29/07/2008

.lg.

:D
carlosrm,

Ajudou e muito.
Muito Obrigado.


Responder

29/07/2008

.lg.

corrija-me se eu estiver errado...

você colocou como uma condição para achar o botão.
mas e se for o caso de chamar essa variável usando ese metodo que você mostrou.. seria assim:
(TButton).name(´btnQrt_´+IntToStr(numero)).Enabled := True;

PS. Estou no serviço, aqui é meio dificil de ver pois o acesso à internet é fora da area de trabalho, então não tem como eu ver. Em casa também tenho o delphi 7, porem aqui no serviço eles usam o delphi 5. :(


Responder

29/07/2008

Carlosrm

.lg.

eu testei com a linha abaixo e funcionou (no D7).
TButton(FindComponent(´btnQrt_´+inttostr(numero+1))).Enabled := True;



[b:2ad2b7256c]TButton[/b:2ad2b7256c] é a classe do componente;
[b:2ad2b7256c]FindComponent[/b:2ad2b7256c] é a função que procura um componente da classe especificada (TButton), usando o conteúdo da propriedade Name desse componente;
[b:2ad2b7256c]´btnQrt_´+inttostr(numero+1)[/b:2ad2b7256c] é o nome do componente procurado;
[b:2ad2b7256c]Enabled := True[/b:2ad2b7256c] é uma das propriedades e seu valor, dentre as propriedades que a classe TButton contém. Poderia ser ´Color := clRed´, ´Visible := False´, e assim por diante.

Que eu me lembre, funciona igualmente no D5. Experimente.
carlosrm :)


Responder

29/07/2008

.lg.

:)
Deu.
Ultima dúvida.

E se for com variável e constantes!?
como que faz?


Responder

29/07/2008

Carlosrm

.lg.,

desculpe, eu não entendi... ´e se for com variável e uma constantes!?...´ Você quer saber como usar FindComponent usando variáveis e constantes?
Explique mais detalhado o que você quer fazer, que talvez eu ou outro colega do fórum possa te dar alguma dica...

carlosrm :)


Responder

30/07/2008

.lg.

desculpe, eu não entendi... ´e se for com variável e uma constantes!?...´ Você quer saber como usar FindComponent usando variáveis e constantes? Explique mais detalhado o que você quer fazer, que talvez eu ou outro colega do fórum possa te dar alguma dica... carlosrm :)

Por exemplo:
Tenho lá:
var
  peca_1: String;
  peca_2: String;
  peca_3: String;
  //etc...

Const
  peca_P_1: array[1..4] of Integer = (
    0, 0,
    1, 1);
  peca_P_2: array[1..4] of Integer = (
    0, 0,
    0, 1);
  peca_P_3: array[1..4] of Integer = (
    0, 1,
    1, 0);

implementation

procedure frmTeste.Teste;
var
  I: Integer;
begin
  randomize;
  I := random(2) + 1;
  (´peca_´+IntToStr(I)) := IntToStr((´peca_P_´+IntToStr(I))[1]);
end;


Taí o exemplo com ambas... variável e constante...
(´...nossa como o F1 do delphi as vezes é inutil... hehehe.´)

Alguma idéia!?
Agradeço a ajuda que esta me dando. Está me ajudando muito.


Responder

30/07/2008

Carlosrm

.lg.,

vou viajar uns dois dias. Na volta, se ainda não encontrou uma solução, verei se posso ajudar.

Abraço. carlosrm :)


Responder

30/07/2008

Paulo_amorim

Olá

Creio que isso não seja possível. Quando o que se procura é um componente, pode-se usar a função FindComponent porque o componente tem gravado o nome na propriedade Name.

Uma variável, por outro lado, não tem seu nome guardado. De fato, na compilação seu nome é trocado pela posição de memória a que ele se refere. Dessa forma, em tempo de execução você não tem acesso a um nome de variável.

Nesse caso, minha sugestão é que se faça uso de arrays, trabalhando com seu índice.

var
  peca: array [1..3] of String;
const
  peca_P: array [1..3] of array [1..4] of Integer = {faça as atribuições};

...
procedure Teste
var
  i: Integer;
begin
  i := random(2) + 1;
  peca[i] := IntToStr( peca_P[i][1] );
end;


Espero que ajude
Até+


Responder

30/07/2008

.lg.

Que triste. :(
Se for o caso de um jogo então... aonde se tem milhares de nomes dados a variáveis... teria de criar um arquivo so pra armazenar essas variáveis.

Vou ver se faço uma gambiarra de uma função para fazer isso pra mim. :)

Obrigado,
.lg.


Responder