Ir para conteúdo
Fórum Script Brasil
  • 0

Mensagem antes do programa


Paulo Nobre

Pergunta

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??

Editado por Paulo Nobre
Link para o comentário
Compartilhar em outros sites

16 respostass a esta questão

Posts Recomendados

  • 0

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

Editado por Paulo Nobre
Link para o comentário
Compartilhar em outros sites

  • 0

Olá Paulo,

Estranho não funcionar, se ele entra no IF deveria funcionar, tenta fazer o segunte:

Adicione uma variavel tipo BOOLEAN, exemplo:

procedure TfrmPrincipalDD.FormCreate(Sender: TObject);
var
   encerra : boolean;
   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
  encerra := False; ///// coloque já no inicio do Create

  ... bla
  ... bla
  ... bla


  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);
     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 abrir como admnistrador. ';
     Messagebox(0,PChar(MensagemVersao),'VERSÃO DO WINDOWS',MB_IconInformation);
     encerra := True;
  end;

  // e antes de execultar o restante do código coque:
  if encerra then
     Application.Terminate
  else begin
     //execulta o restante do código
     .... bla
     .... bla
     .... bla
  end;
end;

algo desse tipo...

Editado por Progr'amador
Link para o comentário
Compartilhar em outros sites

  • 0

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?

Editado por Paulo Nobre
Link para o comentário
Compartilhar em outros sites

  • 0
É claro que é só avisar para a pessoa isso, mas aí não teria desafios para programar concorda ?

Já que quer um desafio ... qual é o primeiro código que o delphi executa, antes mesmo de criar qualquer formulário ?

se souber, fica ai a minha sugestão. rs

=======================================================

outra sugestão mais simples:

Existe uma maneira de checar internamente se o usuário abriu o programa como administrador

Crie uma Unit no delphi e salve com o nome de IsAdministrator.pas e salve na pasta Bin do delphi

CODE

unit IsAdministrator;

interface

function IsAdmin: Boolean;

implementation

uses
  Windows;
  
const
  SECURITY_NT_AUTHORITY: TSIDIdentifierAuthority = (Value: (0, 0, 0, 0, 0, 5));
  SECURITY_BUILTIN_DOMAIN_RID = $00000020;
  DOMAIN_ALIAS_RID_ADMINS = $00000220;
  
type
  TOpenThreadToken = function (ThreadHandle: THandle; DesiredAccess: DWORD; OpenAsSelf: BOOL; var TokenHandle: THandle): BOOL; stdcall;
  TGetTokenInformation = function (TokenHandle: THandle; TokenInformationClass: TTokenInformationClass; TokenInformation: Pointer; TokenInformationLength: DWORD; var ReturnLength: DWORD): BOOL; stdcall;
  TOpenProcessToken = function (ProcessHandle: THandle; DesiredAccess: DWORD; var TokenHandle: THandle): BOOL; stdcall;
  TEqualSid = function (pSid1, pSid2: Pointer): BOOL; stdcall;
  TAllocateAndInitializeSid = function (const pIdentifierAuthority: TSIDIdentifierAuthority; nSubAuthorityCount: Byte; nSubAuthority0, nSubAuthority1: DWORD; nSubAuthority2, nSubAuthority3, nSubAuthority4: DWORD; nSubAuthority5, nSubAuthority6, nSubAuthority7: DWORD; var pSid: Pointer): BOOL; stdcall;
  TFreeSid = function (pSid: Pointer): Pointer; stdcall;

function IsAdmin: boolean;
var
  iAccessToken: THandle;
  ptgGroups: PTokenGroups;
  dwInfoBufferSize: DWORD;
  psidAdministrators: PSID;
  iCount: integer;
  fSuccess: BOOL;
  pOpenThreadToken: TOpenThreadToken;
  pOpenProcessToken: TOpenProcessToken;
  pGetTokenInformation: TGetTokenInformation;
  pEqualSid: TEqualSid;
  pAllocateAndInitializeSid: TAllocateAndInitializeSid;
  pFreeSid: TFreeSid;
  iDll: integer;
