Blog com atividades voltadas ao ambiente de desenvolvimento utilizando a ferramenta de linguagem Delphi. Ao visitar o blog, encontrará dicas úteis para seu dia-a-dia atualizadas diariamente.
quarta-feira, 25 de março de 2009
Resolvendo expressões matemáticas no Delphi
(97+25)*(14/2+0.98)
Veremos que a partir da criação de uma rotina fixa através de uma function será possível executar toda esta expressão de uma única vez. No Delphi crie uma nova aplicação, altere o caption do formulário principal para "Resolvendo Expressões Matemáticas" e salva os arquivos em um diretório do seu computador. Arraste ao formulário dois componentes Label alterando suas propriedade caption para "Expressão Matemática" e "Dígitos após a vírgula". Arraste também dois componentes Edit (edtExpressao, edtDigitos) e remova o texto presente na propriedade Text. Por último adicione também um Button alterando o caption para "Resolver Expressão".
Acessando o código do formulário, declare na seção private a seguinte function, que será a responsável por resolver a expressão:
function CalculaExpressao(expressao: string; digitos: Byte): string;
Utilizando as teclas de atalho Shift + Ctrl + C crie a implementação para a função onde deverá incluir a seguinte codificação:
function TForm1.CalculaExpressao(expressao: string; digitos: Byte): string;
// Calculo de expressoes matematicas simples
// Suporta numeros inteiros, numeros reais, parenteses
var
z: Char;
ipos: Integer;
function StrToReal(chaine: string): Real;
var
r: Real;
Pos: Integer;
begin
Val(chaine, r, Pos);
if Pos > 0 then Val(Copy(chaine, 1, Pos - 1), r, Pos);
Result := r;
end;
function RealToStr(inreal: Extended; digits: Byte): string;
var
S: string;
begin
Str(inreal: 0: digits, S);
realToStr := S;
end;
procedure NextChar;
var
s: string;
begin
if ipos > Length(expressao) then
begin
z := #9;
Exit;
end
else
begin
s := Copy(expressao, ipos, 1);
z := s[1];
Inc(ipos);
end;
if z = ' ' then nextchar;
end;
function Expression: Real;
var
w: Real;
function Factor: Real;
var
ws: string;
begin
Nextchar;
if z in ['0'..'9'] then
begin
ws := '';
repeat
ws := ws + z;
nextchar
until not (z in ['0'..'9', '.']);
Factor := StrToReal(ws);
end
else if z = '(' then
begin
Factor := Expression;
nextchar
end
else if z = '+' then Factor := +Factor
else if Z = '-' then Factor := -Factor;
end;
function Term: Real;
var
W: Real;
begin
W := Factor;
while Z in ['*', '/'] do
if z = '*' then w := w * Factor
else
w := w / Factor;
Term := w;
end;
begin
w := term;
while z in ['+', '-'] do
if z = '+' then w := w + term
else
w := w - term;
Expression := w;
end;
begin
ipos := 1;
Result := RealToStr(Expression, digitos);
end;
Nesta codificação, a função recebe a expressão por completa e vai verificando a prioridade das operações de sinais a serem executadas bem como resolvendo parenteses e cálculos até que o resultado final seja obtido. A quantidade de dígitos após a virgula também pode ser controlada passando o valor como parâmetro para a função. Para utilizar a função, adicione ao evento OnClick do botão o seguinte código responsável por passar a expressão e quantidade de digitos informados nos campos Edit e retornar o resultado através de uma mensagem na tela do usuário.
A partir deste post, faça a implementação da rotina em seus sistemas ou implemente novos recursos. Abraço e até a próxima.
terça-feira, 24 de março de 2009
Histórias hilárias do cotidiano de um Suporte Técnico em Informática
Veja o que aconteceu em um Suporte Técnico de Informática. Esta é uma historia verídica que ocorreu em empresas famosas.
Segue o diálogo entre o ex-funcionário e o cliente da empresa:
- Help desk assistência, posso ajudar?
- Sim, bem.... estou tendo problema com o Word.
- Que tipo de problema?
- Bem, eu estava digitando e, de repente, todas as palavras sumiram.
- Sumiram?
- Elas desapareceram. Nada.
- Nada?
- Está preta. Não aceita nada que eu digite.
- Você ainda está no Word ou já saiu?
- Como posso saber?
- Você vê o Prompt C: na tela?
- O que é esse 'promte-se'?
- Esquece. Você consegue mover o cursor pela tela?
- Não há cursor algum. Eu te disse, ele não aceita nada que eu digite.
- Seu monitor tem um indicador de força?
- O que é monitor?
- É essa tela que parece com uma TV. Ele tem uma luzinha que diz quando está ligado?
- Não sei.
- Bom, olhe atrás do monitor, então veja aonde está ligado o cabo de força. Você consegue fazer isso?
- Acho que sim.
- Ótimo. Siga para aonde vai o cabo e me diga se ele está na tomada.
- Tá sim.
- Atrás do monitor, você reparou que existem dois cabos?
- Não.
- Bom, eles estão aí.. Preciso que você olhe e ache o outro cabo.
- Ok, achei.
- Siga-o e veja se ele está bem conectado na parte traseira do computador.
- Não alcanço!
- Hum. Você consegue ver se está?
- Não.
- Mesmo se você ajoelhar ou se debruçar sobre ele?
- Ah, não, tá muito escuro aqui!
- Escuro?
- Sim, a luz do escritório tá desligada, e a única luz que eu tenho vem da janela, lá do outro lado.
- Bom, acenda a luz então!
- Não posso.
- Por que não?
- Porque estamos sem energia.
- Estão... sem energia...?
Longa pausa...
- Ah! ok, descobrimos o problema agora! Você ainda tem a caixa de papelão e os manuais que vieram com o seu micro?
- Sim, estão no armário.
- Bom! Então, você desconecta o seu sistema, pega tudo, empacota e leva de volta para a loja.
- Sério?? O problema é tão grave assim?
- Sim, temo que seja.
- Bom, então tá. E o que eu digo na loja?
- Diga que você é BURRO demais pra ter um computador !!!
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
USUÁRIO: 'Não consigo imprimir. Cada vez que tento, o computador diz:
- 'Não é possível encontrar a impressora'. Já levantei a impressora e coloquei-a em frente ao monitor para ele ver, mas o computador continua dizendo que não consegue encontrá-la.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
SUPORTE: 'Serviço ao Manual da HP. Sérgio falando. Em que posso ser útil?'
USUÁRIO: 'Tenho uma impressora HP que precisa ser reparada.'
SUPORTE: 'Que modelo é?'
USUÁRIO: 'É uma Hewlett-Packard...'
SUPORTE: 'Isto eu já sei. Quero saber se é colorida ou preto e branco.'
USUÁRIO: 'É bege!'
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
SUPORTE: 'Bom dia. Posso ajudar em alguma coisa?'
USUÁRIO: 'Não consigo imprimir.'
SUPORTE: 'Pode clicar no 'Iniciar' e...'
USUÁRIO: 'Caaalma aí! Não responda assim muito tecnicamente.. Não sou o Bill Gates!'
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
USUÁRIO: ' De repente aparece uma mensagem na minha tela que diz 'Clique
Reiniciar'.... O que eu devo fazer?'
SUPORTE: 'O senhor aperte o botão solicitado, desligue e ligue novamente.' Sem pestanejar, o usuário desliga o telefone na cara do atendente e liga para o suporte novamente.
USUÁRIO: 'E agora o que eu faço?'
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
USUÁRIO: 'Tenho um grande problema. Um amigo meu colocou um protetor de tela no meu computador, mas a cada vez que mexo o mouse, ele desaparece!!!'
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
SUPORTE: 'Em que posso ajudar?'
USUÁRIO: 'Estou escrevendo o meu primeiro e-mail.'
SUPORTE: 'OK, qual é o problema?'
USUÁRIO: 'Já fiz a letra 'a'. Como é que se faz o circulozinho em volta dela pra fazer o tal arroba?'
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
SUPORTE: 'Suporte do se u Provedor de Internet, bom dia. O que deseja?'
USUÁRIO: 'Moço, a Internet também abre aos domingos?'
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Depois de um tempo falando com o atendente do suporte.
SUPORTE: 'O que tem do lado direito da tela?'
USUÁRIO: 'Uma samambaia!'
SUPORTE: silêncio...
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Agora esta última aconteceu comigo, enquanto prestava suporte para um sistema que acabei de instalar no cliente, e precisei enviar uma atualização para correção de layout conforme solicitação do cliente:
EU: por favor, descompacte o arquivo que acabei de lhe enviar na sua área de trabalho. Após vá em meu computador, selecione o disco local C:\ e abra a pasta do sistema. Cole o arquivo lá dentro.
USUÁRIO: já estou no meu computador, se quiser, posso usar o computador da minha funcionária. Acho que não entendi certo, como vou neste disco local C:\? Preciso abrir o computador para colocar o arquivo lá dentro, eu não vou saber isso...
- após eu dar risada por cerca de 10 minutos, tive que retomar a paciência e voltar a explicar tudo para meu cliente. Como diriam meus amigos, este seria um caso de desenhar o procedimento no Paint para que o usuário entenda... rsrs
Bom, depois de todas estas situações e aposto alguns risos, fique preparado para quando precisar prestar suporte para seus clientes. Abraço e até o próximo post.
sexta-feira, 13 de março de 2009
Exibir imagem no fundo do Form
Procedure TForm1.ImgFundoForm(CaminhoBMP:String; DistH, DistV:Integer); Var Imagem :TBitMap; begin Imagem := TBitMap.Create; Try Imagem.LoadFromFile(CaminhoBMP); Canvas.Draw(DistH,DistV,Imagem); Except On e: Exception do ShowMessage('Problemas ao escrever imagem:'+#13+e.message); end; end;
Para que a imagem seja de fato carregada, adicione ao evento OnClick do Button a seguinte linha de código, responsável pela configuração do OpenDialog, localização da imagem e execução da função.
Pronto, agora você poderá personalizar os formulários do seu sistema aplicando a eles imagens de fundo. Abraço e até a próxima...
quinta-feira, 12 de março de 2009
Tradução de palavras, frases, textos no MSN
Para iniciar suas traduções, basta que adicione o contato mtbot@hotmail.com à sua lista de contatos e inicie uma conversa. Trata-se de um robô que lhe fará uma simpática apresentação e oferecerá seus recursos de ajuda. A listagem de comandos poderá ser feita ao digitar "TBot ?", onde obterá a seguinte lista:
1 TBot lang - Mostrar línguas de tradução
2 TBot change - Selecionar línguas de tradução
3 TBot stop - Desligar o tradutor
4 TBot start - Ligar o tradutor novamente
5 TBot set - Selecionar sua língua preferida
6 TBot ? - Listar os comandos
Os idiomas de tradução disponíveis são:
1 Alemão
2 Chinês simplificado
3 Chinês tradicional
4 Coreano
5 Espanhol
6 Francês
7 Holandês
8 Inglês
9 Italiano
10 Japonês
11 Polonês
12 Português
13 Russo
14 Árabe
Bom, agora para qualquer dúvida de tradução, converse com o TBot, o seu robô tradutor.
Boas conversas e até a próxima.
Exportar relatórios em Rave Reports para PDF
Crie uma nova aplicação Delphi for Win32, e adicione os seguintes componentes:
RvProject (paleta Rave) - Integração com o projeto do relatório
RvSystem (paleta Rave) - Configurações do relatório
RvRenderPDF (paleta Rave) - Exportação do relatório para PDF
ClientDataSet (paleta Data Access) - Importação de XML com dados para o relatório
RvDataSetConnection (paleta Rave) - Ligação do DataSet para exibição dos campos na estrutura do Rave Reports
SaveDialog (paleta Dialogs) - Localizar destino de exportação do relatório
Button (paleta Standard) - altere Caption para "Exportar para PDF"
Para codificarmos então a exportação do relatório, adicione o bloco a seguir no evento OnClick do Button onde definimos as configurações do objeto SaveDialog e solicitamos ao usuário que informe um nome e local para que o relatório possa ser salvo. Em seguida, desabilitamos a opção de Preview exibida durante a execução de um relatório, definimos que o mesmo será renderizado para PDF, selecionamos o nome do relatório a ser executado e chamamos a ação.
begin
SaveDialog1.Filter := 'Arquivos PDF (*.pdf)|*.pdf';
SaveDialog1.DefaultExt := '*.pdf';
SaveDialog1.Execute;
if SaveDialog1.FileName <> '' then
begin
RvSystem1.SystemSetups := RvSystem1.SystemSetups - [ssAllowSetup];
RvSystem1.DefaultDest := rdFile;
RvSystem1.DoNativeOutput:= false;
RvSystem1.RenderObject:= rvRenderPDF1;
RvProject1.SelectReport('Report1',True);
RvSystem1.OutputFileName:= SaveDialog1.FileName;
rvproject1.Execute;
end;
end;
Ao final do processo, um arquivo PDF será salvo no destino escolhido, pronto para ser enviado por e-mail ou disponibilizado para download em sites Web.
Pela sua leitura muito obrigado, e até o próximo post.
quarta-feira, 11 de março de 2009
SQLConnection - utilizando arquivo de configurações
Adicionado e configurado um novo componente SQLConnection à sua aplicação, adicione em seu evento OnBeforeConnect (antes de conectar) o seguinte trecho de código:
procedure TDM.CONEXAOBeforeConnect(Sender: TObject);
var
Arquivo: TIniFile{uses IniFiles};
begin
Try
Arquivo:= TIniFile.Create(ExtractFilePath(Application.ExeName)+'CONF.ini');
with DM.CONEXAO do
begin
Params.Values['DATABASE'] := Arquivo.ReadString('DADOS','DATABASE','');
Params.Values['USERNAME'] := Arquivo.ReadString('DADOS','USERNAME','');
Params.Values['PASSWORD'] := Arquivo.ReadString('DADOS','PASSWORD','');
Arquivo.Free
end;
Except
ShowMessage('Não foi possivel conectar! Nenhum servidor disponível...');
End;
end;
Note que estamos criando um novo objeto de inicialização, o qual carregará do mesmo diretório onde encontra-se o executável da aplicação um arquivo "Conf.ini". Este arquivo por sua vez contém as configurações como endereço da base de dados, usuário do banco e senha. Atribuimos então os valores a estes parâmetros de configuração do SQLConnection, acessando os valores da seção "DADOS" e lendo qual valor está armazenado em cada uma das propriedades.
NOTA: Aconselho deixar a propriedade Connected do SQLConnection como False para evitar problemas de conexão.
Criando o Arquivo *.INI
A criação do arquivo de configurações é muito simples, basta que através do bloco de notas crie um novo documento, adicione a ele uma nova seção "[DADOS]" e dentro desta seção, vá adicionando as propriedade que serão lidas pela sua aplicação, ficando assim organizado:
[DADOS]
DATABASE=192.160.10.100/3050:C:\Banco\banco.fdb
USERNAME=SYSDBA
PASSWORD=*********
NOTA: Há diferentes maneiras de você informar o caminho da base de dados, levando em consideração a estrutura e a segurança da rede onde o mesmo será instalado. O uso do IP antecendo o caminho físico do banco é altamente recomendado, em casos do sistema rodar apenas em localhost, use o IP 127.0.0.1, seguido do caminho físico da base, em casos de possuir um servidor de banco de dados, utilize o IP do servidor seguido pelo caminho físico da base no servidor, assim:
192.160.10.100:C:\Banco\banco.fdb
Mas, se você usa a base de dados em rede, e o servidor da aplicação possui Firewall de acesso, será necessário a liberação de acesso à porta 3050 (conexão utilizada pelo Firebird) e passar a utilizar o número da porta junto ao endereço IP, assim:
192.160.10.100/3050:C:\Banco\banco.fdb
Bom, desta forma você conseguirá criar suas aplicações, instalar as mesmas em seus clientes sem necessidade de recompilar pelo motivo do caminho físico da base. Abraço e até o próximo post.
terça-feira, 10 de março de 2009
Verificar se programa está em execução
Aproveitando parte da rotina que postei no ínicio da semana sobre finalizar processos, criaremos uma rotina para apenas verificar se o processo existe ou não. Crie um novo projeto no Delphi, e declare já no code do projeto a seguinte função:
function TForm1.ProcessoExiste(ExeFileName: string): boolean;
const
PROCESS_TERMINATE=$0001;
var
ContinueLoop: BOOL;
FSnapshotHandle: THandle;
FProcessEntry32: TProcessEntry32{declarar Uses Tlhelp32};
begin
result := false;
FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
FProcessEntry32.dwSize := Sizeof(FProcessEntry32);
ContinueLoop := Process32First(FSnapshotHandle,FProcessEntry32);
while integer(ContinueLoop) <> 0 do
begin
if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) = UpperCase(ExeFileName))
or (UpperCase(FProcessEntry32.szExeFile) = UpperCase(ExeFileName))) then
begin
Result := true;
exit;
end;
ContinueLoop := Process32Next(FSnapshotHandle,FProcessEntry32);
end;
CloseHandle(FSnapshotHandle);
end;
NOTA: declare a uses Tlhelp32
A função será o principal agente para varedura dos processos, onde adicionamos a lista de processos para a memória e depois, através de um While percorremos todos eles, localizando a entrada desejada. Ao encontrar o processo desejado, alteramos o resultado da função para True e abandonamos o while.
Para mostrar o resultado na tela, adicione um componente Edit (Edit1) e um Button (Button1), adicionando o código a seguir ao evento OnClick do Button:
procedure TForm1.Button1Click(Sender: TObject);
begin
if ProcessoExiste(Edit1.Text) then
ShowMessage('Processo encontrado')
else
ShowMessage('Processo não existe');
end;
Pronto, execute o projeto e faça o teste para verificar se o processo do explorer por exemplo está rodando, conforme demostração.
Abraço... até o próximo post.
sexta-feira, 6 de março de 2009
Abrindo documentos Word no Delphi
Bem, no Delphi há disponível um componente chamado OleContainer, o qual permite que através de um ActiveX a interface dos programas seja carregada a partir do prórprio formulário da sua aplicação, valendo não apenas para Word, mas para outros aplicativos como Excel, PowerPoint, etc.
Crie uma nova aplicação Delphi for Win32, arraste com componente Panel organizando sua propriedade Align para AlTop e dentro deste, adicione dois componentes Button, alterando o Caption destes para "Abrir Documento" e "Criar Documento". Na área ainda disponível do formulário, adicione um componente OleContainer da paleta System e altere sua propriedade Align para alClient, para que ele use todo o espaço do formulário. Arraste também para a tela da paleta Dialogs um componente OpenDialog e outro SaveDialog.
Realizando a codificação, adicionaremos o seguinte código ao evento OnClick do botão "Abrir Documento", no qual o diálogo de busca de documentos será executado e ao selecionar um documento, a aplicação do Word será criada através do componente OleContainer e o documento carregado.
procedure TForm1.btAbrirClick(Sender: TObject);
begin
if OpenDialog1.Execute then
begin
Screen.Cursor := crHourGlass;
try
OleContainer1.CreateObjectFromFile(OpenDialog1.FileName, True);
OleContainer1.DoVerb(0);
finally
Screen.Cursor := crDefault;
end;
end;
end;
NOTA: Configure a propriedade Filter do OpenDialog permitindo apenas extensões relacionadas ao Word.
No botão "Criar Documento" adicione a lista de códigos a seguir, a qual é responsável por criar um novo objeto do tipo "Word Document" exibindo-o na tela e adicionando um texto a sua área.
procedure TForm1.btCriarClick(Sender: TObject);
begin
OleContainer1.CreateObject('Word.Document', False);
OleContainer1.AllowInPlace := True;
OleContainer1.DoVerb(ovPrimary);
OleContainer1.OleObject.Application.Selection.TypeText('Passagem do Texto para o Documento');
end;
Por último, precisamos que o documento também seja salvo quando saírmos do formulário, pois de nada adiantaria abrir o documento, permitir que alterações nele sejam feitas e não salvar as mesmas. Para isto, adicione ao evento OnDeactivate do OleContainer o seguinte código, que fará uma verificação relacionada ao nome do arquivo para identificar se o mesmo foi aberto ou criado, em seguida salva-o no computador.
procedure TForm1.OleContainer1Deactivate(Sender: TObject);
var
FileName : String;
begin
if OpenDialog1.FileName <> '' then
FileName := OpenDialog1.FileName
else
begin
if SaveDialog1.Execute then
FileName := SaveDialog1.FileName;
end;
if FileName <> '' then
self.OleContainer1.SaveAsDocument(OpenDialog1.FileName) ;
end;
NOTA: Configure a propriedade DefaultExt do SaveDialog para "*.doc". Configure também sua propriedade Filter.
Dessa forma, finalizo este post, deixando-lhe o desafio de criar aplicações Delphi integradas com demais ferramentas disponíveis em seu computador. Abraço e até o próximo post.
quinta-feira, 5 de março de 2009
Obter texto de uma página Web
Ao contrário de que você deve estar pensando, não importaremos o código fonte da página e depois remover as tags para limpar o texto, a rotina a seguir obterá apenas texto puro, ignorando a captura de qualquer tag HTML. Crie um novo projeto Delphi for Win32, adicione um componente Edit (edtNavigate) para que seja a barra de navegação, um Button com Caption "Navegar". Logo abaixo adicione um componente WebBrowser que usaremos para exibir a página Web em sua forma original, e de onde também iremos retirar o texto da página que está sendo exibida. Por último, adicione logo abaixo ao WebBrowser outro componente Button alterando o Caption para "Obter Texto" e um componente Memo onde iremos exibir o texto extraído da página Web. Altere a propriedade ScrollBars do Memo para ssBoth a fim de que sejam exibidas as barras de rolagem no sentido vertical e horizontal.
Para dar início ao processo de codificação, adicione ao botão "Navegar" a seguinte linha de código, que irá atribuir uma URL ao componente WebBrowser e exibir o conteúdo:
WebBrowser1.Navigate(edtNavega.Text);
Por último, adicionaremos o código ao botão "Obter Texto", que se trata de uma função disponibilizada no componente WebBrowser, a fim de extrair o conteúdo da página exibida.
memo1.Text := WebBrowser1.OleObject.Document.documentElement.innerText;
Pronto, execute agora seu sistema, digite uma URL válida na barra de navegação e exiba o conteúdo da página na tela. Após carregada a página, clique sobre o botão obter texto e observe que todo o texto foi capturado e jogado ao componente Memo, onde poderia ser salvo em uma base de dados ou qualquer outra ação necessária.
Obrigado pela leitura, até a próxima.
quarta-feira, 4 de março de 2009
Finalizar Processos
Criando um novo projeto, altere o Caption do formulário para "Fechar Programas" e arraste para ele um componente Label alterando Caption para "Digite o nome do Processo", um componente Edit (edtProcesso) e um componente Button com Caption "Finalizar Processo". Antes de codificar o evento OnClick do botão, vá ao código e declare na seção Private a seguinte função que receberá por parâmetro o nome do executável:
function Finalizaprocesso(ExeFileName: string): integer;
Na implementação da função, adicione o código a seguite:
function TForm1.Finalizaprocesso(ExeFileName: string): integer;
const
PROCESS_TERMINATE=$0001;
var
ContinueLoop: BOOL;
FSnapshotHandle: THandle;
FProcessEntry32: TProcessEntry32{declarar Uses Tlhelp32};
begin
result := 0;
FSnapshotHandle := CreateToolhelp32Snapshot
(TH32CS_SNAPPROCESS, 0);
FProcessEntry32.dwSize := Sizeof(FProcessEntry32);
ContinueLoop := Process32First(FSnapshotHandle,
FProcessEntry32);
while integer(ContinueLoop) <> 0 do
begin
if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) = UpperCase(ExeFileName))
or (UpperCase(FProcessEntry32.szExeFile) = UpperCase(ExeFileName))) then
Result := Integer(TerminateProcess(OpenProcess(
PROCESS_TERMINATE, BOOL(0),
FProcessEntry32.th32ProcessID), 0));
ContinueLoop := Process32Next(FSnapshotHandle,FProcessEntry32);
end;
CloseHandle(FSnapshotHandle);
end;
A função irá localizar o processo, e quando localizado irá finalizá-lo.
Para executar a função, basta que adicione ao evento OnClick do botão uma chamada ao código, passando para o parâmetro o valor digitado no Edit. Antes de finalizar o processo, ainda solicitamos a confirmação ao usuário.
if Application.MessageBox('Deseja mesmo finalizar este processo?','Finalizar processo',MB_YESNO) = idYes then
Finalizaprocesso(edtProcesso.Text)
Por ora seria isto, abraço e até o próximo post.