Paulo Nobre

Membros
  • Content Count

    730
  • Joined

  • Last visited

Community Reputation

0 Neutro

About Paulo Nobre

  • Birthday 02/15/1957

Contatos

  • Website URL
    http://
  • ICQ
    0

Perfil

  • Gender
    Male
  • Location
    Rio de Janeiro
  • Interests
    Matemática<br />Programação(Delphi)<br />Bons Livros<br />Boa Música
  1. Olá, a todos. Eu já conhecia a versão Lite, que realmente é muito limitada. Quando li este tópico, baixei está versão trial citada para testar; Embora todos os componentes possam ser usados com o Skin duas coisas observei: 1) quando você modifica o caption do form pela primeira vez aparece uma mensagem dizendo que a versão ´´e trial. Isto não é problema nenhum!! 2) Quando você roda o programa via F9, nada acontece, porém caso rode o executável a primeira mensagem que irá aparecer, antes do programa abrir, será de que a versão é trial. Pelo menos no meu caso, que ainda o jurássico DELPHI 7, isso acontece. É claro que isso é um problema. Acredito, que o colega que iniciou o post não tenha tido esse problema, a menos que esteja testando apenas via delphi e não direto pelo executável. Caso´isso não esteja acontecendo com ele(versão delphi 2010) e apenas na versão delphi 7, realmente é muito estranho. Bom, sorte do colega, embora não acredite em milagres!! De qualquer forma, não uso esse componente e sim o VCLSKIN. Como não faço programas para vender(comerciais) e sim de brincadeira, não tenho nenhum problema. Sem querer levantar discussões, sou da opinião que se um programa desse tipo(colocar peles) é usado em outros, sem fins comerciais, deveriam ser liberados, mediante um termo de compromisso. Ou seja, não deveria ser considerado pirataria a versão que a maioria usa ("A full"). É claro que para programas comerciais, onde pessoas ganhariam dinheiro em cima das pessoas que fizera esses programasa; esses é claro deveriam ser pagos. Paulo Nobre
  2. Olá PepsI.2011 Você tentou registrar sua dll antes de usá-la. Se não, faça isso via comando executar e digite: regsvr32 caminho onde está a dll\libmysql.dll abs Paulo Nobre
  3. Acontece que ele por razões do programa, é o modal, tem que aparecer primeiro, antes do principal ser mostrado? O problema foi detectado: com showhinte = false, não existe violação. Você saberia dizer porque que colocando o componente no form modal ele continua dando problema, já que não precisaria acessar o form principal que possui também o componente?
  4. Paulo Nobre

    ShowModal

    Tenho um form modal que é criado em tempo de execução no Oncreat do form principal. Ele aparece, se na hora de executar o oncreat do principal uma determinada condição não é satisfeita. O forma estava dando violação de acesso quando eu passava o mouse sobre um botão dele. Descobri que o problema era o hint desse botão. Quando desativava(Showhint = false) acabava o problema. No form principal tem um componente chamado colhint que cria uns hints mais afrescalhados. O form principal tem no uses uma chamada ao modal e vice-versa. Normalmante acesso de violação ocorre quando um componente esta sendo acessado antes de ser criado, não é? Então, desativando o hint ele não precisava ser acessado e portanto o problema acaba. Aí pensei o seguinte: e se eu colocar o componente também no form modal, então ele estaria lá e não teria problema. Não deu certo, continua a mensagem de acesso de violação!! Tem alguma coisa que estou fazendo errado? abs Paulo Nobre
  5. Fuçando descobri: Está HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\CLSID\{645FF040-5081-101B-9F08-00AA002F954E}
  6. Gostaria de manipular o nome da lixeira no Windows 7. No windows XP encontravamos o nome da lixeira no registro em: HKEY_CURRENT_USER\SOFTWARE\Microsoft\WINDOWS\ShellNoRoam\MUICache\'@'+C:\...+'\SHELL32.dll,-8964' Alguém sabe onde posso encontrar a mesma coisa no Windows 7(vista)? Não vale dizer que no vista & seven, basta clicar com o botão direito do mouse para renomear!!! obrigado
  7. Olá Prog'amador, valeu por suas palavras, mas falei sem nenhuma falsa modéstia.Até por que não trabalho com programação. Fiquei afastado 4 anos da ferramenta e estou voltando agora, devagar, tentando lembrar de algumas coisas. Aprendi muitas coisas aqui neste forum, um dos melhores em delphi, e continuo aprendendo. No passado tinhamos (Você, Michel, s3c, Capablanca, Churc) hoje temos Jhonas, você e muitos outros. Ainda bem que você voltou para continuar dando essa força que sempre nos deu. Valeu pelas dicas. Tentando seguir a sugestão do Jhonas de passar algumas implementações para o source, observei algumas de suas ideias. Pois lá não existem algumas units etc.. Agora, na realidade uma coisa que está me desanimando nesta volta é novo esquema do seven(vista) a tal de UAC. Se você vem acompanhando este post viu que eu tentei aperfeiçoar aquela sua boa sugestão do if, mas não deu certo. Coloquei a criação de um arquivo INI, para verificar se é a primeira , verificar se é o seven e avisar. Mas me pareec que além de não deixar escrever no registro, parece que ele nem deixa ler a chave que verifica, qual é o windows. Pois, no seven, clicando no programa ele cria o ini, ou seja, verifica que éa primeira vez, mas não entra no if, para verificar se é o seven. O pior é que o windows não mostra nenhuma mensagem!! Vou fazer uma última tentativa colocando um try - finally. Se não der certo tiro esta parte do código. Paciência. Imagina quando vier o windows 8 abs Paulo Nobre
  8. Tudo bem Jhonas,mas apenas uma observação: Não sou programador. O Delphi é apenas um divertimento.
  9. Valeu Jhonas, Obrigado pelos links de "hint" e "Warning". Agora diz aí quais são os cuidados que devo ter na área source? abraço
  10. Olá Jhonas, obrigado por sua resposta, mas gostaria de perguntar mais o seguinte: Em relação a: Você quer dizer que com o meu código jamais conseguirei alcançar meus objetivos?Só baixando o controle da UPC para o minimo? Então no meu caso quando coloquei: PrimeiraVez:=False; ela não foi inicializada? Achei que variáveis do tipo Boolean poderiam ser inicializadoa com false ou true. Entendi a explicação, não sabia deste detalhe. É o mal de quem quer se metera programar sem saber o básico primeiro. Você quer dizer que todo o código que escrevi no OnCreat deveria estar em outro lugar? Você não respondeu se o que eu coloquei no inicio do meu post anterior tem algum sentido? Lá tem: application.initialize application.oncreat application.run. abraço Paulo Nobre
  11. Prezado Jhonas, Inicialmente muito obrigado por sua atenção e as dicas Como tenho que ser honesto(sem pesquisar na internet), acho que não sei! Não sei responder, mas a um tempo atrás vi um código na internet(um tal de mutex), para verificar se o programa estava rodando e não repetir a apresentação do formulário. Ele era colocado no source do programa.´Seria lá que algum código deste tipo deveria ser colocado? Testei a unit que voce postou (unit IsAdministrator) e como todo código qur você posta funciona perfeitamente, tanto que estou aperfeiçoando o programeto que estou fazendo com sua ajuda(instalar bde e verificar qual windows está instalado) e a ajuda do Prog'ramador(código de um post acima). O problema é que mesmo estando logado como administrador, no windows 7, tem aquelas restriçoes para abrir os programas; aquelas que a tela fica mais escura perguntando se você realmente deseja executar o programa. Esse código que escrevi é para tentar sanar o problema de que no win7 ao clicar nele direto ele não roda o código corretamente, não escrevendo no registro etc.. Sendo assim verifico se o windows é o seven mando uma mensagem para clicar com o botão direito do mouse e executar como administrador, fecho via comando Halt;(pois via application. terminate o form pisca tentando aparecer). Ao clicar com o botão direito e executando como administrador tudo funciona normalmente. Se não tivesse a mensagem e o usuário clicasse diretamente iria bagunçar tudo, pois não seria escrito nada no registro ele abriria o programa tentaria chamar o bando de dados etc...)Ou seja, preciso do código. Para sanar isso, já que não posso acessar o registro, crio um arquivo ini, que ele deixa criar.(veja o código a seguir) O meu delphi 7 está no xp e testo no win7 em outra máquina. Gostaria, se possível, que você(ou outra pesso aque queira me ajudar) desse uma olhada no código abaixo e quando puder, respondesse as seguintes perguntas? 1)Porque o código faz tudo que preciso no XP e não no seven? 2) No seven ele chega a criar o arquivo ini, mas não mostra a mensagem que o windows7 está instalado é win7. Estranho é que executando como administrador( via botão direito do mouse), embora já esteja logado como administrador,até porque sou o únco usuário da máquina, o código funciona como gostaria. Você saberia dizer porque acontece isso. Se o código estivesse errado não funcionaria de maneira nenhuma você não acha? 3) Na hora de compilar aparece um hint dizendo que a variável "PrimeiraVez" nunca foi usada. Acho que minha experiencia é muito pouca, porém achei que ela estava sendo usada sim, tanto que depois que o arquivo ini é criado a mensagem de que o windows7 está insatalado não aparece mais(pois ela assume o valor false). Tem algum erro com ela?? 4) Agora uma dúvida de lógica de programação; qual a diferença entre If (Encerra = True) and (PrimeiraVez = True) then e...... If Encerra = True and PrimeiraVez = True then? o primeiro é o que dá certo, pois as variáveis chegando como false e false não rodam o código, mas na segunda as variaveis chegando com false e false o codigo dentro do if roda. Não entendi. Abaixo segue o código. var frmPrincipalDD: TfrmPrincipalDD; reg:TRegistry; implementation Uses USobreDicasDelphi,UOpcoes,UInstalarBDE,Inifiles; {$R *.dfm} procedure TfrmPrincipalDD.FormCreate(Sender: TObject); var NumeroDeVezes:Integer; DataInstall:String; //As variáveis abaixo são para os arquivos embutidos dentro //do arquivo de recursos. RS1,RS2,RS3,RS4,RS5: TResourceStream; RS6,RS7:TResourceStream;//Para as setas ampliar e retrair. RS8:TResourceStream;//Para a dll do BDE Caminho1, Caminho2, Caminho3, Caminho4, Caminho5: String; Caminho6,Caminho7:String;//Para as setas ampliar e retrair. Caminho8:String;//Para a dll do BDE. Temp, Platform , Version : String;//Variáveis para descobrir a versão do windows osInfo : TOSVersionInfo;//Variável para descobrir a versão do windows MensagemVersao: String;//Variavel para dar a mensagem da versão Encerra: Boolean;//Variavel para encerrar o programa PrimeiraVez: Boolean;//Variavel para ver se foi a primeira vez que foi usado o programa APV: TIniFile;//Variavel para criar arquivo .INI. begin //A primeira coisa que será feita é verificar se o windows //instalado é o vista ou seven e avisar ao usuário que ele //deverá abrir o programa a primeira vez usando privilégios //de administrador. //******************************************************* //Inicio do código para verificar qual a versão do windows instalada. Encerra:=False; PrimeiraVez:=False; //Verifica se existe um arquivo INI na pasta do programa //que servirá de referencia para saber se é a primeira vez //ou não que o programa foi aberto, já que não é possível //escrever no registro ainda. If not FileExists(ExtractFilePath(Application.exename)+'\ArquivoPV.ini') then begin PrimeiraVez:= True; APV:= TIniFile.Create(ExtractFilePath(Application.exename)+'\ArquivoPV.ini'); APV.WriteString('DELPHI DICAS 2.0','USADO ALGUMA VEZ ',' SIM'); APV.Free; end else begin PrimeiraVez:=False; end; If PrimeiraVez = True then begin reg:=TRegistry.Create;//Instância o registro. reg.RootKey:=HKEY_LOCAL_MACHINE; If Not reg.KeyExists('SOFTWARE\NOBRE INFORMÁTICA\DICAS & DELPHI')= True Then begin osInfo.dwOSVersionInfoSize:=SizeOf(osInfo); GetVersionEx(osInfo); Version :=IntToStr(osInfo.dwMinorVersion); Temp:=IntToStr(osInfo.dwBuildNumber and $0ffff); Temp:=String(osInfo.szCSDVersion); if (Length(Temp) > 0) then if (Temp[1] <> ' ') then Temp:=' ' + Temp; Version:= Version + Temp; //label2.caption := Version; case osInfo.dwPlatformId of VER_PLATFORM_WIN32s : Platform:='Win32s'; VER_PLATFORM_WIN32_WINDOWS : begin if (osInfo.dwMinorVersion = 0) then Platform:='Windows 95' else if (osInfo.dwMinorVersion = 10) then Platform:='Windows 98' else Platform:='Windows Me'; end; VER_PLATFORM_WIN32_NT : begin If (osInfo.dwMajorVersion = 3) then Platform:='Windows NT 3'; If (osInfo.dwMajorVersion = 4) then Platform:='Windows NT 4.0'; If (osInfo.dwMajorVersion = 5) then begin If (osInfo.dwMinorVersion) = 0 then Platform:='Windows 2000, Windows Vista ou Windows Server 2008'; If (osInfo.dwMinorVersion) = 1 then Platform:='WINDOWS XP'; If (osInfo.dwMinorVersion) = 2 then Platform:='Windows Server 2003 R2, 2003 ou XP Professional X64 Edition'; end; If (osInfo.dwMajorVersion = 6) then begin If (osInfo.dwMinorVersion) = 0 then Platform:='WINDOWS VISTA'; If (osInfo.dwMinorVersion) = 1 then Platform:='WINDOWS 7'; end; end; end; reg.CloseKey; If platform = 'WINDOWS 7' then begin MensagemVersao:= 'O programa Delphi Dicas verificou que você está com o '+Platform+' instalado. '+#13+ 'Neste caso será necessário na primeira vez que usar o programa, que você o faça como administrador. '+ #13+ 'Para isso, clique no ícone do programa com o botão direito do mouse e escolha executar como admnistrador. '; Messagebox(0,PChar(MensagemVersao),'VERSÃO DO WINDOWS',MB_IconInformation); Encerra:= True; end; If platform = 'WINDOWS VISTA' then begin MensagemVersao:= 'O programa Delphi Dicas verificou que você está com o '+Platform+' instalado. '+#13+ 'Neste caso será necessário na primeira vez que usar o programa, que você o faça como administrador. '+ #13+ 'Para isso, clique no ícone do programa com o botão direito do mouse e escolha executar como admnistrador. '; Messagebox(0,PChar(MensagemVersao),'VERSÃO DO WINDOWS',MB_IconInformation); Encerra:= True; end; //Usado apenas para testes {If platform = 'WINDOWS XP' then begin MensagemVersao:= 'O programa Delphi Dicas verificou que você está com o '+Platform+' instalado. '+#13+ 'Neste caso será necessário na primeira vez que usar o programa, que você o faça como administrador. '+ #13+ 'Para isso, clique no ícone do programa com o botão direito do mouse e escolha executar como admnistrador. '; Messagebox(0,PChar(MensagemVersao),'VERSÃO DO WINDOWS',MB_IconInformation); Encerra:= True; end;} end; end; //Fim do código para verificar qual a versão do windows //****************************************************** //Caso tenha sido detectado o Seven ou o Vista encerra //caso contrário executa o resto If (Encerra = True) and (PrimeiraVez = True) then begin //Application.Terminate;//O form pisca antes de fechar {Halt performs an abnormal termination of a program and returns to the operating system. To perform a normal termination of a Delphi application, call the Terminate method on the global Application object. If the application does not use a unit that provides an Application object, call the Exit procedure from the main Program block. Exitcode is an optional expression that specifies an exit code for the program.} Halt; end // executa todo o resto do código, após verificar versão else begin //Cria a pasta BACKUP no mesmo diretório do programa, caso //ela não exista. If not DirectoryExists(ExtractFileDir(Application.exename)+'\BACKUP')then MkDir(ExtractFileDir(Application.exename)+'\BACKUP'); //Cria a pasta BDD no mesmo diretório do programa, caso //ela não exista. If not DirectoryExists(ExtractFileDir(Application.exename)+'\BDD')then MkDir(ExtractFileDir(Application.exename)+'\BDD'); application.HintPause := 3000; //Início do hint application.HintHidePause := 4000;//tempo total que aparece o hint frmPrincipalDD.Caption:= 'DICAS & DELPHI - NOBRE INFORMÁTICA'; frmPrincipalDD.Left := 5; frmPrincipalDD.Top:= 5; frmPrincipalDD.Width:=735; GroupBox5.Visible:=False; GroupBox7.Visible:=False; //Table1.Close;//Volte caso tenha problema!! reg:=TRegistry.Create;//Instância o registro. //O código abaixo cria uma chave (Nobre Informática) e subChave(DICAS & DELPHI) para o programa. //O True significa que se a chave não existe ela será criada. reg.RootKey:=HKEY_LOCAL_MACHINE; reg.OpenKey('SOFTWARE\NOBRE INFORMÁTICA\DICAS & DELPHI',TRUE); If Not reg.ValueExists('Primeira Vez')= True Then //Inicio do If se é a primeira vez begin //As linhas de código que seguem baixam os arquivos de //banco de dados, proveniente do arquivo de recursos, //para a pasta onde está o executavel do programa. Caminho1:= ExtractFilePath(Application.ExeName)+'\BDD\Dicas_Delphi.db'; RS1:= TResourceStream.Create(HInstance, 'Dicas_Delphi_db', RT_RCDATA); RS1.SaveToFile(Caminho1); RS1.Free; Caminho2:= ExtractFilePath(Application.ExeName)+'\BDD\Dicas_Delphi.MB'; RS2:= TResourceStream.Create(HInstance, 'Dicas_Delphi_MB', RT_RCDATA); RS2.SaveToFile(Caminho2); RS2.Free; Caminho3:= ExtractFilePath(Application.ExeName)+'\BDD\Dicas_Delphi.PX'; RS3:= TResourceStream.Create(HInstance, 'Dicas_Delphi_PX', RT_RCDATA); RS3.SaveToFile(Caminho3); RS3.Free; Caminho4:= ExtractFilePath(Application.ExeName)+'\BDD\Dicas_Delphi.XG0'; RS4:= TResourceStream.Create(HInstance, 'Dicas_Delphi_XG0', RT_RCDATA); RS4.SaveToFile(Caminho4); RS4.Free; Caminho5:= ExtractFilePath(Application.ExeName)+'\BDD\Dicas_Delphi.YG0'; RS5:= TResourceStream.Create(HInstance, 'Dicas_Delphi_YG0', RT_RCDATA); RS5.SaveToFile(Caminho5); RS5.Free; Caminho6:= ExtractFilePath(Application.ExeName)+'\Ampliar.bmp'; RS6:= TResourceStream.Create(HInstance, 'AMPLIAR', RT_RCDATA); RS6.SaveToFile(Caminho6); RS6.Free; Caminho7:= ExtractFilePath(Application.ExeName)+'\Retrair.bmp'; RS7:= TResourceStream.Create(HInstance, 'RETRAIR', RT_RCDATA); RS7.SaveToFile(Caminho7); RS7.Free; Caminho8:= ExtractFilePath(Application.ExeName)+'\BdeInst.dll'; RS8:= TResourceStream.Create(HInstance, 'INSTALARBDE', RT_RCDATA); RS8.SaveToFile(Caminho8); RS8.Free; DataInstall:=DateToStr(Date); reg.WriteString('AUTOR DO PROGRAMA','PAULO NOBRE'); reg.WriteString('VERSÃO DO PROGRAMA', 'VERSÃO 2.0 (Maio de 2011)'); reg.WriteString('Primeira Vez','Não'); reg.WriteString('QuerSom?','Sim'); reg.WriteString('Backup','Não'); reg.WriteString('Data da Instalação',DataInstall); reg.WriteString('DataUltimaDica',DataInstall); reg.WriteString('Seta','Ampliar'); reg.WriteString('Local de Instalação',ExtractFilePath(Application.ExeName)); reg.WriteInteger('NumerodeVezes',1); reg.WriteString('Ordenação','PorNúmero'); reg.WriteString('O BDE está instalado?','Não'); reg.CloseKey; //VERIFICA SE POSSUI O BDE INSTALADO. //Caso não possua, ele será instalado. //dbiInit requer "uses BDE;" uma linha abaixo de "implementation" //ou no uses If (dbiInit(nil) = 0) then //Caso dbiInit(nil)=0 é porque o BDE está instalado. begin //O código abaixo escreve no registro que o BDE está instalado reg.RootKey:=HKEY_LOCAL_MACHINE; reg.OpenKey('SOFTWARE\NOBRE INFORMÁTICA\DICAS & DELPHI',False); reg.WriteString('O BDE está instalado?','Sim'); reg.CloseKey; //Não esquecer de incluir a unit DBTables if not Session.IsAlias('DelphiDicas') then begin { Adiciona o alias } Session.AddStandardAlias('DelphiDicas', ExtractFilePath(Application.ExeName)+'BDD', 'PARADOX'); { Salva o arquivo de configuração do BDE } Session.SaveConfigFile; end; end else //Caso não exista BDE instalado. begin //Caso dbiInit(nil)<>0 é porque não existe o BDE //e portanto ele será instalado. //O código a seguir abre uma janela para que o BDE //possa ser instalado antes do programa começar with TfrmInstalarBDE.Create(Application) do ////cria o Form begin try ShowModal; finally; free; end; end; //O código acima abre uma janela para que o BDE //possa ser instalado antes do programa começar end; // O código abaixo mostra uma mensagem do // programa, caso seja a primeira vez que ele esteja // sendo aberto. Messagebox(0,'Este programa já vem com algumas dicas, mas você poderá adicionar quantas quiser. '+#13+ 'Faça um bom proveito do programa!! ','MENSAGEM INICIAL',MB_IconInformation); Messagebox(0,'Para visualizar as dicas em forma de relatório e até imprimi-las é necessário ter o WORD instalado. '+#13+ 'Além disso é necessário ter uma versão igual ou superior a do WORD 2000. ','MENSAGEM INICIAL',MB_IconInformation); end else //Caso não seja a primeira vez, ou seja, o programa já //tenha sido aberto e com o BDE instalado begin NumeroDeVezes:= reg.ReadInteger('NumerodeVezes'); NumeroDeVezes:= NumeroDeVezes + 1; reg.WriteInteger('NumerodeVezes',NumeroDeVezes); reg.WriteString('Local de Instalação',ExtractFilePath(Application.ExeName));//Repetido apenas para confirmar reg.CloseKey; end; // O código abaixo foi tirado do OnCreat e colocado //no OnShow, para tentar parar de fazer aparecer //Acesso de violação quando aparee a janela instalar BDE //****************************************************** {try Table1.Close; reg.RootKey:=HKEY_LOCAL_MACHINE; reg.OpenKey('SOFTWARE\NOBRE INFORMÁTICA\DICAS & DELPHI',False); If reg.ReadString('Ordenação')= 'PorNúmero'then begin Table1.IndexName:=''; reg.CloseKey; end; If reg.ReadString('Ordenação')= 'PorAssunto'then begin Table1.IndexName:='indAssunto'; reg.CloseKey; end; Table1.Active:= True; Table1.Open; //Aciona o timer do cabecalho. TimerCabecalho.Enabled:=True; except begin MessageBox(handle,'Não foi possível ler os dados do banco de dados Dicas&Delphi.'+#13+'Verifique se o arquivo não foi movido ou apagado.'+#13+ 'Este arquivo se encontra na subpasta BDD na mesma pasta do programa.','ERRO',MB_IconStop); Table1.Close; end;} //****************************************************** // O código acima foi tirado do OnCreat e colocado //no OnShow, para tentar parar de fazer aparecer //Acesso de violação quando aparece a janela instalar BDE end;//coloquei para o if do If encerra then application.terminate end;
  12. Olá Progr'amador Deu certo o que você sugeriu!!! Só que na hora de modificar o código me dei conta que arrumei um outro problema: Se o windows for vista ou seven, nunca o programa abrirá. Será um cachorro correndo atrás do rabo. Se é seven avisa que tem que executar como administrador e fecha. Aí você abre para executar como administrador ele verifica que é o seven avisa de novo e fecha. E assim sucessivamente. O problema é ele não deixar escrever no registro sem ser executando como admistrador. É claro que é só avisar para a pessoa isso, mas aí não teria desafios para programar concordda. Até porque qualquer programa deveria supor todos os tipos de usuários e fornecer todas as variações possíveis. Alguma sugestão?
  13. Obrigado por sua atenção Progr'amador O código abaixo está no Oncreat do form principal. A ideia seria caso o programa acusasse a presença do windows 7, chamar a mensagem fecharia para o programa e clicando com o botão direito do mouse ele executaria como administradir. Pois se clicar direto ele não escrev no registro,pois o windows 7 não deixa. procedure TfrmPrincipalDD.FormCreate(Sender: TObject); var NumeroDeVezes:Integer; DataInstall:String; //As variáveis abaixo são para os arquivos embutidos dentro //do arquivo de recursos. RS1,RS2,RS3,RS4,RS5: TResourceStream; RS6,RS7:TResourceStream;//Para as setas ampliar e retrair. RS8:TResourceStream;//Para a dll do BDE Caminho1, Caminho2, Caminho3, Caminho4, Caminho5: String; Caminho6,Caminho7:String;//Para as setas ampliar e retrair. Caminho8:String;//Para a dll do BDE. //Temp, Platform , Version : String;//Variáveis para descobrir a versão do windows //osInfo : TOSVersionInfo;//Variável para descobrir a versão do windows //MensagemVersao: String; begin //A primeira coisa que será feita é verificar se o windows //instalado é o vista ou seven e avisar ao usuário que ele //deverá abrir o programa a primeira vez usando privilégios //de administrador. //******************************************************* //Inicio do código para verificar qual a versão do windows instalada. {reg:=TRegistry.Create;//Instância o registro. reg.RootKey:=HKEY_LOCAL_MACHINE; If Not reg.KeyExists('SOFTWARE\NOBRE INFORMÁTICA\DICAS & DELPHI')= True Then begin osInfo.dwOSVersionInfoSize:=SizeOf(osInfo); GetVersionEx(osInfo); Version :=IntToStr(osInfo.dwMinorVersion); Temp:=IntToStr(osInfo.dwBuildNumber and $0ffff); Temp:=String(osInfo.szCSDVersion); if (Length(Temp) > 0) then if (Temp[1] <> ' ') then Temp:=' ' + Temp; Version:= Version + Temp; //label2.caption := Version; case osInfo.dwPlatformId of VER_PLATFORM_WIN32s : Platform:='Win32s'; VER_PLATFORM_WIN32_WINDOWS : begin if (osInfo.dwMinorVersion = 0) then Platform:='Windows 95' else if (osInfo.dwMinorVersion = 10) then Platform:='Windows 98' else Platform:='Windows Me'; end; VER_PLATFORM_WIN32_NT : begin If (osInfo.dwMajorVersion = 3) then Platform:='Windows NT 3'; If (osInfo.dwMajorVersion = 4) then Platform:='Windows NT 4.0'; If (osInfo.dwMajorVersion = 5) then begin If (osInfo.dwMinorVersion) = 0 then Platform:='Windows 2000, Windows Vista ou Windows Server 2008'; If (osInfo.dwMinorVersion) = 1 then Platform:='WINDOWS XP'; If (osInfo.dwMinorVersion) = 2 then Platform:='Windows Server 2003 R2, 2003 ou XP Professional X64 Edition'; end; If (osInfo.dwMajorVersion = 6) then begin If (osInfo.dwMinorVersion) = 0 then Platform:='WINDOWS VISTA'; If (osInfo.dwMinorVersion) = 1 then Platform:='WINDOWS 7'; end; end; end; reg.CloseKey; //label1.caption := Platform; If platform = 'WINDOWS 7' then begin MensagemVersao:= 'O programa Delphi Dicas verificou que você está com o '+Platform+' instalado. '+#13+ 'Neste caso será necessário na primeira vez que usar o programa, que você o faça como administrador. '+ #13+ 'Para isso, clique no ícone do programa com o botão direito do mouse e escolha abrir como admnistrador. '; Messagebox(0,PChar(MensagemVersao),'VERSÃO DO WINDOWS',MB_IconInformation); Application.Terminate; end; If platform = 'WINDOWS VISTA' then begin MensagemVersao:= 'O programa Delphi Dicas verificou que você está com o '+Platform+' instalado. '+#13+ 'Neste caso será necessário na primeira vez que usar o programa, que você o faça como administrador. '+ #13+ 'Para isso, clique no ícone do programa com o botão direito do mouse e escolha abrir como admnistrador. '; Messagebox(0,PChar(MensagemVersao),'VERSÃO DO WINDOWS',MB_IconInformation); Application.Terminate; end; //If platform = 'WINDOWS XP' then //begin //MensagemVersao:= 'O programa Delphi Dicas verificou que você está com o '+Platform+' instalado. '+#13+ 'Neste caso será necessário na primeira vez que usar o programa, que você o faça como administrador. '+ #13+ 'Para isso, clique no ícone do programa com o botão direito do mouse e escolha abrir como admnistrador. '; //Messagebox(0,PChar(MensagemVersao),'VERSÃO DO WINDOWS',MB_IconInformation); //Application.Terminate; //end; end; //Fim do código para verificar qual a versão do windows //****************************************************** }//O cógdigo acima foi cortado //Cria a pasta BACKUP no mesmo diretório do programa, caso //ela não exista. If not DirectoryExists(ExtractFileDir(Application.exename)+'\BACKUP')then MkDir(ExtractFileDir(Application.exename)+'\BACKUP'); //Cria a pasta BDD no mesmo diretório do programa, caso //ela não exista. If not DirectoryExists(ExtractFileDir(Application.exename)+'\BDD')then MkDir(ExtractFileDir(Application.exename)+'\BDD'); application.HintPause := 3000; //Início do hint application.HintHidePause := 4000;//tempo total que aparece o hint frmPrincipalDD.Caption:= 'DICAS & DELPHI - NOBRE INFORMÁTICA'; frmPrincipalDD.Left := 5 ; frmPrincipalDD.Top:= 5; frmPrincipalDD.Width:=735; GroupBox5.Visible:=False; GroupBox7.Visible:=False; //Table1.Close;//Volte caso tenha problema!! reg:=TRegistry.Create;//Instância o registro. //O código abaixo cria uma chave (Nobre Informática) e subChave(DICAS & DELPHI) para o programa. //O True significa que se a chave não existe ela será criada. reg.RootKey:=HKEY_LOCAL_MACHINE; reg.OpenKey('SOFTWARE\NOBRE INFORMÁTICA\DICAS & DELPHI',TRUE); // O código abaixo mostra uma mensagem do // programa, caso seja a primeira vez que ele esteja // sendo aberto. If Not reg.ValueExists('Primeira Vez')= True Then //Inicio do If se é a primeira vez begin //As linhas de código que seguem baixam os arquivos de //banco de dados, proveniente do arquivo de recursos, //para a pasta onde está o executavel do programa. // Caminho1:= ExtractFilePath(Application.ExeName)+'\BDD\Dicas_Delphi.db'; RS1:= TResourceStream.Create(HInstance, 'Dicas_Delphi_db', RT_RCDATA); RS1.SaveToFile(Caminho1); RS1.Free; Caminho2:= ExtractFilePath(Application.ExeName)+'\BDD\Dicas_Delphi.MB'; RS2:= TResourceStream.Create(HInstance, 'Dicas_Delphi_MB', RT_RCDATA); RS2.SaveToFile(Caminho2); RS2.Free; Caminho3:= ExtractFilePath(Application.ExeName)+'\BDD\Dicas_Delphi.PX'; RS3:= TResourceStream.Create(HInstance, 'Dicas_Delphi_PX', RT_RCDATA); RS3.SaveToFile(Caminho3); RS3.Free; Caminho4:= ExtractFilePath(Application.ExeName)+'\BDD\Dicas_Delphi.XG0'; RS4:= TResourceStream.Create(HInstance, 'Dicas_Delphi_XG0', RT_RCDATA); RS4.SaveToFile(Caminho4); RS4.Free; Caminho5:= ExtractFilePath(Application.ExeName)+'\BDD\Dicas_Delphi.YG0'; RS5:= TResourceStream.Create(HInstance, 'Dicas_Delphi_YG0', RT_RCDATA); RS5.SaveToFile(Caminho5); RS5.Free; Caminho6:= ExtractFilePath(Application.ExeName)+'\Ampliar.bmp'; RS6:= TResourceStream.Create(HInstance, 'AMPLIAR', RT_RCDATA); RS6.SaveToFile(Caminho6); RS6.Free; Caminho7:= ExtractFilePath(Application.ExeName)+'\Retrair.bmp'; RS7:= TResourceStream.Create(HInstance, 'RETRAIR', RT_RCDATA); RS7.SaveToFile(Caminho7); RS7.Free; Caminho8:= ExtractFilePath(Application.ExeName)+'\BdeInst.dll'; RS8:= TResourceStream.Create(HInstance, 'INSTALARBDE', RT_RCDATA); RS8.SaveToFile(Caminho8); RS8.Free; DataInstall:=DateToStr(Date); reg.WriteString('AUTOR DO PROGRAMA','PAULO NOBRE'); reg.WriteString('VERSÃO DO PROGRAMA', 'VERSÃO 2.0 (Maio de 2011)'); reg.WriteString('Primeira Vez','Não'); reg.WriteString('QuerSom?','Sim'); reg.WriteString('Backup','Não'); reg.WriteString('Data da Instalação',DataInstall); reg.WriteString('DataUltimaDica',DataInstall); reg.WriteString('Seta','Ampliar'); reg.WriteString('Local de Instalação',ExtractFilePath(Application.ExeName)); reg.WriteInteger('NumerodeVezes',1); reg.WriteString('Ordenação','PorNúmero'); reg.WriteString('O BDE está instalado?','Não'); reg.CloseKey; //VERIFICA SE POSSUI O BDE INSTALADO. //Caso não possua, ele será instalado. //dbiInit requer "uses BDE;" uma linha abaixo de "implementation" //ou no uses If (dbiInit(nil) = 0) then begin //Caso dbiInit(nil)=0 é porque o BDE está instalado. //O código abaixo escreve no registro que o BDE está instalado reg.RootKey:=HKEY_LOCAL_MACHINE; reg.OpenKey('SOFTWARE\NOBRE INFORMÁTICA\DICAS & DELPHI',False); reg.WriteString('O BDE está instalado?','Sim'); reg.CloseKey; //Não esquecer de incluir a unit DBTables if not Session.IsAlias('DelphiDicas') then begin { Adiciona o alias } Session.AddStandardAlias('DelphiDicas', ExtractFilePath(Application.ExeName)+'BDD', 'PARADOX'); { Salva o arquivo de configuração do BDE } Session.SaveConfigFile; end; end else //Caso não exista BDE instalado. begin //Caso dbiInit(nil)<>0 é porque não existe o BDE //e portanto ele será instalado com a dll bdeinst.dll //sendo antes registrada. //O código a seguir abre uma janela para que o BDE //possa ser instalado antes do programa começar with TfrmInstalarBDE.Create(Application) do ////cria o Form begin try ShowModal; finally; free; end; end; //O código acima abre uma janela para que o BDE //possa ser instalado antes do programa começar end; Messagebox(0,'Este programa já vem com algumas dicas, mas você poderá adicionar quantas quiser. '+#13+ 'Faça um bom proveito do programa!! ','MENSAGEM INICIAL',MB_IconInformation); Messagebox(0,'Para visualizar as dicas em forma de relatório e até imprimi-las é necessário ter o WORD instalado. '+#13+ 'Além disso é necessário ter uma versão igual ou superior a do WORD 2000. ','MENSAGEM INICIAL',MB_IconInformation); end Else //Caso não seja a primeira vez, ou seja, o programa já //tenha sido aberto e com o BDE instalado begin NumeroDeVezes:= reg.ReadInteger('NumerodeVezes'); NumeroDeVezes:= NumeroDeVezes + 1; reg.WriteInteger('NumerodeVezes',NumeroDeVezes); reg.WriteString('Local de Instalação',ExtractFilePath(Application.ExeName));//Repetido apenas para confirmar reg.CloseKey; end; // O código abaixo foi tirado do OnCreat e colocado //no OnShow, para tentar parar de fazer aparecer //Acesso de violação quando aparee a janela instalar BDE //****************************************************** {try Table1.Close; reg.RootKey:=HKEY_LOCAL_MACHINE; reg.OpenKey('SOFTWARE\NOBRE INFORMÁTICA\DICAS & DELPHI',False); If reg.ReadString('Ordenação')= 'PorNúmero'then begin Table1.IndexName:=''; reg.CloseKey; end; If reg.ReadString('Ordenação')= 'PorAssunto'then begin Table1.IndexName:='indAssunto'; reg.CloseKey; end; Table1.Active:= True; Table1.Open; //Aciona o timer do cabecalho. TimerCabecalho.Enabled:=True; except MessageBox(handle,'Não foi possível ler os dados do banco de dados Dicas&Delphi.'+#13+'Verifique se o arquivo não foi movido ou apagado.'+#13+ 'Este arquivo se encontra na subpasta BDD na mesma pasta do programa.','ERRO',MB_IconStop); Table1.Close; end;} //****************************************************** // O código acima foi tirado do OnCreat e colocado //no OnShow, para tentar parar de fazer aparecer //Acesso de violação quando aparee a janela instalar BDE end; Na realidade o que não poderia acontecer, e acontece ,neste código é que antes da aplicação terminar ela escreve no registro. Não me lembro mais como inserir aquela caixa de code. A muito tempo que não post em foruns. Estou retornando agora. abs Paulo Nobre
  14. Existe alguma maneira de fazer aparecer uma mensagem antes de um programa ser executado e depois de fechar a mensagem fechar o programa sem executar nada do seu código?? Gostaria de fazer isso para primeiro o usuário saber que terá que executar o programa como administrador do sitema caso seja no windows 7, sendo assim no primeiro clique a mensagem apareceria o programa seria fechado e depois ele o abriria caso fosse no 7 ou no vista , via botão direito do mouse em executar como administrador. No XP nada aconteceria. Coloquei no oncreat Messagebox(blablabla) avisando que o windows é o 7 e em seguida aplication.terminate A mensagem aparece e a aplicação não aparece pois termina antes de ser mostrada, só que o seu codigo do oncreat após o aplication.terminate é todo executado e aí causa problema na hora de abrir de novo. Existe alguma maneira??
  15. Depois que ele aparece tenho um botão nele para executar uma tarefa e depois que a tarefa é executada gostaria de fechá-lo para que o principal pudesse aparecer(o modal não é o principal ele está ali aparecendo apenas porque no oncreat do principal o registro é verificado e caso algo não esteja lá ele chamará o modal ao invés do principal). Sendo assim gostaria de ter um botão nele para ao clicar(ao invés de clicar no X-lá funciona) pudesse fechar o modal e aparecer o principal. Faço assim pois se não fosse modal o principal seria carregado a aí o programa daria prosseguimento e no ,eu caso não iria interessar)