Ir para conteúdo
Fórum Script Brasil

Paulo Nobre

Membros
  • Total de itens

    717
  • Registro em

  • Última visita

Tudo que Paulo Nobre postou

  1. Olá, s3c Muito obrigado pela dica, funcionou, apenas com um detalhe, que não sei explicar: Usando Directory := Reg.ReadString('Shell Folders', 'AppData', '')+'\Microsoft\Internet Explorer\Quick Não funcionou, aí troquei Reg.ReadString('Shell Folders', 'AppData', '') pela string caminho, onde caminho:= reg.ReadString(AppData) e funcionou.(claro que abrindo a chave etc, etc..) Estranho, pois na realidade a idéia é a mesma; pegar o caminho da pasta. Aproveitando o espaço, você poderia dizer porque tanto faz usar: ExtractFilePath(Application.exename) + ExtractFileName(Application.exename) ou ExtractFilePath(Application.exename) + '\' +ExtractFileName(Application.exename) ?
  2. Olá, Graymalkin Costumo, em alguns programas, colocar isto(junto com outras possibilidades;atalho no desktop , no menu programas etc...) como opção para o usuário. Gosto de fazer assim, pois embora alguns programas forneçam estas opções, se o usuário deletar os atalhos e depois resolver colocá-los teriam a opção. Eu uso o installshield profissional, não conheço(de usar) o InnoSetup. Alguém disse, num outro forum, que a solução que os outros estão usando é mais ou menos a que estou usando acima. Não acredito muito nisso, mas fazer o que né!! Abraços Paulo Nobre
  3. Como não onsigo de jeito nenhum... Tentei olhar a chave de registro onde tem 'MapGroups', 'QuickLaunch', mas não cheguei a nenhuma conclusão. Infelizmente continuo a ficar sem saber como colocar um atalho lá satisfatoriamente. Digo satisfatoriamente pois uma maneira não boa (quebra galho) é colocando uma cópia do executavel em: C:\Documents and Settings\Proprietário\Dados de aplicativos\Microsoft\Internet Explorer\Quick Launch. É lá que ficam os atalhos que aparecem na tal barra. A parte C:\Documents and Settings\Proprietário que pode variar de computador para computador pegamos via registro na string appDado do shellfolder. Depois uso a função copyfile. Porém, o que vai é uma cópia do executável e não sei colocar um atalho lá. Alguém saberia dizer como copiar uma atalho(que funcione), digo isto pois não adinta só colocar a extensão lnk. Creio que a função que coloquei acima faça isto mais não entendi a fundo como ela funciona.
  4. Prezados colegas, num outro forum, um colega deu como dica, para colocar um atalho do programa na barra de inicialização rápida o uso do código abaixo: unit UQLaunch; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Registry, ActiveX, ComObj, ShlObj, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; type ShortcutType=(_DESKTOP, _QUICKLAUNCH, _SENDTO, _STARTMENU, _OTHERFOLDER); var Form1: TForm1; implementation function CreateShortcut(SourceFileName: string; // the file the shortcut points to Location: ShortcutType; // shortcut location SubFolder, // subfolder of location WorkingDir, // working directory property of the shortcut Parameters, Description: string): // description property of the shortcut string; const SHELL_FOLDERS_ROOT = 'Software\MicroSoft\Windows\CurrentVersion\Explorer'; QUICK_LAUNCH_ROOT = 'Software\MicroSoft\Windows\CurrentVersion\GrpConv'; var MyObject: IUnknown; MySLink: IShellLink; MyPFile: IPersistFile; Directory, LinkName: string; WFileName: WideString; Reg: TRegIniFile; begin MyObject := CreateComObject(CLSID_ShellLink); MySLink := MyObject as IShellLink; MyPFile := MyObject as IPersistFile; MySLink.SetPath(PChar(SourceFileName)); MySLink.SetArguments(PChar(Parameters)); MySLink.SetDescription(PChar(Description)); LinkName := ChangeFileExt(SourceFileName, '.lnk'); LinkName := ExtractFileName(LinkName); // Quicklauch if Location = _QUICKLAUNCH then begin Reg := TRegIniFile.Create(QUICK_LAUNCH_ROOT); try Directory := Reg.ReadString('MapGroups', 'Quick Launch', ''); finally Reg.Free; end; end else // Other locations begin Reg := TRegIniFile.Create(SHELL_FOLDERS_ROOT); try case Location of _OTHERFOLDER : Directory := SubFolder; _DESKTOP : Directory := Reg.ReadString('Shell Folders', 'Desktop', ''); _STARTMENU : Directory := Reg.ReadString('Shell Folders', 'Start Menu', ''); _SENDTO : Directory := Reg.ReadString('Shell Folders', 'SendTo', ''); end; finally Reg.Free; end; end; if Directory <> '' then begin if (SubFolder <> '') and (Location <> _OTHERFOLDER) then WFileName := Directory + '\' + SubFolder + '\' + LinkName else WFileName := Directory + '\' + LinkName; if WorkingDir = '' then MySLink.SetWorkingDirectory(PChar(ExtractFilePath(SourceFileName))) else MySLink.SetWorkingDirectory(PChar(WorkingDir)); MyPFile.Save(PWChar(WFileName), False); Result := WFileName; end; end; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var PROGRAMA:String; begin PROGRAMA := ExtractFileDir(Application.ExeName)+ExtractFileName(Application.exename); //Create a Shortcut in the Quckick launch toolbar CreateShortcut(PROGRAMA, _QUICKLAUNCH, '','','','Teste de uso da QuickLaunch'); Showmessage('teste'); end; end. A função aparece bem grande pois tem a opção de se colocar atalho no desktop, menu iniciar e outros. Para mim só interessou colocar atalho na quick launch. Porém, nada acontece. Alguém poderia analisar este código e consertá-lo. Pro meu nível de conhecimento ele está um pouco avançado.
  5. Desculpe s3c, Funcionou comigo também, acontece que eu tinha, quando mandei a mensagem para você, digitado errado, sem tirar o "&", do nome do bd, aí continuou dando errado. Logo em seguida tentei mandar uma mensagem, mas como minha conexão é discada não consegui acessar. Só agora consegui. Valeu pela ajuda.
  6. s3c Já havia tentado sua sugestão e nada acontece. Como sugeriu, imagino então que não haja nenhum problema em usar RCData para estes tipos de arquivos não é? Só que não acontece nada, já tentei usar o nome fantasia de tudo que é jeito, mas não adianta. Mais um desses mistérios que só acontecem comigo. Fazer o que né? Micheus Obrigado pelas explicações do significado das extensões. Vou dar uma olhada nos links, mas estou achando tudo muito estranho, afinal o RCData trabalha com qualquer tipo de arquivo até onde eu sabia. Obrigado.
  7. Tenho usado o arquivo de recursos em muitas situações. Para armazenar executáveis utilizo o armazenamento geral com auxílio de RCData. Por exemplo: Datas RCdata Datas.exe. O brcc32.exe gera normalmente o arquivo.res. Como achei que qualquer arquivo poderia ser armazenado dentro do res, tentei fazer o mesmo com arquivos de banco de dados. Ao tentar fazer Dicas&Delphi.Mb RCData Dicas&Delphi.Mb Dias&Delphi.db RCData Dicas&Delphi.db Nada acontece, ou seja, não é gerado o res. Alguém sabe por que isto acontece? Arquivos de dados não podem ser incluidos no res, ou tenho que usar algo diferente de RCData? Achei que o problema poderia ser com o "&" ou com "."antesdas extensões, mas ao tentar mudar o nome o problema continua. Estou querendo colocar no res apenas para baixá-los na primeira vez que o programa for aberto. Daí em diante eles estarão no mesmo diretório do executável e o álias estará apontando para lá. Outra dúvida são oos outros 3 arquivos que são gerados, com extensões.px,.xgo.ygo... Precisam ser distribuidos também? Alguém sabe para que servem? O banco de dados é paradox. Obrigado.
  8. Descobri que no menu janela tem a opção de congelar painéis. obrigado
  9. Como eu poderia fazer para fixar, por exemplo, as 5 primeiras linhas de um aplanilha de tal maneira que quando rolasse com scroll(verticalmente) elas ficassem fixas eas de baixo se movimentassem?
  10. Denis e Micheus, Obrigado pelas informações.
  11. Ontem numa página li o que ( www.linhadecodigo.com.br) um colunista havia deixado registrado como gravar dados em um arquivo XML e CDS(ou CSD, não me lembro, sei que é binário). Muito interessante: 4 dbedits um datasource e um cliendataset. Tudo feito da maneira tradicional. Só que no final os dados eram gravados em XML ou CDS. Usava-se os metodos savetofile e loadfromfile do clientdataset. Legal, lembrou as gravações feitas em arquivos Dat. A pergunta: Qual a segurança(não de sigilo) para estes dados em relação a quantidade de dados a serem salvos em XML ou binário? Os arquivos se corrompem com facilidade? Alguém já trabalhou com estes arquivos desta forma? Até onde se pode ir com este tipo de gravação e recuperação nesses tipos de arquivos?
  12. Obrigado s3c e Vivendo&Aprendendo pelas dicas. Realmente s3c, a sua idéia e muito mais simples e fácil de entender.
  13. Tem razão Micheus, peço desculpas pelo engano. É que o quote estava tão grande e havia feito CTRL+C para estudar depois, que nem reparei, que embora o tópico havia sido seu, era apenas para fazer um comentário com um link.
  14. O micheus colocou uma dica de login com o seguinte código: Crie uma tabela no seu banco de dados com apenas 3 campos: Login, Senha e Cargo (todos os três alfanuméricos, podendo qualquer um ser chave primária). No DataModule ou no próprio formulário de senha coloque um TTable, um TDataSource e um TQuery. No formulário de senha ponha 2 TEdits e um TButtom (BtnOK) O código está listado abaixo. CODE procedure TFrmAcesso.BtnOKClick(Sender: TObject); Var Login, Senha, Tipo : String; begin DM.QrAcesso.Close; DM.QrAcesso.SQL.Text := 'Select * from Acesso '+ 'Where Login =:LoginBusca and Senha =:SenhaBusca'; DM.QrAcesso.Params[0].AsString := (Edit1.Text); DM.QrAcesso.Params[1].AsString := (Edit2.Text); DM.QrAcesso.Open; Login := DM.QrAcessoLogin.Value; Senha := DM.QrAcessoSenha.Value; Tipo := DM.QrAcessoTipo_Usuario.Value; if (Login = Edit1.Text) and (Senha = Edit2.Text) and (Tipo = 'Administrador')then begin {Nesse caso é um Administrador que está utilizando o sistema, então habilite todas as funções do sistema} FrmPrincipal.ShowModal; end; if ( Login = Edit1.Text) and (Senha = Edit2.Text) and (Tipo = 'Usuário')then begin {Nesse caso é um Usuário que está acessando o sistema, então desabilite tudo que você não quer que ele tenha acesso, como determinados formulários, botões, consultas, entre outros} FrmPrincipal.ShowModal; end; if (Login <> Edit1.Text) or (Senha <> Edit2.Text) then begin ShowMessage('Login ou Senha inválidos.'); Edit1.Clear; Edit2.Clear; Edit1.SetFocus; end; end; Uma coisa legal dessa rotina é que permite que o programador possa implementar no código o que é permitido fazer por um Usuário do sistema e o Administrador do mesmo. Como realmente achei a idéia super interessante fui tentar estudá-la. Não tenho muita experiência com banco de dados muito menos com componente TQuery. Fiz toda a parte fácil e na hora de compilar apareceram as dúvidas; 1) Na montagem da tabela(fiz em paradox), já tenho que digitar os valores para login, senha e cargo. Tipo: paulo para login, 3456 para senha e administrador para Cargo? 2)Esta me faltando o básico mesmo. Com vinculo o TQuery? É com o mesmo e único DataSource? 3)Está aparecendo erro de compilação em: [Error] USenhaLogin.pas(39): Undeclared identifier: 'QrAcessoLogin' [Error] USenhaLogin.pas(40): Undeclared identifier: 'QrAcessoSenha' [Error] USenhaLogin.pas(41): Undeclared identifier: 'QrAcessoTipo_Usuario' Não estou sabendo fazer aparecer QrAcessoLogin, QrAcessoSenha etc.. O nome que dei ao TQuery foi QrAcesso. Será que alguém que testou a dica ou tenha experiência poderia, quando tiver tempo dar uma detalhada para este ignorante aqui?
  15. Perfeitamente Micheus e muito obrigado. A resposta estava exatamente numa mensagem enorme que estava na minha cara. Troquei String por SHORTSTRING e tudo se resolveu. []s
  16. Estava testando uma dica de uso de dll e deu tudo certo. Na dica os parâmetros eram todos inteiros e tratavam de uma chamada a uma função para verificar uma senha. Resolvi modificar a função da dll para que a senha fosse alfanumérica. Foi aí que a mensagem de erro apareceu. Vejam se vocês podem me ajudar. Na dll tenho o seguinte library SENHA; uses SysUtils, Classes; function Chave(Pkey : String): String; export; // Criando a função begin PKey := 'pn012345'; //Nossa senha de exemplo Chave := Pkey; end; exports Chave; {$R *.res} begin end. No form que fará a chamada a dll(Senha.dll, que se encontra no local certo, ou seja, no mesmo diretório do programa), tenho um Edit e button. O usuário digita a senha(alfanumérica) e clica no button. Vejam o código completo da unit do form... unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class(TForm) Edit1: TEdit; Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation Function Chave(Pkey : String):String; external 'SENHA.dll'; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var N, C : String; begin N := Edit1.Text; C := Chave(Edit1.Text); if N = C then ShowMessage('Senha válida!') else ShowMessage('Senha inválida!'); end; end. O que está acontecendo... digito a senha correta pn012345, clico no button a mensagem aparece, ou seja, 'Senha válida! e depois que clico no ok do showmwssage aparece a mensagem de erro INVALID POINT OPERATION Como havia mencionado caso faça a adaptação para que a senha seja do tipo integer aí não aparece a mensagem de erro. Alguém pode ajudar?
  17. Show de bola CorN, que beleza de código. Agora está funcionando bem. Micheus beleza a sua observação: na realidade realmante vou ter que adaptar como você sugeriu para jpeg. Por enquanto o programa é apenas para visualizar imagens a partir de um banco de dados. Um álbum de imagens simples. Obrigado a vocês, aprendi muito. []s Paulo Nobre
  18. Micheus, realmente o inconveniente são as barras de rolagem. Mas, funcionou de maneira correta. O único porém é que a figura não desliza suavemente ao clicar nela e mover. No código do CorN, a figura desliza suavemente exatamente como nos programas de figuras, cheguei a achar que tinha encontrado o código que queria(perfeito), mas ao baixar uma figura menor do que o tamanho do image se você clicar dentro do image o programa duplica a imagem. Não sei se alguém testou.
  19. Obrigado Micheus, vou estudar o código com calma.
  20. Esta foi grande, em Micheus. Acredito que muita gente vai aproveitar. Valeu []s
  21. Fiz a pergunta pela primeira vez em março de 2004, quando começava no delphi. Pergunto hoje de novo: existe como colococar cor no botão comum do delphi? Existe algum componente de terceiros? É muito chato ter que usar sempre panel ou ou speed button.
  22. Alguém saberia dizer como se faz para deslocar uma figura dentro de um componente imagem. Explico melhor. Em programas de imagens sofisticados(?), quando uma imagem(uma foto por exemplo) é maior na realidade do que um tamanho na tela(um componente imagem) o ponteiro assume a forma de uma mão e você pode deslocar a imagem dentro do componente de tal maneira que você possa vê-la totalmente. Não tenho a menor idéia de como se faria isto até porque não tenho experiência quase nenhuma da parte gráfica do DELPHI. Alguém já fez isso?
  23. Prezado Micheus, Muito obrigado pela sua excelente explicação. []s
  24. Existem programas que fazem com que uma pasta fique inacessível. Fiquei tentando imaginar como isso seria feito e não consegui imaginar. Alguém saberia dizer como fazer. Digo isto porque usar var Atributos: Integer; begin Atributos:= FileGetAttr('C:\TesteEsconde'); FileSetAttr('C:\TesteEsconde',Atributos + faHidden) end; var Atributos: Integer; begin Atributos:= FileGetAttr('C:\TesteEsconde'); FileSetAttr('C:\TesteEsconde',Atributos - faHidden) é apenas um paleativo, pois o usuário pode via explorer optar por mostrar todas as pastas ocultas e aí babau. Não acredito que os programas que fazem isto copiam a pasta do usário apagam a verdadeira e escondem ou compactam a original isto seria muito risco para eu acreditar.
×
×
  • Criar Novo...