begin
  Result := false;
  iDll := LoadLibrary(advapi32);
  if iDll = 0 then
    exit;
  try
    pOpenThreadToken := GetProcAddress(iDll, 'OpenThreadToken');
    pOpenProcessToken := GetProcAddress(iDll, 'OpenProcessToken');
    pGetTokenInformation := GetProcAddress(iDll, 'GetTokenInformation');
    pEqualSid := GetProcAddress(iDll, 'EqualSid');
    pAllocateAndInitializeSid := GetProcAddress(iDll, 'AllocateAndInitializeSid');
    pFreeSid := GetProcAddress(iDll, 'FreeSid');
    if not Assigned(pOpenThreadToken) or not Assigned(pOpenProcessToken) or not Assigned(pGetTokenInformation) or not Assigned(pEqualSid) or not Assigned(pFreeSid) or not Assigned(pAllocateAndInitializeSid) then
      exit;
    fSuccess := pOpenThreadToken(GetCurrentThread, TOKEN_QUERY, true, iAccessToken);
    if not fSuccess then
    begin
      if GetLastError = ERROR_NO_TOKEN then
        fSuccess := pOpenProcessToken(GetCurrentProcess, TOKEN_QUERY, iAccessToken);
    end;
    if fSuccess then
    begin
      GetMem(ptgGroups, 1024);
      try
        fSuccess := pGetTokenInformation(iAccessToken, TokenGroups, ptgGroups, 1024, dwInfoBufferSize);
        CloseHandle(iAccessToken);
        if fSuccess then
        begin
          pAllocateAndInitializeSid(SECURITY_NT_AUTHORITY, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, psidAdministrators);
          try
            for iCount := 0 to ptgGroups.GroupCount - 1 do
              if pEqualSid(psidAdministrators, ptgGroups.Groups[iCount].Sid) then
              begin
                Result := true;
                break;
              end;
          finally
            pFreeSid(psidAdministrators);
          end;
        end;
      finally
        FreeMem(ptgGroups);
      end;
    end;
  finally
    FreeLibrary(iDll);
  end;
end;

end.


Depois é só chamar a função 


CODE
Uses IsAdministrator;

procedure TForm1.Button1Click(Sender: TObject);
begin
   if IsAdmin = true then
      showmessage('O usuário logou como Administrador')
   else 
      showmessage('O usuário logou como Não Administrador')

end;

depois é só usar o comando Runas do windows pelo delphi, para executar o programa como administrador

http://www.microsoft.com/resources/documen...s.mspx?mfr=true

OBS: Funciona para o XP, para o Vista e Win7 tem que fazer algumas modificações

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

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;

Editado por Paulo Nobre
Link para o comentário
Compartilhar em outros sites

  • 0
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?

porque o Winsdows Vista e Win 7 passaram a ter o controle UAC, no XP não tem

http://todoespacoonline.com/post.php?id=143

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??

Essa mensagem aparece se a variavel foi declarada, mas não foi inicializada

exe: Var Num : Integer; // variavel num declarada

Num := 0; // variavel num inicializada

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.

lógica elementar: numa operação matematica o que é executado primeiro ?

lembra da prioridade ( ou hierarquia ) para os operadores aritméticos ?

procedure TForm1.Button1Click(Sender: TObject);

var i : real;

begin

i := 12 + 3 * 2 / 3;

showmessage(floattostr(i)); // 14

end;

primeiro a divisão, depois multiplicação, depois soma e depois subtração ..... mas se colocar parenteses ( ... ) o que será executado primeiro é o que estará dentro do parenteses

procedure TForm1.Button1Click(Sender: TObject);

var i : real;

begin

i := (12 + 3) * 2 / 3;

showmessage(floattostr(i)); // 10

end;

os resultados seriam diferentes

===========================================

então nesse caso:

If (Encerra = True) and (PrimeiraVez = True) then

os valores das 2 sentenças já são testados antes do operador and

nesse caso

If Encerra = True and PrimeiraVez = True then

o operador and é executado antes da segunda sentença ... seria o mesmo que

If Encerra = True or PrimeiraVez = True then

se não usar os parenteses .. entendeu ???

=============================================

OBS: A sua abordagem esta no lugar errado

procedure TfrmPrincipalDD.FormCreate(Sender: TObject);

existe um código que é rodado antes da criação de qualquer form do seu programa, ou seja, é o código que vai criar o seu form e não é na propriedade OnCreate dele ( Form )

e como voce gosta de desafio, tente descobrir onde voce encontra esse código... rs

isso te dará outra perspectiva sobre programação

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Olá Jhonas, obrigado por sua resposta, mas gostaria de perguntar mais o seguinte:

Em relação a:

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?

porque o Winsdows Vista e Win 7 passaram a ter o controle UAC, no XP não tem

http://todoespacoonline.com/post.php?id=143

Você quer dizer que com o meu código jamais conseguirei alcançar meus objetivos?

Só baixando o controle da UPC para o minimo?

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??

Essa mensagem aparece se a variavel foi declarada, mas não foi inicializada

exe: Var Num : Integer; // variavel num declarada

Num := 0; // variavel num inicializada

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.

If Encerra = True and PrimeiraVez = True then

o operador and é executado antes da segunda sentença ... seria o mesmo que

