código só funciona se colocar um showmessage

17/05/2017

0

Prezados,

estou com a seguinte situação. Fiz um cod para que quando eu coloque um 's' no edit1 o edit15 se alto preencha com 'F'. A questão é a seguinte. o Cod só funciona se eu fizer um showmessage da variavel entes do comendo. como resolver sem precisar de por o showmessage?
procedure TfCadEscala.Edit1Change(Sender: TObject);
var i,y,k, j:integer;
const vartag: array[1..28] of integer = (15,16,17,18,19,20,21,22,23,24,25,26,27,28,1,2,3,4,5,6,7,8,9,10,11,12,13,14);

begin
if checkFolgador.IsChecked then
  begin

  for I := ComponentCount -1 downto 0 do

    if (Components[i] is TEdit) then
      begin
      for j := 1 to 14 do
        if (Components[i] as TEdit).tag=j then
          begin
            if (Components[i] as TEdit).Text='S' then
              begin
                k:=(Components[i] as TEdit).Tag;
                for y := ComponentCount -1 downto 0 do
                  if (Components[y] is TEdit) then
                    if (Components[y] as TEdit).tag=vartag[k] then
                      begin
                      ShowMessage(inttostr(k));
                      (Components[y] as TEdit).text:='F';
                      end;
              end;

          end;
      end;
  end;
end;
David

David

Responder

Post mais votado

17/05/2017

Opa! Isso já aconteceu comigo há uns anos atrás, e na época eu tinha colocado um break point e "misteriosamente" o código voltou a funcionar. Parecia que era um bug de atualização (era o Delphi 2010)

Jones Granatyr

Jones Granatyr
Responder

Mais Posts

18/05/2017

David

Infelismente não deu... uso o delphi seatlle! Obrigado
Responder

18/05/2017

Mateus Ribeiro

Boa tarde!

Não consegui simular seu código, a geração do processo é bloqueado quando tento executar, acho que o windows pensa q to fazendo virus rs.

Se entendi seu objetivo, segue uma alternativa!
Caso nao seja isso, a gente pensa em algo. Boa sorte!
function IsNumberInArray(const ANumber: integer; const AArray: Array Of Integer): Boolean;
var i: integer;
begin
  result := false;
  for i := Low(AArray) to High(AArray) do
    if ANumber = AArray[i] then
    begin
      Result:= true;
      Exit;
    end;
end;

procedure TForm1.Edit1Change(Sender: TObject);
const vartag: array[1..28] of integer = (15,16,17,18,19,20,21,22,23,24,25,26,27,28,1,2,3,4,5,6,7,8,9,10,11,12,13,14);
var i, c: Integer;
begin

  if UpperCase(TEdit(Sender).Text)<>  'S' then
    Exit;

  for i:= 0 to Form1.ComponentCount - 1 do
  begin

    for c:= 0 to Form1.ComponentCount - 1 do
      if IsNumberInArray(TWinControl(Components[c]).Tag, VarTag) then
      begin
        TEdit(Components[c]).Text:= 'F';
      end;

  end;

end;


Obs: Delphi 7
Responder

19/05/2017

David

Pessoal, fiz um teste aqui agora e parece que deu certo!
mudei o campo "Direction" do "linkControlToFieldXX" de "linkBiDirectional" para "linkControlToData" e parou de dar o problema!
Parece que quando o campo está vinculado nas duas direções o mesmo não funciona direito no onchange!
Não sei se é o correto, contudo, parece que deu certo!
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar