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

Inicialização Do Windows


Guest Valdecir Peres

Pergunta

Guest Valdecir Peres

Alguém pode me ajudar com este artigo, pois não consegui copilar o programa

Bom, nesse artigo, vou mostrar com fazer seu programa iniciar juntamente com o Windows.

Adiciona na Uses da Unit 'Registry'

e depois:

Procedure CriaStartup(NomeDoPrograma, LocalDoPrograma: String);

var

Reg : TRegistry;

Begin

Reg := TRegistry.Create;

Reg.RootKey := HKEY_CURRENT_USER;

// foi adicionado na RootKey o valor HKEY_CURRENT_USER para ser iniciado o programa apenas se for iniciado o usuário atual. Para ser iniciado com todos usuarios, troque o HKEY_CURRENT_USER por HKEY_LOCAL_MACHINE

Reg.RootKey('SOFTWAREMicrosoftWindowsCurrentVersionRun', False);

Reg.WriteString(NomeDoPrograma, LocalDoPrograma);

Reg.CloseKey;

Reg.Free;

End;

Demais artigos incluidos por Jeferson Jose dos Santos Junior

Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 0

Estranho!

Certifique-se que realmente não esta lá, abre o msconfig (no execultar digite msconfig), na guia Inicializar

Porque, eu entendo que esse Inicializar do menu Programa inicia depois do iniciar do registro e o Interbase está no registro, ou não?

P.S. Valdecir, que tal você se Registrar aqui no SB.

Abs. Progr'amador.

;)

Link para o comentário
Compartilhar em outros sites

  • 0
Certifique-se que realmente não esta lá, abre o msconfig (no execultar digite msconfig), na guia Inicializar

Cara o que esta no inicializar do msconfig e o executável que está na pasta de inicializar, porque o registro que o sistema criou eu apaguei através do regedit.

Porque, eu entendo que esse Inicializar do menu Programa inicia depois do iniciar do registro e o Interbase está no registro, ou não?

Cara a inicialização do Interbase eu não sei quando acontece.

Registrei-me no SB, obrigado pela dica.

Abraços

Valdecir

Link para o comentário
Compartilhar em outros sites

  • 0
Pessoal deu pau, o sistema está iniciando junto com o Windows, só que ele inicia antes do Interbase, e recebo a seguinte mensagem “ UNAVAILABLE DATABASE “.
Opa, esse erro é exceção? porque se for dá pra resolver, é só ficar tentando fazer a primeira operação que o programa faz com o banco com um try, até que não ocorra mais exceção.
Link para o comentário
Compartilhar em outros sites

  • 0

Cara e como fazer isto, a Unit completa é esta, tem como você me ajudar

    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure BTcancelarClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    procedure BTiniciarsmsClick(Sender: TObject);
    Procedure CriaStartup(LembreteDoc : String);
    procedure DBGrid2DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    procedure DBGrid3DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FRlembrdoc: TFRlembrdoc;

implementation

{$R *.dfm}

Procedure TFRlembrdoc.CriaStartup(LembreteDoc : String);
var Reg : TRegistry;
Begin
  Reg := TRegistry.Create;
  Reg.RootKey := HKEY_LOCAL_MACHINE;
  Reg.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Run', True);
  Reg.WriteString(LembreteDoc, '"' + ParamStr(0) + '"');
  Reg.CloseKey;
  Reg.Free;
End;

procedure TFRlembrdoc.FormClose(Sender: TObject; var Action: TCloseAction);
begin
   TBcaddoc.Close;
   TBcadequip.Close;
   TBcadextintor.Close;
   IBContrSMS.Connected:=False;
   Action := caFree;
   FRlembrdoc := NIL;
end;

procedure TFRlembrdoc.BTcancelarClick(Sender: TObject);
begin
  Application.Terminate;
end;

procedure TFRlembrdoc.FormShow(Sender: TObject);
begin
  IBContrSMS.Connected:=True;
  If (not IBTransaction1.InTransaction)then
  IBTransaction1.StartTransaction;