If Encerra = True or PrimeiraVez = True then

se não usar os parenteses .. entendeu ???

Entendi a explicação, não sabia deste detalhe. É o mal de quem quer se meter

a programar sem saber o básico primeiro.

OBS: A sua abordagem esta no lugar errado

procedure TfrmPrincipalDD.FormCreate(Sender: TObject);

existe um código que é rodado antes da criação de qualquer form do seu programa, ou seja, é o código que vai criar o seu form e não é na propriedade OnCreate dele ( Form )

e como voce gosta de desafio, tente descobrir onde voce encontra esse código... rs

isso te dará outra perspectiva sobre programação

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?

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?

Lá tem:

application.initialize

application.oncreat

application.run.

abraço

Paulo Nobre

Link para o comentário
Compartilhar em outros sites

  • 0

Você quer dizer que com o meu código jamais conseguirei alcançar meus objetivos?

Só baixando o controle da UAC para o minimo?

se voce leu o artigo, isso foi feito justamente para evitar que programas com virus sejam executados no micro sem seu consentimento ... pois muitos programas de virus utilizam o registry do windows.

Então no meu caso quando coloquei:

PrimeiraVez:=False; ela não foi inicializada?

Achei que variáveis do tipo Boolean poderiam ser inicializado com false ou true.

e podem ... as mensagens de Hints e Warnings são mensagens de alerta que podem ser mostradas ou não ... mas não interferem na execução do programa

http://www.delphibasics.co.uk/RTL.asp?Name=$Hints

http://www.delphibasics.co.uk/RTL.asp?Name=$Warnings

Entendi a explicação, não sabia deste detalhe. É o mal de quem quer se meter

a programar sem saber o básico primeiro.

isso voce aprende no curso básico de delphi .. rs

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?

Parece que voce descobriu onde o tesouro está enterrado ... rs

se eu quero executar algo, mesmo antes do programa criar o meu primeiro form, o lugar é lá

Project > View Source

mas voce deve tomar alguns cuidados nessa área ok ?

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
Tudo bem Jhonas,mas apenas uma observação: Não sou programador. O Delphi é apenas

um divertimento.

Muito modesto esse "menino".... B)

Ae Paulo, você é um grande programador, tenho acompanhado seus tópicos desde que entrei na SB em 2004.

Agora diz aí quais são os cuidados que devo ter na área source?

na verdade são cuidados simples, como:

- não apagar nenhuma linha que seja necessária pra inicialização do sistema;

- implemetar seu código no local certo;

- inicializar os forms no momento certo;

- etc....

Abs. Progr'amador

Editado por Progr'amador
Link para o comentário
Compartilhar em outros sites

  • 0

Muito modesto esse "menino"....

Ae Paulo, você é um grande programador, tenho acompanhado seus tópicos desde que entrei na SB em 2004.

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.

na verdade são cuidados simples, como:

- não apagar nenhuma linha que seja necessária pra inicialização do sistema;

- implemetar seu código no local certo;

- inicializar os forms no momento certo;

- etc....

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

Link para o comentário
Compartilhar em outros sites

  • 0

Paulo Nobre... o nosso amigo Progr'amador fez o que eu venho desejando a tempos ... mais participação dos nossos colegas no forum, mas a maioria prefere somente ver as respostas, do que tentar, dentro de seus conhecimenos ajudar a outros.

OBS: o código que te passei para testar se o usuario se logou como administrador ou não deve ser o seu ponto de partida ( muitas vezes uma mudança radical na sua lógica resolve o problema )

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
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..

É realmente, mas ae só você ir adicionando conforme a necessidade.

Tem gente que simplesmente copia tudo quem tem no uses de um Form comum.

Eu particalamente já fiz esse tipo de programação, adiciono o código necessário, ae vou debugando conforme o programa vai pedindo eu vou adicionando as units.

Paulo Nobre... o nosso amigo Progr'amador fez o que eu venho desejando a tempos ... mais participação dos nossos colegas no forum, mas a maioria prefere somente ver as respostas, do que tentar, dentro de seus conhecimenos ajudar a outros.

É o mal costume de ex-moderador :D

Na verdade, quem entra num fórum desse só pra ajudar outras pessoas, tenho certeza que é porque realmente gosta do que faz,

e Você é uma dessas pessoas, tenho visto que tens muito conhecimento no assunto.

Assim como o Paulo eu tambem passei muito tempo sem programar, e agora voltei a trabalhar na área.

Muita coisa tenho apredido aqui... na verdade nunca fiz curso de Delphi, meu primeiro professor em Delphi foi a SB.

Abs. Progr'amador

Editado por Progr'amador
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...