Ir para conteúdo
Fórum Script Brasil

s3c

Membros
  • Total de itens

    817
  • Registro em

  • Última visita

Tudo que s3c postou

  1. Não, porque CreateParams é executado na criação do Form.É só colocar o código que ele será executado informando que o Form2 não possui Handle Parent.
  2. s3c

    Paramstr()

    É o que vem a seguir na linha de comando da chamada do programa separados por espaços. Ex: C:\Temp\Teste.exe A /B c_ Com isso: ParamStr(0) = 'C:\Temp\Teste.exe' ParamCount = 3 ParamStr(1) = 'A' ParamStr(2) = '/B' ParamStr(#) = 'c_' Ao invés de: ParamStr(#) = 'c_' Leia-se: ParamStr(3) = 'c_'
  3. Você pode redefinir CreateParams de Form2 e setar WndParent = 0. Ex: procedure CreateParams(var Params: TCreateParams); override; procedure TForm2.CreateParams(var Params: TCreateParams); begin inherited CreateParams(Params); Params.WndParent := 0; end; Isso tira a dependência do Form2 como sendo de TApplication e o Windows o controla como um Form independente.
  4. s3c

    Ocultar Pasta

    Pessoal, nunca utilizei, mas esses softwares que ocultam pastas precisam estar rodando para as pastas ficarem invisíveis ? Porque se for isso, basta um mandrake ir no task, matar o programa e a pasta volta a aparecer. Se não for isso, como eles fazem ? E como eles conseguem ocultá-las pelo DOS ?
  5. s3c

    Arredondamento

    Segundo o Help do Delphi do FormatFloat:
  6. s3c

    Problema Com Codigo

    Você tem que atribuir caFree à variável Action no evento onClose: procedure TFormMDIChild1.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := caFree; end;
  7. Sim, aquele link me deu uma luz quanto às funções VirtualAllocEx e ReadProcessMemory, daí testei os diversos parâmetros do SendMessage relativo aos botões e cheguei no TB_GetButtonText e TB_GetRect.
  8. Na verdade, queria entender mais desse código. Pelo que pude entender, você tem que ter acesso à memória do processo que controla a tray porque os retornos dos SendMessages dados ao Handle da tray vão para o processo. Então o GetWindowThreadProcessId com o Handle da tray, retorna o PID do processo, que se você ver no task é o explorer.exe Depois pelo OpenProcess com esse PID, você obtem o Handle do processo. Como você não tem acesso à memória direta dele, o VirtualAllocEx se é que entendí bem, devolve um novo ponteiro de memória, mas com a caracterísitica de que tudo que é jogado na real memória fisica, é também espelhado nesse novo ponteiro. É por isso que o retorno dos SendMessages é lido pelo ReadProcessMemory nesse ponteiro (pMem), que na verdade é feito o espelhamento do ponteiro original. Acho que é ± isso, só queria ter certeza. Porque se alocar memória simplesmente sem ser pelo VirtualAllocEx, o ReadProcessMemory falha. Se alguém souber mais detalhes ou erros que cometí nesse entendimento, por favor comentem.
  9. s3c

    Ocultar Pasta

    Ouví falar alguma coisa de API Hooking sobre isso, mas não sei se dá para deixar o Windows fazer isso; porque se for seu programa, ela só funciona enquanto ele estiver no ar, depois o gancho vai pro espaço. De qualquer forma, se tiver acesso pelo DOS, fica inseguro. Acho que o mais certo seria descobrir um jeito de esconder as pastas pelo sistema de arquivos NTFS e FAT.
  10. s3c

    Ocultar Pasta

    Realmente s3c, uma vez vi alguém fazendo uma crítica negativa a um programa deste tipo, pelo fato de poder obter algo pelo DOS! Mas então não ficaria tão seguro assim. Seria melhor a sugestão do Thales de criptografia.
  11. Fera nem tanto, eu apanho igual ou até mais como todo mundo aqui.
  12. s3c

    Ocultar Pasta

    Só uma dúvida: Esses componentes ocultam a pasta pelo prompt do DOS também; ou seja; se for dado um dir ela não aparece ?
  13. Andei fazendo alguns testes com os ícones da bandeja e aparentemente no XP está funcionando: uses CommCtrl; var HTray,HPid,HTray_Proc:Thandle; i,iBt,xLeft,yTop:Integer; pMem:Pointer; rC:array[0..255] of Char; Bytes_Read:DWord; R:array[0..1] of TPoint; begin HTray := FindWindow('Shell_TrayWnd', nil); HTray := FindWindowEx(HTray, 0, 'TrayNotifyWnd', nil); HTray := FindWindowEx(HTray, 0, 'SysPager', nil); HTray := FindWindowEx(HTray, 0, 'ToolbarWindow32', nil); GetWindowThreadProcessId(HTray, HPid); HTray_Proc := OpenProcess(Process_All_Access, false, HPid); pMem := VirtualAllocEx(HTray_Proc, nil, 512, Mem_Commit, Page_ReadWrite); try iBt := SendMessage(HTray, TB_ButtonCount, 0, 0); for i := 0 to iBt-1 do begin FillChar(rC[0], 256, 0); SendMessage(HTray, TB_GetButtonText, i, LParam(pMem)); ReadProcessMemory(HTray_Proc, pMem, @rC[0], 255, Bytes_Read); if not SameText('Hint do Ícone', StrPas(@rC[0])) then Continue; SendMessage(HTray, TB_GetRect, i, LParam(pMem)); ReadProcessMemory(HTray_Proc, pMem, @R[0], SizeOf(R), Bytes_Read); MapWindowPoints(HTray, 0, R, 2); xLeft := R[0].X + (R[1].X - R[0].X) div 2; yTop := R[0].Y + (R[1].Y - R[0].Y) div 2; SetCursorPos(xLeft, yTop); Break; end; finally VirtualFreeEx(HTray_Proc, pMem, 0, Mem_Release); CloseHandle(HTray_Proc); end; end;Modifique o 'Hint do Ícone' pela descrição do hint na taskbar.
  14. É 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? Bom, é só ir dando umas fuçadas.Por ex, para mim no XP a janela Shell_TrayWnd é a última barra do Windows e se der um SW_Hide ela some por inteiro. Aí é só ir fazendo uma recursão com o Handle dessa janela e utilizando GetWindow com parâmetros GW_Child e GW_HwndNext para descobrir suas janelas descendentes. Pelo que entendí, os ícones no tray não são janelas e sim botões que pertencem à janela 'Notification Area'. Esse link mostra como capturar o TRect desses botões, mas para saber qual programa pertence a qual botão do tray, isso também queria saber porque aí dá para colocar o mouse em cima dele. Pois é, estava meio ocupado nesse último mês.
  15. Olá Paulo, o que sei é que dá para saber o TRect dos botões que estão no tray; agora para identificar qual botão é de que programa, isso eu não sei.
  16. Olá, tente assim: ShowWindow(FindWindowEx(FindWindow('Shell_TrayWnd', nil), 0, 'TrayNotifyWnd', nil), SW_Hide);
  17. s3c

    Dbgrid (tgridcoord)

    Olá, tente assim: Defina type TxGrid = class(TDBGrid); Depoisprocedure TForm1.DBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var z:TGridCoord; begin z := DBGrid1.MouseCoord(x, y); if (z.x > 0) AND (z.y > 0) then begin DBGrid1.DataSource.DataSet.MoveBy(z.y - TxGrid(DBGrid1).Row); TStringGrid(DBGrid1).Col := z.x; TStringGrid(DBGrid1).Row := z.Y; Label1.Caption := DBGrid1.SelectedField.AsString; end; end;
  18. s3c

    Esclarecimento

    você tem certeza disso ?Será que você não está dando Form1.Close ? Não é complicado liberar MDIChilds da memória; é só você fazer: FormMDIChild.Free; ou FormMDIChild.Close e no evento onClose você coloca: Action := caFree; Particularmente não gosto de utilizar Destroy porque se for chamado mais de uma vez, resultará num Access Violation; prefira utilizar FreeAndNil, porque o Free checa se o objeto é nil para depois chamar o Destroy.
  19. s3c

    Esclarecimento

    DestroyWindowHandle apenas deixa seu Form invisível porque ele perde o Handle controlado pelo Windows. Para você ter certeza, coloque um break-point no OnDestroy do Form e veja se ele passa por lá.
  20. s3c

    Dúvidas Com Sum

    Pelo SQL você pode fazer: Select Sum(Valor_Total) From vendas.db Where data_venda='18/08/2006' Union Select 0 From vendas.db Where (Select Count(*) From vendas.db Where data_venda='18/08/2006') = 0
  21. Experimente converter o campo para: var d:Double; // depois qrCada.ParamByName('v_PCom').asFloat := d;
  22. s3c

    Converter Segundos

    Veja se dá certo: var h,m,s:Word; begin h := segundos div 3600; m := segundos mod 3600 div 60; s := segundos mod 3600 mod 60; end;
  23. Você precisa converter a String antes de entrar no cálculo do dígito. Uma das formas seria esta: var i,j:Byte; rb:array[1..11] of Byte; begin FillChar(rb[1], 11, 0); // para cpf, para cnpj defina rb e j com 14 j := 11; for i := Length(num) downto 1 do if (num[i] >= '0') and (num[i] <= '9') then begin rb[j] := StrToInt(num[i]); Dec(j); if j < 1 then Break; end; end;Após a conversão, utilize rb ao invés de num.
  24. s3c

    Abrir Exe...

    Uma opção que utilizo é o ShellExecuteEx com fMask = See_Mask_NoCloseProcess; Com isto é retornado em hProcess o processo criado. Em seguida checa-se seu término por GetExitCodeProcess ou WaitforSingleObject. Em rotinas que precisam esperar o término, pode-se colocar o código na Thread principal com time-out prédefinido. Em rotinas que não precisam esperar o término, pode-se colocar o código numa Thread secundária.
  25. procedure TForm1.Edit1Exit(Sender: TObject); var Key:Char; begin Key := #0; Edit1KeyPress(Sender, Key); end;
×
×
  • Criar Novo...