//  CriaStartup('LembreteSMS');
  Edit1.Text := DateToStr(Date);

  TBcaddoc.Open;
  TBcaddoc.IndexFieldNames := 'DTAVVCTO';
  TBcaddoc.Filtered:=False;
  TBcaddoc.Filter:= 'DTAVVCTO <'+QuotedStr(FormatDateTime('MM/dd/yyyy', StrToDate(Edit1.Text)));
  TBcaddoc.Filtered:=True;

  TBcadequip.Open;
  TBcadequip.IndexFieldNames := 'DTAVCALIBR';
  TBcadequip.Filtered:=False;
  TBcadequip.Filter:= 'DTAVCALIBR <'+QuotedStr(FormatDateTime('MM/dd/yyyy', StrToDate(Edit1.Text)));
  TBcadequip.Filtered:=True;

  TBcadextintor.Open;
  TBcadextintor.IndexFieldNames := 'DTAVRECARGA';
  TBcadextintor.Filtered:=False;
  TBcadextintor.Filter:= 'DTAVRECARGA <'+QuotedStr(FormatDateTime('MM/dd/yyyy', StrToDate(Edit1.Text)));
  TBcadextintor.Filtered:=True;

  If (TBcaddocDTAVVCTO.Text = '') And (TBcadequipDTAVCALIBR.Text = '') And (TBcadextintorDTAVRECARGA.Text = '') then
  Application.Terminate;
end;

procedure TFRlembrdoc.DBGrid1DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
begin
   If TBcaddoc.Fieldbyname('DTAVVCTO').Value<Date then
   Begin
   DBGrid1.Canvas.Font.Color := clRed;
   DBGrid1.DefaultDrawDataCell(Rect, DBGrid1.columns[datacol].field, state);
   end;
end;

procedure TFRlembrdoc.BTiniciarsmsClick(Sender: TObject);
begin
  WinExec('C:\Documents and Settings\Administrador\Meus documentos\Valdecir\VdlSistemasfontes\VDL - Controle SMS\ControleSMS.exe', SW_SHOWNORMAL);
  FRlembrdoc.Close;
end;

procedure TFRlembrdoc.DBGrid2DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
begin
   If TBcadequip.Fieldbyname('DTAVCALIBR').Value<Date then
   Begin
   DBGrid2.Canvas.Font.Color := clRed;
   DBGrid2.DefaultDrawDataCell(Rect, DBGrid2.columns[datacol].field, state);
   end;
end;

procedure TFRlembrdoc.DBGrid3DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
begin
 if ((TBcadextintor.Fieldbyname('DTAVRECARGA').Value<Date) or (TBcadextintor.Fieldbyname('DTAVTESTEHIDR').Value<Date)) then
   Begin
   DBGrid3.Canvas.Font.Color := clRed;
   DBGrid3.DefaultDrawDataCell(Rect, DBGrid3.columns[datacol].field, state);
   end;
end;

end.]

Abraços

Valdecir

Link para o comentário
Compartilhar em outros sites

  • 0

Valdecir, poste código sempre dentro de caixa de código. Edite o seu post, selecione o código e clique no botão # em cima da caixa de texto que você está escrevendo.

Cara e como fazer isto, a Unit completa é esta, tem como você me ajudar.

Eu não entendo nada de banco de dados, mas perguntei se o erro que aparece tem alguma coisa do tipo "...raised exception...". Se for isso tem como resolver. Se não for também tem mas não me ocorre nada no momento.

Abraço.

Link para o comentário
Compartilhar em outros sites

  • 0

Acho que o Interbase deve estar entrando como um serviço. Se for isso, vá no Interbase Manager, dê Stop no Banco, desflegue a caixa: Run Interbase as a service, clique em Startup Mode [Automatic], dê Start no Banco.

Vá no autorun do regedit e deverá parecer: Interbase Guardian.

Coloque seu programa abaixo dele.

Link para o comentário
Compartilhar em outros sites

  • 0

Caso não funcione a dica do mestre s3c, você tira uma fotografia desse erro e manda pro meu e-mail -> thalespo@terra.com.br. Porque você não tá sabendo muito bem explicar que tipo de erro é esse.

Abraço.

Link para o comentário
Compartilhar em outros sites

  • 0

Este erro: Unavailable Database ocorre comigo também quando o Banco não está no ar e o programa tenta a conexão. Se o Banco entra como serviço e o programa está no autorun, parece que o programa entra antes que o serviço.

Aproveitando, alguém saberia a sequência de execuções na inicialização do Windows ?

Seria: Run no regedit, Startup, Services ?

Link para o comentário
Compartilhar em outros sites

  • 0
Este erro: Unavailable Database ocorre comigo também quando o Banco não está no ar e o programa tenta a conexão. Se o Banco entra como serviço e o programa está no autorun, parece que o programa entra antes que o serviço.
Mas por favor responda a minha pergunta: Esse erro é exceção?
Link para o comentário
Compartilhar em outros sites

  • 0

Então deveria ser assim->

O primeiro comando que é executado no banco é o do OnFormShow ->

var
  BaseDown : boolean;
begin
  baseDown:=True;
  repeat
  try
    IBContrSMS.Connected:=True;
    BaseDown:=false;
  except BaseDown:=true;
  end;
  Sleep(400);
  until not(BaseDown);
  .
  .
  .
end;

