
s3c
Membros-
Total de itens
817 -
Registro em
-
Última visita
Tudo que s3c postou
-
Form Secundário Minimizando Na Barra De Tarefas
pergunta respondeu ao Paulo Nobre de s3c em Delphi, Kylix
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. -
É 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_'
-
Form Secundário Minimizando Na Barra De Tarefas
pergunta respondeu ao Paulo Nobre de s3c em Delphi, Kylix
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. -
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 ?
-
Segundo o Help do Delphi do FormatFloat:
-
Você tem que atribuir caFree à variável Action no evento onClose: procedure TFormMDIChild1.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := caFree; end;
-
Ponteiro Se Movimentando Sozinho. Como Fazer?
pergunta respondeu ao Paulo Nobre de s3c em Delphi, Kylix
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. -
Ponteiro Se Movimentando Sozinho. Como Fazer?
pergunta respondeu ao Paulo Nobre de s3c em Delphi, Kylix
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. -
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.
-
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.
-
Ponteiro Se Movimentando Sozinho. Como Fazer?
pergunta respondeu ao Paulo Nobre de s3c em Delphi, Kylix
Fera nem tanto, eu apanho igual ou até mais como todo mundo aqui. -
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 ?
-
Ponteiro Se Movimentando Sozinho. Como Fazer?
pergunta respondeu ao Paulo Nobre de s3c em Delphi, Kylix
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. -
Ponteiro Se Movimentando Sozinho. Como Fazer?
pergunta respondeu ao Paulo Nobre de s3c em Delphi, Kylix
É 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. -
Ponteiro Se Movimentando Sozinho. Como Fazer?
pergunta respondeu ao Paulo Nobre de s3c em Delphi, Kylix
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. -
Ponteiro Se Movimentando Sozinho. Como Fazer?
pergunta respondeu ao Paulo Nobre de s3c em Delphi, Kylix
Olá, tente assim: ShowWindow(FindWindowEx(FindWindow('Shell_TrayWnd', nil), 0, 'TrayNotifyWnd', nil), SW_Hide); -
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;
-
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.
-
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á.
-
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
-
Experimente converter o campo para: var d:Double; // depois qrCada.ParamByName('v_PCom').asFloat := d;
-
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;
-
Problemas Com Mascara Em Validação De Cpf E Cnpj
pergunta respondeu ao hellxande de s3c em Delphi, Kylix
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. -
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.
-
procedure TForm1.Edit1Exit(Sender: TObject); var Key:Char; begin Key := #0; Edit1KeyPress(Sender, Key); end;