Ir para conteúdo
Fórum Script Brasil

Thales Pontes Martins

Membros
  • Total de itens

    453
  • Registro em

  • Última visita

Tudo que Thales Pontes Martins postou

  1. No post acima do seu respondi. você perguntou em outros fórums, mas você tem que perguntar primeiro aqui, porque se não me engano aqui é um dos melhores fórums do Brasil. E eu não escreví logo todo o código no primeiro post porque agente tem que aumentar o nosso número de posts de alguma maneira :lol: . E também existe uma função para fazer com que o computador hiberne. Não lembro o nome de cabeça mas se estiver interessado eu posso olhar pra você.
  2. Beleza, faça todos os testes pra ver se funciona direitinho, qualquer coisa por favor avise. Nunca fiz isso antes e também tenho curiosidade de saber o que acontece. Vou dar uma olhada pra ver onde essas constantes são declaradas e posto mais tarde. Paulo, no meu aqui elas estão declaradas na unit Windows, mas pode ser que no seu não estejam porque nas versões anteriores do windows era utilizada uma mensagem diferente para essa ocasião, e como você usa o Delphi 7 e eu o Delphi 2006, é possivel que o delphi 2006 contenha constantes para as versões mais atuais do windows.
  3. Mas você tentou hibernar pra ver se o resultado foi o esperado?
  4. O que eu quis dizer é que, PBT_APMQUERYSUSPEND é uma constante, ao invés de você colocar o identificador da constante que é PBT_APMQUERYSUSPEND, você coloca o valor dessa constante que é 0 nesse caso. Certo?
  5. PBT_APMQUERYSUSPEND = 0 PBT_APMRESUMESUSPEND = 7 O protected aí não tem nada a ver não, pode ser no private mesmo. Mas porque raios queres desliguar esse Timer?
  6. Bom Paulo, eu não testei porque não estou com o Delphi aqui, mas acho que ficaria mais ou menos assim -> uses messages; type TForm1 = class(TForm) . . protected procedure Hiber(var Msg: TWMPower); message WM_POWERBROADCAST; end; implementation procedure TForm1.Hiber(var Msg: TWMPower); begin if (msg.PowerEvt = PBT_APMQUERYSUSPEND) then Timer1.enabled:=false else if (msg.PowerEvt = PBT_APMRESUMESUSPEND) then Timer1.enabled:=true; msg.result:=1; end; Acho que seria isso.
  7. Paulo, coloca aí um procedimento: procedure Hiber(var Msg: TWMPower); message WM_POWERBROADCAST; o campo PowerEvt vai ser igual a PBT_APMQUERYSUSPEND, nesse procedimento desligue seu timer e coloque o campo result para true. Acho que é isso. Bom, a menssagem por si só é WM_POWERBROADCAST com wParam igual a PBT_APMQUERYSUSPEND.
  8. Bom, se é streaming está tudo certo. O ruim é que o negócio é cheio de sacanagem, é PreprareHeader, é não sei mais oque. isso é o de menos. E não é no arquivo, é no buffer. O difícil é entender todas as estruturas e rotinas que existem para lidar com isso, porque são bem complexas. outra coisa também que eu não entendí é como se faz pra saber quanto do buffer já foi reproduzido, isso porque eu quero preencher o buffer antes que ele seja completamente esvaziado para não correr o risco da reprodução cessar. Vou ver oque posso fazer. Qualquer um que souber ou ver alguma coisa interessante sobre esse assunto, ainda estou interessado em saber. Algum exemplo novo, qualquer coisa, podem postar. PS: Amostragems acima de 8 bits é com sinal mesmo.
  9. É, é muita complexidade para fazer uma coisa simples. Pelo pouco que percebi dando uma olhada no código, ele utiliza as funções WaveOutOpen, WaveOutWrite, WaveOut* . . . Mas alí ele não faz um streaming, ele coloca o arquivo todo no buffer, estou certo? Mas com essas funções deve ser possível fazer um streaming, eu suponho. A minha intenção não é usar os instrumentos da placa, e sim permitir que o usuário grave suas próprias amostras de instrumentos e monte uma sequência; Seria como um novo tipo de module diferente dos já existentes (não tenho saco nem QI para hackear os já existentes). Sendo assim, se essas funções permitirem streaming e se eu tiver acesso direto ao buffer eu posso ajustar a nota dessas amostras, volume, separação estéreo, mixar os canais e salvar o resultado no buffer para reprodução. E quanto aos intrumentos da placa, eu ví umas funções na MMSystem que trabalham com midis, midiOutOpen, midiInOpen... Acho que tem a ver com os instrumentos da placa. Conheço sim, muito bom esse site, já baixei muita coisa lá, tem de tudo lá. Uma coisa que notei é aquele registro com as informações do Wave que é passado para a função WaveOutOpen, não ví a informação de sinal nele, ou seja, se as palavras amostradas tem sinal ou não. Será que só permite com sinal? Então, ainda permanece a dúvida do streaming.
  10. Eu ainda não lí o artigo todo, mas lá explica algumas coisas interessantes, como a idéia dos Sound Devices; Que existem devices com buffer estático para armazenar um som que vai ser tocado várias vezes no programa (como um tiro no Counter Strike), e devices com Streaming Buffer, que é um buffer pequeno que contantemente recebe novos dados e é reproduzido, para conteúdos longos onde não se pode prever o que vem depois (ex: um cara tocando piano no teclado do micro). É desse segundo que eu necessito. Não quero ter que gerar o som todo (vamos supor 10 minutos) na memória pra depois reproduzir, isso gastaria muita memória e levaria muito tempo para começar a reprodução. Eu quero ir sintetizando o som e ao mesmo tempo ir reproduzindo, e o som que já foi reproduzido não necessita mais de ficar na memória e pode ser destruído. Agora, nesse artigo fala-se da necessidade da utilização do directx para se trabalhar com os Devices, mas se não me engano na Unit MMSystem do Delphi já existem essas rotinas (OpenDevice, GetDevice.....), não? Foi uma pena eu não poder ter compilado o projeto desse artigo pois ele não foi feito no Borland C# Builder, que é o que eu tenho. E também não pude encontrar o .EXE para baixar.
  11. Opa, era disto que eu estava falando. Vou dar uma estudada no artigo e qualquer coisa eu posto aí. Muito obrigado.
  12. desculpe me intrometer, mas aquele end; do código do traira007 é o end; do case ou da procedure? porque se for o end; da procedure então está faltando o end; do case. Me desculpe se estiver errado.
  13. Opa, o caminho deve ser esse, só que não é um arquivo, o meu programa vai sintetizar o som na hora e tem que sair na caixa. Valeu.
  14. Isso pode parecer uma pergunta estúpida, mas como eu faço para mandar um som produzido pelo meu programa para a caixa? Eu acho que deve ter alguma coisa a ver com api's do Windows. Não tem urgência nenhuma, se alguém tiver uma idéia de por onde devo começar, posta aí que eu dou uma estudada. Valeu.
  15. Caso você não tenha resolvido ainda, é só você colocar o OwnerDraw do TMainMenu para true e colocar o seguinte evento OnDrawItem nos MenuItem's -> procedure TForm1.Arquivo1DrawItem(Sender: TObject; ACanvas: TCanvas; ARect: TRect; Selected: Boolean); begin acanvas.brush.Color:=color; acanvas.FillRect(arect); acanvas.TextOut(arect.Left,arect.Top,(sender as tmenuitem).Caption); end; E no último MenuItem, para que seja pintado até o final do menu, o seguinte evento OnDrawItem -> procedure TForm1.hgjnbvm1DrawItem(Sender: TObject; ACanvas: TCanvas; ARect: TRect; Selected: Boolean); begin acanvas.brush.Color:=color; arect.Right:=width-4; acanvas.FillRect(arect); acanvas.TextOut(arect.Left,arect.Top,(sender as tmenuitem).Caption); end; Graças ao Micheus que mencionou essas propriedades e eventos. E lembrando que é possível utilizar outra cor caso o parametro selected seja true. E lembrando que é possível utilizar o evento OnAdvancedDrawItem onde existe o parametro State, aí você pode escolher a cor do menu de acordo com cada um dos seus possíveis estados -> TOwnerDrawState = set of (odSelected, odGrayed, odDisabled, odChecked, odFocused, odDefault, odHotLight, odInactive, odNoAccel, odNoFocusRect, odReserved1, odReserved2, odComboBoxEdit); E lembrando que o caption dos TMenuItems algumas vezes tem o '&' antes do texto.
  16. Na verdade o numero de posts é 4294967301, é porque deu overflow na variável -> DWORD( 4294967295 ) + DWORD( 6 ) = DWORD ( 5 ); E o número de vizualizações deu overflow 2 vezes.
  17. É eu não sabia que existia uma propriedade (CommaText) que fazia exatamente o que ele queria. Se agente conhecesse todos os recursos do Delphi, pouparíamos muito trabalho.
  18. Opa, valeu pela dica doutor Churc. Esse negócio de criar um thread, é difícil de imaginar, porque se o task manager mostra a lista de processos, e o thread pertence ao processo, assim que o processo for finalizado o thread também será, até onde eu sei. No site do Torry tem um exemplo de um programa em delphi que mostra os processos executados pelo windows, mas mostra todos; Aquilo que o task manager mostra não é nem 10% :lol: . Acho que ele mostra inclusive todas as threads de cada processo. É igual a uma árvore de pastas no windows explorer, com os + do lado esquerdo que você clica e ele mostra os processos que pertencem a eles; Um processo dentro do outro e assim por diante. Acho que oque algums programas fazem é criar dois processos, um fica monitorando a presença do outro, assim que um for killado o outro imediatamente o recria, assim não dá tempo do infeliz que está tentando finalizar conseguir finalizar os dois ao mesmo tempo, já que o task manager não permite seleção múltipla.
  19. Opa, será que assim dá certo? Juntando a minha função com loop for? type Tfields = array [1..8] of string; const fields : TFields = ('COD', 'CONTAD', 'CONTAC', 'DATA', 'VALOR', 'REG1', 'HISTORICO', 'REG2'); begin while not eof(F1) do begin readln(f1,s1); IBTable1.Open; IBTable1.insert;// for i:=1 to 8 do begin IBTable1.fieldbyname(fields[i]).asstring := GetQuote(s1,i); end; IBTable1.applyupdates; closefile(f1); end; end;
  20. Ele vai ter que escrever um comando pra cada campo da tabela, então não vejo problema en passar o índice. E se fosse em loop for também não tinha problema, seria até melhor que aí ele usaria a var de controle para indexar o campo.
  21. Opa, se eu não me engano o Delphi 2005 tem o componente TTrayIcon, se não me engano na paleta samples.
  22. Mas e quanto a aqueles programas que você tenta fechar pelo task manager e dá uma mensagem: "Acesso Negado", e não dá pra fechar. Como se faz aquilo?
  23. Bem, Micheus, acho que a minha função faz mais ou menos isso só que não modifica a string lida, sendo que é possível ler o mesmo campo várias vezes, apenas fornecendo o índice. A não ser que ele queira que sejam apagados os campos da string a medida em que são lidos.
  24. Opa descobrí: BitBlt( Dest.Canvas.Handle, // handle to destination DC 0, // x-coord of destination upper-left corner 0, // y-coord of destination upper-left corner 80, // width of destination rectangle 80, // height of destination rectangle Source.Canvas.Handle, // handle to source DC 0, // x-coordinate of source upper-left corner 0, // y-coordinate of source upper-left corner SRCAND // raster operation code ); Voces não me disseram para provar que eu era capaz de descobrir sozinho, né?
×
×
  • Criar Novo...