Ou estou errado?

Link para o comentário
Compartilhar em outros sites

  • 0

Sim, dessa forma o programa esperaria o Banco entrar no ar e as exceções não seriam lançadas.

Ps: Seria bom colocar um contador no caso do Banco não iniciar.

var iVezes:Byte;
begin
  iVezes := 0;
  While not IBContrSMS.Connected and (iVezes < 25) do
  begin
    try
      IBContrSMS.Open;
    except
      Inc(iVezes);
      Sleep(400);
    end;
  end;
  if not IBContrSMS.Connected then
    IBContrSMS.Open; // Força a exceção para ver o erro
end;

Link para o comentário
Compartilhar em outros sites

  • 0

Bom, no caso da primeira exceção ele retorna do procedimento não é isso? Porque no caso eu pensei em colocar um exit depois da primeira exceção já que não há nada a fazer depois, mas acho que não deve ser necessário, né?

Outra dúvida, quando ele for ler a propriedade connected no inicio do loop ele já não vai causar uma exceção se o banco não estiver presente?

Link para o comentário
Compartilhar em outros sites

  • 0
Bom, no caso da primeira exceção ele retorna do procedimento não é isso?
Não, ele fica tentando até 25 vezes.
Porque no caso eu pensei em colocar um exit depois da primeira exceção já que não há nada a fazer depois, mas acho que não deve ser necessário, né?
Se quiser abortar na primeira vez, ele já está fazendo com o código que ele postou.
Outra dúvida, quando ele for ler a propriedade connected no inicio do loop ele já não vai causar uma exceção se o banco não estiver presente?
Não, a propriedade é do objeto TIBDatabase; daria erro se o objeto não estivesse instanciado.
Link para o comentário
Compartilhar em outros sites

  • 0
Não, ele fica tentando até 25 vezes. Se quiser abortar na primeira vez, ele já está fazendo com o código que ele postou.
Desculpe, me expressei mal. eu perguntei se ele retorna do procedimento assim que ocorre uma exceção fora do try, ou seja, quando você força a exceção. Entendeu agora?

Não, a propriedade é do objeto TIBDatabase; daria erro se o objeto não estivesse instanciado.

quer dizer que ele não vai rodar algum método do tipo GetConnected e não vai dar erro de UNAVAILABLE DATABASE? Tem certeza?

Pena que o rapaz não se interessou mais.

ps. Eu esperaria umas 200 vezes, quem sabe o banco não teve tempo ainda.

Link para o comentário
Compartilhar em outros sites

  • 0

Pessoal desculpe a demora, pois estava na correria.

Funcionou com esta dica do s3C deu, agora está aparecendo o ícone do Interbase Guardian na barra de tarefa.

Acho que o Interbase deve estar entrando como um serviço. Se for isso, vá no Interbase Manager, dê Stop no Banco, desflegue a caixa: Run Interbase as a service, clique em Startup Mode [Automatic], dê Start no Banco.

Vá no autorun do regedit e deverá parecer: Interbase Guardian.

Coloque seu programa abaixo dele

Mas seria mais viável fazer como estes postes que vocês colocaram depois

Se eu colocar o sistema em rede será que vai funciona ?? no momento estou usando banco local

Abraços

Valdecir

;)

Link para o comentário
Compartilhar em outros sites

  • 0

Thales

Desculpe, me expressei mal. eu perguntei se ele retorna do procedimento assim que ocorre uma exceção fora do try, ou seja, quando você força a exceção. Entendeu agora?
Sempre pensei que qualquer exceção sem tratamento fosse igual a um Exit. Não é isso ?
quer dizer que ele não vai rodar algum método do tipo GetConnected e não vai dar erro de UNAVAILABLE DATABASE? Tem certeza?
Sim, se você ler Connected ele somente retorna o status(true/false); se você setar Connected é a mesma coisa que fazer: IBContrSMS.Open

VDLR

Mas seria mais viável fazer como estes postes que vocês colocaram depois
Bom, ai vai de cada projeto. Quando ele não entra como serviço, coloca um ícone na task e você facilmente consegue ver suas propriedades.
Se eu colocar o sistema em rede será que vai funciona ?? no momento estou usando banco local
Utilizo conexões em redes mas é de outra forma; espero que algum colega possa lhe ajudar sobre isso.
Link para o comentário
Compartilhar em outros sites

  • 0
Legal pessoal testei da outra forma e funcionou também, agora só preciso ver como por isto em rede, mas acho melhor iniciar um novo tópico.
Tenho uma sugestão pra você: Leia o livro "Delphi a bíblia" todo e depois venha discutir.
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,1k
    • Posts
      651,8k
×
×
  • Criar Novo...