Ir para conteúdo
Fórum Script Brasil

Micheus

Veteranos
  • Total de itens

    3.189
  • Registro em

  • Última visita

Tudo que Micheus postou

  1. Micheus

    Ocultar Pasta

    Se você quiser pagar... RAR Password Cracker A lógica diz que não existe nada que não possa ser desfeito. Assim, para "desfazer", basta fazer na sequência inversa. Na verdade você já tem todo o caminho. ;)
  2. Qual deles? Sim, falo de como o Windows faz, pelo menos no meu XP, que era foco de seu questionamento (Themes). Faça o teste você mesmo.Já nas outras versões do Windos as imagens dos botões realmente não são bitmaps. Sim, mas para não nos alongarmos neste assunto e desviarmos do tópico original, acho que seria mais adequado abrir um novo tópico para discutir este assunto. beleza?! []s
  3. Micheus

    Ocultar Pasta

    Por isso é que pergunto: será que vale a pena reinventar a roda? Até porque ser for pensar em uma solução para os sitemas com FAT, o enfoque provavelmente seria outro. Positivo. Se você descriptografar em um arquivo em disco, por ex., para poder abrir o arquivo ou executá-lo, então sua confiabilidade foi para o espaço.Por isso coloquei o questionamento (Sem estar integrado ao SO, isto seria possível?). Quando se lê aquele artigo da TecNet, dá para ter uma idéia um pouco melhor da complexidade da coisa. E sabemos muito bem, que não existe segurança 100%, o máximo que se consegue é 99,99% e é o mais próximo disto que temos que tentar chegar.
  4. Dá uma olhada neste post Aqui no forum não encontrei (ou eu não soube procurar) este item respondido (há perguntas, mas, sem respostas). Então, dê uma olhada neste demo(Planeta Delphi, tem que se registrar), talvez ajude. []s
  5. Se você der uma olhada no código, verá que ele desenha o "botão" (desenha o bitmap do botão conforme o estado). Do mesmo modo como o windows faz (também utiliza bitmaps para os Themes - link). Mas, fazendo uso da API para Themes (em UxTheme), acredito que seja possível contornar este "problema".Se você observar, ao mexer com o tamanho da barra de títulos (nas configurações de vídeo), dá para perceber que exitem apenas 4 imagens de cada ícone (ajuda, minimizar, maximizar e fechar), cada uma de um tamanho. A menor de todas utilizadas quando a altura da barra é <=20, a próxima quando é >20 e <=26, a seguinte quando é >26 e <=30 e por último, a maior, quando é >30. A partir dai, não há mais alteração - pode colocar a altura da barra em 100 que o X, por ex., ficará pequeno no meio do botão. []s p.s. para quem quizer mexer nos bitmap's dos temas: Alterando a cor do botão Iniciar
  6. Micheus

    Ocultar Pasta

    e tudo isso criptografado, certo?! Thales, acho que, como mensionei no post anterior, em adendum a colocação do s3c, é uma questão de avaliação. Isto porque estamos partindo do princípio que falamos da possibilidade de implementação de uma aplicação para proteção de pastas/arquivos. Ocorre que quando falamos de partições NTSF, implica em estarmos trabalhando com SO Windows com tecnologia NT (NT, 2K e XP) e estes SO's já implementam recurso de segurança. Assim, acho que fica complicado querer reinventar a roda. Além do fato de que seria necessário estar logado com direitos de administração para realizar qualquer procedimento sobre pastas/arquivos que não estão disponíveis para "usuários normais" (a lógica diz isso). Estes sistemas já viabilizam a questão da criptografia (ver artigo Usando o sistema de arquivos com criptografia). Deste modo, acredito que nossa discursão se aplique SO's que utilizem FAT como sistema de arquivos. Nestes, apesar dos riscos, acho que criptografia seria o meio mais seguro de manter os dados protegidos. Mas, vamos esbarrar com um problema. Acho que, por este motivo, é difícil encontrar algum programa que não tenha deficiências (como mensionou o Paulo). A questão é: para manter a confiabilidade, as informações deveriam ser descriptografada na memória. Sem estar integrado ao SO, isto seria possível? São apenas considerações minhas. []s
  7. Leomar, isto posto, parece que você deveria testar todos os combobox entre si, não? você está testando apenas o 1º com os demais. []s
  8. Micheus

    Ocultar Pasta

    É impressão minha ou estamos com dois tópicos abertos discutindo praticamente o mesmo assunto (ou misturando os assuntos). :unsure: Thales, talvez se utilizar um "esquema", do tipo acrescentar ao final do arquivo (após o EOF) um nº, para validação seja possível evitar este "efeito colateral" (não sei se seria 100% confiável). Thales, seria sim. Mas até hoje (já fucei isto há algum tempo atrás), não achei nenhum código que mostrasse como isto poderia ser feito. A questão de citar a monitoração de pastas/arquivos é para o caso de algum tipo de informação ser processada. Por ex., se um nova pasta for adicionada, poderia ser verificada a necessidade criptografá-la ou adicionar à algum catálogo, etc. Então vale saber que ela existe e pode ser útil em uma implementação. Paulo, provavelmente porque para o caso dos Win31/95/98/Me seria necessário escrever um processador comandos para substituir o original (command.com - DOS), implementando as funcionalidades utilizadas sobre o windows. s3c, esta é justamente uma questão a avaliar. O sistema FAT(16 ou 32) não oferecem recurso para restringir acesso à arquivos/pastas. E para este caso, acredito que não tenha jeito de fazer algo seguro (exceto a criptografica, como citou o Thales - porém com riscos). Já com o sistema NTSF, que oferece recursos para segurança, as coisas ficariam mais fácil. Através do uso de funções como GrantAccessByName e DenyAccessByName (estes são métodos de uma classe disponível no SourceForge - link - MS Windows ACL-Library for Delphi) ficaria fácil implementar através de Shell um recurso para via pop-up o usuário acessar/bloquear a pasta/arquivo específico. (Sobre o link acima, o programa exemplo é simples e do tipo console. Terá que ser alterado para funcionar, já que está configurado com o diretório de teste do autor) Talvez seja o caso de definir um perfil, para então tentar traçar um plano, já que provavelmente necessitarão de soluções distintas.
  9. Micheus

    Ocultar Pasta

    Paulo Nobre, eu sei que há uma função da API que permite monitorar algumas ações sobre arquivos, diretórios - notificadores (FindFirstChangeNotification - msdn). Havia baixado uns componentes há alguns anos. Dando uma pesquisada com o que me lembrava, achei uns componentes já prontos para isso: Torry's (link), Angus Johnson (link). Vai que server de partida?!. []s
  10. Pessoal, dando um pitaco por aqui... Uma outra opção, que depende de estar instalado no mínimo o IE 5 (bastante comum ser posterior), seria mostrar a informação num balãozinho (como aquele que aparece quando você pluga algo na USB). Para tal, faz-se uso da função API Shell_NotifyIcon (ref. msdn). Exemplo 1 (AJPD Software - Espanhol) -> link Exemplo 2 (Torry's Delphi Pages - Inglês) -> link Se a idéia for válida, acho que pouparia alguma dor de cabeça. Churc, esse WinDowse faz mais ou menos o que fazia o WinSight que vinha com o Delphi3? []s
  11. Micheus

    Stringgrid

    Se você grava a informação sobre todas as colunas, então não necessita saber - basta gravar as informações de todas as colunas. Mas se você grava apenas as que sofrem alteração, em relação a largura definida em design-time, então terá que pensar em uma solução. []s
  12. depois que o colega MACABUS chamou a atenção para o LIKE, dando uma olhada melhor, parece que você está utilizando o like com campo data quando coloca "...where aniver LIKE:aniv..." O like só se aplica a textos(strings), então se quizer fazer uso com um campo data, provavelmente você terá que converter seu campo data para texto. Se for o caso, dê uma olhada em CAST (no Firebird). Seria algo mais ou menos assim: "...where CAST(aniver as varchar(10)) like :aniv...". não tenho como conferir agora. []s
  13. Thales reparei sim! E é um bom algorítimo. Foi o que eu "disse": (#13 e/ou #10, não previstos nos algorímos propostos, mas que podem serem incluídos) Foi apenas para apresentar mais uma utilidade do TStringList, útil para muito mais que uma lista de strings. []s
  14. Pessoal, sou "obrigado" a postar esta opção. Adoro as possibilidades do TStringList, e esta é mais uma delas. function ContaPalavras(Texto :String) :Integer; var Lista :TStringList; begin with TStringList.Create do begin Delimiter := ' '; DelimitedText := Texto; Result := Count; Free; end; end; Podem perguntar: por que utilizar uma classe (robusta se comparado com um simples algorítimo) para contar palavras? A resposta é que com ela, no caso de realmente ser passado um texto onde aparecem o avanço de linha (#13 e/ou #10, não previstos nos algorímos propostos, mas que podem serem incluídos) ou sequência de espaços concatenados, o resultado estará sempre correto e sem muito esforço. ;) []s
  15. Apenas complementando... O código que o Thales e que você também deve ter implementado fica no corpo do Projeto (menu Project->View Source) e, neste caso, a resposta está na linha comentada pelo Thales: //não pode ter aqui o Application.CreateForm(TFSplash, FSplash);Certo Thales? Uma maneira é (no Delphi 7) acessando o menu principal, opção Project->Options, na guia Forms, listbox Auto-create forms; selecione o form que não deve ser criado automaticamente e clique no botão > (ao centro). Depois é só clicar em OK. Esta opção resultará na mesma coisa, apenas que você não edita manualmente o fonte do projeto - útil em outras aplicações. []s
  16. rjcerri, acredito que seja porque não esteja definido o tipo de parâmetro a ser passado e deste modo a consulta pode não estar sendo enviada corretamente para o banco. Como você está fazendo esta consulta dinamicamente, faça um teste: defina então o tipo do parâmetro (DataType) de acordo com o tipo do respectivo campo na tabela (ftString) Zquery1.SQL.Clear; Zquery1.SQL.Add('Select * from clientes where aniver LIKE:aniv and estado LIKE:Mest and tipocli LIKE:Mtipo and descricao LIKE:Mdesc'); // *** não sei se funciona em run-time, então se houver erro, acho que vai ter que tentar // *** adicionando em design-time Zquery1.ParamByName('aniv').DataType := ftString; Zquery1.ParamByName('mest').DataType := ftString; Zquery1.ParamByName('mtipo').DataType := ftString; Zquery1.ParamByName('mdesc').DataType := ftString; // **** Zquery1.ParamByName('aniv').AsString:='%'+edit1.text+'%'; Zquery1.ParamByName('mest').AsString:='%'+edit3.text+'%'; Zquery1.ParamByName('mtipo').AsString:='%'+edit2.text+'%'; Zquery1.ParamByName('mtipo').AsString:='%'+edit2.text+'%'; Zquery1.ParamByName('mdesc').AsString:='%'+DBlookupComboBox2.text+'%'; Zquery1.open; []s
  17. thiagodede, esta dica do s3c pode lhe ser útil - Link
  18. A melhor opção é dividir o texto a ser impresso obdecendo a quantidade máxima de caracteres que cabem na linha (observar valor de CPP - caracter por polegadas, normalmente 10cpp ou cpi). Deste modo, você manda as linhas utilizando apenas o Writeln. Como você está imprimindo diratamente para a impressora, acredito que a formatação que você cria no Windows não se aplica (faz tempo que não utilizo este recurso, posso estar enganado). Neste caso, você terá que controlar a impressão na mão. Uma opção, como sugeriu o colega kmkg, seria enviar a configuração do tamanho de página, para a impressora, utilizando os respectivos comandos ESCAPE (ver manual da impressora); Nesta modalidade, após configurado o tamanho da página, basta enviar um caractere FF (Form Feed - avanço de página = #12). Outra opção, talvez mais simples, pode ser simplesmente controlar o avanço de linha de modo que você manda os caracteres CR+LF (Carrier Return + Line Feed = #13#10) fazendo com que o carro da impressora avance até a próxima folha de cheque - utilizando Writeln resolve isto. Deverá, nesta situação, ser observada quantas linhas (respeitando a configuração de LPP - linhas por polegadas, normalmente 6lpp) que podem ser impressas numa folha de cheque.Ex. Uma folha de cheque tem aproximadamente 3" (polegadas). Com a configuração de LPP igual a 5 linhas, uma folha de cheque teria um total de 15 linhas (altura da sua folha em linhas). Daí para imprimir o texto e avançar para a próxima folha, seria feito algo mais ou menos assim: writeln(ftOutFile, ''); // avança para a 2ª linha writeln(ftOutFile, ''); // avança para a 3ª linha writeln(ftOutFile, 'primeira linha do valor por extenso'); // imprime e avança para a 4ª linha writeln(ftOutFile, 'segunda linha do valor por extenso'); // imprime e avança para a 5ª linha .. writeln(ftOutFile, ''); // avança para a 14ª linha writeln(ftOutFile, ''); // avança para a 15ª linha writeln(ftOutFile, ''); // avança para a 1ª linha da PRÓXIMA folha Acho que seria mais ou menos isto. []s
  19. Micheus

    Stringgrid

    Carla, você precisará gravar a largura das colunas ao sair (p.e. OnClose) da tela que contém o grid alterado e restaurar esta informação ao mostrar (p.e. OnShow) a janela novamente.Terá que "varrer" todas as colunas do StringGrid: // para gravar, o loop deverá ser mais ou menos assim var Idx, LarguraColuna :Integer; begin for Idx := 0 to StringGrid1.ColCount -1 do begin LarguraColuna := StringGrid1.ColWidths[Idx]; // // aqui deverá implementar o mecanismo que gravará a informação desejada // varia conforme a opção: gravar em arquivo ini (local) ou no banco ... end; end; // para recuperar, o loop deverá ser mais ou menos assim var Idx, LarguraColuna :Integer; begin for Idx := 0 to StringGrid1.ColCount -1 do begin // aqui deverá implementar o mecanismo que lerá a informação desejada em LarguraColuna // varia conforme a opção: ler de arquivo ini (local) ou do banco StringGrid1.ColWidths[Idx] := LarguraColuna; // atribui o valor lido (recuperado) ... end; end; []s
  20. Micheus

    Stringgrid

    verifique a propriedade Options, deve estar habilitada goColSizing (true) Utilize a propriedade Cells Veja estes post's: Dimensionar Largura das Coluna Usando propriedade Cells
  21. Micheus

    Ambiente Dos

    procedure TForm1.Button1Click(Sender: TObject); var buffer :array[0..255] of char; begin if GetEnvironmentVariable('TEMP', buffer, SizeOf(buffer)) > 0 then Label1.Caption := StrPas(buffer); end; []s
  22. Ocorre que utilizando ShowModal, a execução das instruções após sua chamada ficam "suspensas" até que o form seja fechado. Assim, chame o Hide antes do ShowModal. A sequência funcionaria apenas se fosse utilizado o método Show, mas talvez esta opção não lhe enteresse. []s
  23. Cleverson, é a propriedade Text. você pode utilizar o evento OnChange para fazer isto. nem é preciso fazer teste IF pois quando você testar a propriedade (Text = texto_a_testar) o resultado será justamente verdadeiro ou falso. Então basta atribuir o teste para a propriedade Visible ou Enabled do Label ou qualquer outro componente:Label1.Enabled := AnsiUpperCase(DBComboBox1.Text) = 'BATATA'; quando há mais componentes que utilizam o mesmo teste, basta atribuir a propriedade do primeiro a este último: Label1.Enabled := AnsiUpperCase(DBComboBox1.Text) = 'BATATA'; Label2.Enabled := Label1.Enabled; // habilitará se text = de BATATA Label3.Enabled := not Label1.Enabled; // habilitará se text <> de BATATA []s
  24. Cleverson, agora pintou uma dúvida. você está utilizando DBEdit's ou Edit's? Se você utiliza DBEdit's, o método é o apontado pelos colegas Progr'amador e Antonio:- Selecione seu componente TTable; - Dê um duplo click nele; - Na pequena janela que aparece, localize o campo (Field) que deseja formatar. Se não houverem field's adicionados, clique com o botão direito sobre esta janelinha e selecione Add all fields; - Selecione o campo desejado. Na janela Object Inspector, localize a propriedade EditMask e formate-a utilizando os mesmo critérios empregados no componente TEditMask. Acho que daria para dizer que esta é a forma inteligente de fazer, já que esta formatação será utilizada tanto para o caso de o campo estar associado a um TDBEdit quanto a um TDBGrid que lhe permita edição. Já se for Edit's, então você deve mesmo é utilizar um TEditMask para fazer isto. Não é isto que foi proposto. O gerenciador do banco, fica aparte do Delphi. []s
  25. O que ocorre é que você terá que cadastrar em Trabalho (antes) o item que você pretende incluir em Paciente. A integridade referencial exige justamente isto. Sugiro que você crie um form de cadastro para Trabalho (é apenas uma das opções possíveis), parece-me que seria mais simples. De preferência, coloque os componentes de acesso ao banco num DataModule para que possa utilizar a mesma conexão e transação para os dois cadastastros. No form de cadastro do paciente, se você estiver utilizando um DBLookupComboBox para selecionar o trabalho, você poderia colocar um pequeno botão ao lado para o caso de o item não existir na lista e o usuário poder cadastrá-lo. Daí, após incluído o item (fechada a tela do cadastro do trabalho), bastaria atualizar a query que você utiliza no DBLookupComboBox (propriedade ListSource) para que o item apareça nesta lista. []s obs: 'Soletre, pontue e use maiúsculas e minúsculas corretamente. Não DIGITE TUDO EM MAIÚSCULAS, isto é lido como grito e é considerado grosseria. (Tudo em minúsculas é só um pouco menos chato, pois é difícil de ler)' retirado do guia
×
×
  • Criar Novo...