Concatenar variaveis
28/07/2008
0
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!?
.lg.
Posts
28/07/2008
Carlosrm
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
29/07/2008
.lg.
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. :(
29/07/2008
Carlosrm
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 :)
29/07/2008
.lg.
Deu.
Ultima dúvida.
E se for com variável e constantes!?
como que faz?
29/07/2008
Carlosrm
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 :)
30/07/2008
.lg.
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.
30/07/2008
Carlosrm
vou viajar uns dois dias. Na volta, se ainda não encontrou uma solução, verei se posso ajudar.
Abraço. carlosrm :)
30/07/2008
Paulo_amorim
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é+
30/07/2008
.lg.
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.
Clique aqui para fazer login e interagir na Comunidade :)