Fórum executar aplicativo em delphi toda vez que ligar O PC #257269
04/11/2004
0
Obrigado
Marco Salles
Curtir tópico
+ 0Posts
04/11/2004
Gilvanj
Gostei + 0
05/11/2004
Oscar Candido
uses registry;
var reg:TRegIniFile;
procedure TForm1.FormCreate(Sender: TObject);
var
s,s2:string;
begin
Reg:=TRegIniFile.Create(´LloydSoft´);
{HKEY_USERS\.DEFAULT\Software\Microsoft\Windows\CurrentVersion\Run}
S:=ExtractFileDir(Application.ExeName);
S2:=ExtractFileName(Application.ExeName);
S:=S+´\´+S2;
reg.RootKey:=HKEY_USERS;
reg.Openkey (´\.DEFAULT\Software\Microsoft\Windows\CurrentVersion´,false);
reg.WriteString(´Run´, ´Logo´, s);
button1.click;
end;Gostei + 0
05/11/2004
Marco Salles
Sim, isto resolveria o problema :lol: ..É que me expressei mau :( ..Na verdade, eu nao necessito que todo o aplicativo seje executado, mas sim , um [b:4bcf76eb66]fragmento de código desse aplicativo[/b:4bcf76eb66]....E Um código que atualiza diariamente as informações de um banco de horas ou toda vez que o micro , for ligado, ...Mas isto e so [b:4bcf76eb66]uma parte do código [/b:4bcf76eb66]do aplicativo ...Pensei como saida escrever este fragmento de código em um outro aplicativo e coloca-lo no mesmo diretório, do aplicatido principal....So nao sei se esta e a melhor saída...Entendeu :?: :?:
Quanto ao meu amigo Oscar Candido:
Toda informaçõa e muito util a meu ver..So por gentileza me responda..Aonde a gente coloca este código :?: :?: ..e como a gente o executa :?: :?: Tem Reversão :?: :?: Infelismente , para mim , ficou meio no ar esta sugestão :cry: :cry: ..Mas teria enorme prazer de entende-la
Obrigado
Gostei + 0
05/11/2004
Gilvanj
c:\> meuprog
Executaria o seu programa normalmente. Já:
c:\> meuprog at
Neste caso, a presença de ´at´ na linha de comando indicaria pra vc executar algum código específico. Dessa forma, vc poderia editar o atalho do windows, adicionando este parâmetro.
Para tratar este tipo de funcionamento (fazer a leitura de parâmetros), verifique os comandos ParamCount e ParamStr.
Ah, e sobre a sugestão do Oscar... este trecho de código configuraria seu programa para ser executado logo após entrar no Windows..
Gostei + 0
06/11/2004
Marco Salles
Isto :D . Joia.. :D Fui no Helphi do Delphi..Apesar de nao saber nada em ingles :oops: , fui ao menos tentar :!: ..Mas nao saber ingles realmente as coisas ficam difíceis :oops: ... E Alem do mais nen Executar o exemplo do Help Consegui <[b:2b54dad1cd] Da Erro , Nen Compila[/b:2b54dad1cd] :cry: >
procedure TForm1.FormCreate(Sender: TObject); var i: Integer; for i := 0 to ParamCount – 1 do begin if LowerCase(ParamStr(i)) = ´beep´ then Beep(10000,1000) else if (LowerCase(ParamStr(i)) = ´exit´ then Application.Terminate; end; end;
Então amigo Gilvan se importaria em aprofundar um pouco mais na sua Dica:::Por exemplo, suponha que o Fragmento do código que eu quero executar Toda vez que eu ligar o Micro Seje:
procedure TForm1.Button1Click(Sender: TObject); begin showmessage(´Obrigado Amigo´); end;
Como Faria :oops: :?: :?: :?:
Gostei + 0
06/11/2004
Gilvanj
Veja o arquivo de projeto abaixo. Antes de criar a form principal do projeto é verificado se há algum parâmetro foi informado na linha de comando. Isto é feito com a instrução ´if ParamCount > 0´. Se vc chamar seu programa informando um ou mais parâmetros, ParamCount retornará a quantidade de parâmetros informados.
program Project1;
uses
Forms, Dialogs, SysUtils,
unit1 in ´unit1.pas´ ;
{$R *.res}
begin
Application.Initialize;
if ParamCount > 0 then
begin
if UpperCase(ParamStr(1))=´AT´ then
begin
ShowMessage(´Olá amigo´);
end;
end
else
begin
Application.CreateForm(TForm1, Form1);
Application.Run;
end;
end.Em seguida é feito o teste:
if UpperCase(ParamStr(1))=´AT´ then...
Este comando verificará se o primeiro parâmetro que foi informado é ´AT´. Em caso afirmativo, é executado um procedimento específico, no caso, mostrar apenas uma mensagem na tela. Em seguida o programa é finalizado. No caso do parâmetro não ter sido informado, o fluxo normal do programa é executado.
No seu exemplo, vc sugeriu chamar o código de programa do método Button1Click de TForm1.
O procedimento mantém-se o mesmo que exposto acima, a diferença é que será necessário criar uma instancia de TForm1, visto que o método é desta classe.
Gostei + 0
06/11/2004
Gilvanj
Na verdade, o teste:
if UpperCase(ParamStr(1))=´AT´ then
Nem precisaria ser executado, isto é, vc poderia assumir de que, seja lá qual for o parâmetro informado, vc executará um procedimento especial. Caso não seja passado parâmetro algum, o programa segue o fluxo normal.
Gostei + 0
06/11/2004
Marco Salles
Acho que é isso mesmo...[b:c29812e3f3]Mas para Ficar Dez[/b:c29812e3f3], o Fragmento de código que eu quero Executar e como voce mesmo Disse, esta num Botao do [b:c29812e3f3]Form[/b:c29812e3f3]... Nada que pareça mostruoso , mas o procedimento é grande e a gente nao gosta de ficar repetindo códigos ao londo do aplicativo..Não por preguiça(Pq e so colar e copiar),mas por questao de legibilidade evitamos a duplicidade.....Voce tocou nun ponto chave quando disse:::
[b:c29812e3f3]será necessário criar uma instancia de TForm1, visto que o método é desta classe. [/b:c29812e3f3]..Mas como podemos fazer isto de maneira eficaz ja que o form nen foi criado ainda :?: :?: :oops: :oops: :oops:
Acho que agora so ta faltando Isto :lol: ..Eta :P :P
Desde ja meus agradecimentos...
Gostei + 0
06/11/2004
Gilvanj
Eis um exemplo:
if UpperCase(ParamStr(1))=´AT´ then begin Form1 := TForm1.Create(Application); try // Agora sim é possível chamar Button1Click Form1.Button1Click(Nil); finally Form1.Free; end; // ShowMessage(´Oi´); end;
Observe que uma instacia de TForm1 é carregada porém não é exibida para o usuário, visto que nem Show ou ShowModal estão sendo chamados. Após executar o procedimento desejado (Button1Click) a instância de TForm1 (Form1) é liberada (Free). Se vc tiver procedimentos de carga de dados na tela, como por exemplo, no FormShow, vc também poderá chamá-lo explicitamente antes de Button1Click, para alimentar a tela com os dados. Não esquecer de que como a form não é apresentada para o usuário, nenhum comando de posicionamento em tela (como por exemplo, SetFocus) poderá ser executado.
Gostei + 0
08/11/2004
Marco Salles
procedure TForm1.Button1Click(Sender: TObject); begin ShowMessage(´Foi´); end; procedure TForm1.Button2Click(Sender: TObject); begin showMessage(´Executou o procedimento´); end;
Meu Projeto Esta Assim:
begin Application.Initialize; if ParamCount > 0 then begin if UpperCase(ParamStr(1))=´AT´ then begin Form1 := TForm1.Create(Application); try // Agora sim é possível chamar Button1Click Form1.Button2Click(Nil); finally Form1.Free; end; end; end else Application.CreateForm(TForm1, Form1); Application.Run; end.
Com Voce Pode Perceber , é para Executar o Evento[b:cb854296cc] OnClick Do Botão 2[/b:cb854296cc], Mas ao Iniciar o Meu Computaor Aparece a Mensagem Do [b:cb854296cc]Botão1[/b:cb854296cc]..O Que Será Que Eu Estou Fazendo De Errado :oops: :oops: :oops:
Gostei + 0
09/11/2004
Gilvanj
Tente depurar o programa para ver onde pára o programa ao dar um F7 em Button2Click.
Gostei + 0
09/11/2004
Marco Salles
[b:6868e44725]codigo inicial:[/b:6868e44725]
begin Application.Initialize; if ParamCount > 0 then begin if UpperCase(ParamStr(1))=´AT´ then begin Form1 := TForm1.Create(Application); try // Agora sim é possível chamar Button1Click Form1.Button2Click(Nil); finally Form1.Free; end; end; end else Application.CreateForm(TForm1, Form1); Application.Run; end.
Então retirei este cógido ... Ficando assim::
begin Application.Initialize; if ParamCount > 0 then begin Form1 := TForm1.Create(Application); try // Agora sim é possível chamar Button1Click Form1.Button2Click(Nil); finally Form1.Free; end; end else Application.CreateForm(TForm1, Form1); Application.Run; end.
E Agora deu certo :cry: :cry: .. So para embananar ainda mais o, voltei novamente como o código do If e tambem deu certo.... Xiiiiiiiiiiiiiiiiiiiiiii
Vai entender :!: :!: :!:
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)