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. Opa, Trim é a função que retorna uma string sem os espaços do início e final. Pred é a função que retorna o predecessor de um número. Succ é a função que retorna o successor de um número. Inc é o procedimento que incrementa um número. Dec é o procedimento que decrementa um número -> ( pred(5) = 4 ); ( succ(5) = 6 ); I:=5; inc(I); ( I = 6 ); I:=5; dec(I); ( I = 4 ); I:=5; inc(I,3); ( I = 8 ); I:=5; dec(I,3); ( I = 2 ); Toma vergonha na cara, mete um Delphi aí. Não que o dev pascal não seje bom, mas o Delphi é muito mais completo.
  2. Com esse link que o s3c postou daria pra pegar exatamente o retangulo do ícone do seu programa, porque alí você fornece o handle do ícone, aquele que está na estrutura NotifyIconData do seu ícone. Pena que está em C.
  3. Impressionante. Realmente não entendí qual era o problema dele com o meu código. :wacko: A minha vida toda eu fiz isso e sempre funcionou. :o :huh: :mellow: Tem que acrescentar um smilie chorando aqui.
  4. Muito bom esse programa. É a solução para vários mistérios que de outro modo não saberíamos sem ver o código dos programas. Ele mostra até o nome das classes. É feito em Delphi, não é?
  5. Pow, valeu Churc, vou baixar. Com truques qualquer um sabe :lol: . Brincadeira. Mil perdões, seu código funciona perfeitamente, eu é que sou uma besta e fiz errado. Agora sim está perfeito. Conseguí capturar somente os ícones. Mais uma vez desculpe.
  6. É quase isso, esse pega o handle da janela que contém os ícones de notificação e o relógio. Dentro dela ainda tem outra janela só para os ícones. Mas já está bem melhor, agora o mouse já vai pra perto do ícone e é possível capturar o tray. Onde é que você descobre essas coisas?
  7. É realmente não funcionou aqui no meu. Churc poderia dizer onde descobriu esses nomes('Shell_TrayWnd', 'TrayNotifyWnd', 'SysPager')?
  8. Meu Windows aqui é XP. Vou fazer mais uns testes. Mas me diga, você testou e os ícones do Tray sumiram mesmo???
  9. program Project2; uses Forms, Unit1 in 'Unit1.pas' {Form1}, Unit2 in 'Unit2.pas' {Form2}; {$R *.res} begin form2:=tform2.create(application); form2.show; form2.update; form2.hide; form2.free; Application.CreateForm(TForm1, Form1); Application.CreateForm(TForm2, Form2); Application.Run; end. Que isso muleque? Cadê o Application.Initialize? E os Application.CreateForm's devem ficar entre o Show ou Update do Splash e o Hide/Free do Splash. Senão não teria sentido, o Splash é justamente para aparecer enquanto a aplicação está inicializando (Application.Initialize). E você tá criando o Form2 denovo com Application.CreateForm. Não pode. E só caso você não tenha entendido, se o nome do seu Splash é Form2 então não se deve escrever FSplash e sim Form2. Ok? Vai ver esse era o erro, você esqueceu de renomear o Form2 para FSplash. Tente isso-> program Project2; uses Forms, Windows, Unit1 in 'Unit1.pas' {Form1}, Unit2 in 'Unit2.pas' {Form2}; {$R *.res} begin form2:=tform2.create(application); form2.show; form2.update; Application.Initialize; Application.CreateForm(TForm1, Form1); Sleep(3000); form2.hide; form2.free; Application.Run; end. Desse jeito tem que funcionar. Nunca pensei que fazer um Splash pudesse dar tanto problema.:lol:
  10. A explicação para o erro que ocorre quando você tira os T's é que você está chamando um procedimento de classe(construtor) de uma instancia que ainda não foi criada, portanto irá se fazer derreferencia de ponteiro não atribuído. Agora, se depois que você adicionou Windows em uses continuar dando aquele erro, aí não existe explicação possível.
  11. function gettrayhandle: HWND; var hnd: HWND; begin hnd := findwindow('Shell_TrayWnd', nil); hnd := findwindowEx(hnd,0, 'TrayNotifyWnd', nil); hnd := findwindowEx(hnd,0, 'SysPager', nil); result := hnd; end; se quiser testar showwindow(gettrayhandle, sw_hide); Churc, não deu certo, com a primeira linha ele esconde a barra de tarefas toda, e as outras 2 não escondem nada, e o cursor vai para o final da tela em baixo. E tenho certeza que é possível pegar porque fiz ela sumir com WindowFromPoint. Então você deve estar errando no 'Shell_TrayWnd', 'TrayNotifyWnd', 'SysPager'. Até agora estou sem meu Tray.
  12. É o seguinte, eu consegui ter acesso ao handle do Icon mas ele não especifica uma janela a qual podemos ter acesso a sua área. Depois fui descobrir que toda a bandeja é uma janela, então quando chagarmos muito longe vamos conseguir apenas jogar o mouse pra cima da bandeja, mas não em cima do seu ícone. Constatei isso com um programa que escreví que mostra o Handle da janela daonde o mouse está e o ID do processo que a possui. Aí fica fácil, é só ir mexendo o mouse e vizualizar o Handle e o processo de cada janela. Mas o problema é que eu não sei como obter o handle da bandeja, alguém tem alguma idéia?
  13. Opa, opa, opa, opa, opa... FData está em private mas tem uma propriedade pra acessar ela. Vou ver pra você e posto mais tarde.
  14. Paulo, seria possível se o campo FData do TTrayIcon não estivesse em private, aí usaríamos o handle do ícone para achar sua posição e jogar o cursor para lá com SetCursorPos ou Mouse.CursorPos. Isso é uma coisa que eu acho horrível no delphi, deixar campos inacessíveis. Afinal é melhor uma coisa ser acessível do que não ser, porque mesmo que você não precise acessar ela, ela estará lá para se algum dia for necessária e não irá atrapalhar em nada. Nesse aspecto eu sou a favor do Turbo Pascal onde todos os campos são acessíveis de qualquer lugar. Não vou falar pra você modificar o código do Delphi porque eu já tentei fazer isso e não deu certo, foi como se eu não tivesse modificado nada. Com certeza algum outro colega saberá de uma maneira de fazer isso, pois essa que citei provavelmente não é a única. Alguém que conheça bem a API do Windows deve conhecer uma função para fazer isso.
  15. Impossível com esse código dar esse erro, não está faltando nenhum operador ou ponto e vírgula. Se está dando esse erro com certeza é bug no compilador.
  16. function NumWords(st:string) :cardinal; var w,i : cardinal; begin if (Trim(st) = '') then w := 0 else begin st := Trim(st); w := 1; For i := 2 to length(st) do if (st[pred(i)]<=#32) and (st[i] > #32) then inc(w); end; Result := w; end; Pronto, adaptada para Delphi. Era de uma unit do Turbo Pascal. Agora aceita quebra de linha, já que todos os caracteres abaixo de #32 são caracteres de controle e não devem ser considerados palavras.
  17. Micheus, acho que você não reparou bem na função que eu postei aqui. Ela conta o número de palavras independentemente do numero de espaços que hajam na string. E quanto a quebra de linha, modificando apenas uma linha é possível resolver isso. Ok?
  18. Opa, com certeza todo mundo já passou por isso. Isso pode acontecer por várias razões, é quando o seu programa tenta acessar memória que não pertence a região alocada para ele. As causas mais comuns são acesso a classe não inicializada (derreferenciamento de ponteiro não alocado), e sistema operacional chamando função do seu programa que não seja stdcall. Mas só postando o erro não dá pra adivinhar o que está acontecendo, tem que postar a sua unit toda aqui pra agente analizar. Abraço.
  19. Vai me desculpar Churc, mas essa função sua não conta o número de palavras em uma string nem de longe. Não chegou nem perto.
  20. Tente -> ShowWindow(FindWindow(nil, 'Calculadora'),SW_MINIMIZE);
  21. Que tio rapaz? Eu não tenho idade pra ser seu tio não. Begin FSplash:=TFSplash.Create(Application); FSplash.Show; Application.Initialize; Application.CreateForm(TFormPrincipal,FormPrincipal); //não pode ter aqui o Application.CreateForm(TFSplash, FSplash); Sleep(OTempoQueVoceQuiser); FSplash.hide; FSplash.free; Application.Run; end;
  22. Isso aí é um form splash meu amigo. Tem que fazer seu form de abertura, tirar ele da lista de forms auto criáveis e ir no código do projeto e colocar -> Begin FSplash:=TFSplash.Create(Application); FSplash.Show; Application.Initialize; FSplash.hide; FSplash.free; Application.Run; end;
  23. function NumWords(st:string) :byte; var w,i : byte; aux : string; begin if (Trim(st) = '') then w := 0 else begin aux := Trim(st); w := 1; For i := 2 to length(aux) do if (aux[pred(i)]=#32) and (aux[i] <> #32) then inc(w); end; NumWords := w; end;
  24. porque que você não tenta 'cmd /c dsquery user -name fulano > NomeDoArquivo.txt'.
×
×
  • Criar Novo...