Ir para conteúdo
Fórum Script Brasil

kmkg

Membros
  • Total de itens

    40
  • Registro em

  • Última visita

Posts postados por kmkg

  1. Pessoal, quando aloco memória para um Pointer:

    ...
    private
      p:Pointer;
    ...
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      p := AllocMem(65536);
    end;

    Em outro ponto do programa gostaria de saber quanto foi alocado para p. Teria algum jeito de saber pelo próprio ponteiro ?

  2. Não me digam que vocês entenderam esse assembly que o Micheus escreveu.
    Eu não e passo longe do Assembly.

    Este foi um erro sutil que me aconteceu e fiquei algumas horas para achá-lo porque tenho que utilizar o Move no recebimento de dados de uma classe que trabalha com Sockets; então de acordo com o tipo de dado vindo pelo SendBuf, alimento os campos Double, Integer, Smallint, Boolean, etc . . .

    O que aconteceu foi o envio de um tipo Byte com valor 8 que joguei para um Boolean e com isso a condição não satisfazia true e nem false.

  3. Acho que é isso mesmo, ele efetua a comparação pelo valor binário do campo.

    quanto ao título é porque fiquei umas 4 horas pra achar este erro(erro meu de programa), depois ví num outro fórum a mesma coisa entitulado: Variável Boolean nem true, nem false. Aconteceu com outro também a mesma coisa.

  4. Para as horas vagas

    var b1,b2:Boolean; Baiti:Byte;
    begin
      Baiti := 8;
      b1    := true;
      Move(Baiti, b2, 1);
      if b1 and b2 then
        ShowMessage('b2 é true')
      else
      if b1 and not b2 then
        ShowMessage('b2 não é true')
      else
      if b1 then
        ShowMessage('O compilador ficou meio maluco')
      else
        ShowMessage('O compilador ficou maluco');
    end;

  5. Ainda assim tenho lá minhas dúvidas. Se o msdn disse que só estava no XP, talvez no 2000 foi implementado em algum SP; parece-me que o 2000 está no SP4, talvez o do Micheus esteja também e pode ser que os 2000 desatualizados não tenham essa função na dll.

  6. Mas uma das vantagens do SHFileOperation na cópia é a barra de progresso.

    Se for um arquivo ou diretório muito extenso, o usuário teria uma previsão de término, ao passo que escrevendo rotinas específicas, você teria que fazer uma recursão para saber o total de size dos arquivos e depois outra recursão para copiá-los pelo BlockRead e BlockWrite para implementar a barra.

  7. Vai ver que ele quer números + e -

    Pode fazer assim também:

      Randomize;
      for i := 1 to 15 do
        Vet1[i] := Random(High(DWord));
    acho que assim é mais simples:
      for i := 1 to 15 do
        vet1[i] := i;

    Abs. Progr'amador.

    É mais simples, mas nunca dará um número negativo

  8. Sim, ProcessMessages processa todas as msgs da aplicação; tanto da Thread principal, quanto das secundárias.

    Particularmente, utilizo Timers em Threads, mas prefiro fazer isso numa outra Thread pelo GetTickCount.

    Não sei porque, mas não gosto muito de utilizar o ProcessMessages.

  9. E quanto a função de callback, ela só roda quando a aplicação está em idle, nesse caso a sua thread está sempre rodando um código dentro daquela repetição while, então se ela está rodando aquele código ela não pode rodar ao mesmo tempo a procedure de callback, certo? ;)

    Se for colocado Application.ProcessMessages a cada iteração do loop, o callback será executado.

    Afinal as Threads servem justamente para rodar processos em concorrência.

  10. Verifique quantas vezes você executa SetTimer dentro do método Execute.

    Pode ser que ele esteja sendo executado a cada iteração do looping e isso faz com que o Timer seja zerado.

    Ou seja, como seu idTimer é sempre 1, o tempo começa a ser contado a partir do último SetTimer executado.

  11. Olá, defina a callback:

    procedure Timer_Proc(H:Thandle; Msg,Event,Time:DWord); stdcall;
    begin
      if Msg = WM_Timer then
        {evento onTimer}
    end;
    Depois para ativar o Timer:
      SetTimer(0, 1, 3000, @Timer_Proc); // Executa a cada 3 segundos

×
×
  • Criar Novo...