Vamos precisa de mais um TForm. Clique no botão NewForm, selecione o novo form e no OI edite as seguintes opções:
Caption - Editar
Height - 160
Name - fEdita
Width - 185
Clique em Save, e salve como uEdita.pas
Agora, vamos ganhar tempo: Selecione no fPrincipal o objeto GroupBox1, e dê um CTRL C para copiar. Logo em seguida selecione o fEdita, e dê um CTRL V. Observer abaixo como ficou:
Modifique esses dados no OI para o fEditar / GroupBox1:
Caption - Editar
Modifique esses dados no OI para o fEditar / butIns:
Caption - Editar
Para chamar esse form, clique duas vezes no componente Popup1 so fPrincipal, clique duas vezes na palavra Editar.
No código, coloque assim:
procedure TfPrincipal.Editar1Click(Sender: TObject);
begin
fEdita.ShowModal;
end;
Precisamos preencher esses edits do fEdita com os valores selecionados no fPrincipal. Faremos o seguinte:
No mesmo evento acima, vamos já preencher esses dados. Observe o
código abaixo:
procedure TfPrincipal.Editar1Click(Sender: TObject);
begin
//preenche os edits
fEdita.edtNome.Text:= gridver.Cells[0,gridver.Row];
fEdita.edtTel.Text:= gridver.Cells[1,gridver.Row];
fEdita.ShowModal;
end;
E no fEdita precisamos guardar o número antigo do telefone para poder fazer o update no mysql. Criarei uma variável global. Observe:
var
fEdita: TfEdita;
deletar: string; //telefone antigo
implementation
{$R *.xfm}
Selecione o fEdita, vá no OI e em events clique duas vezes na opção onShow. Observe:
procedure TfEdita.FormShow(Sender: TObject);
begin
deletar:= edtTel.Text;
end;
Dessa forma, assim que o form é aberto o valor do telefone selecionado é inserido na variável deletar, de forma global.
Editando
Clique duas vezes no botão Editar (butIns do fEditar): Digite o código:
procedure TfEdita.butInsClick(Sender: TObject);
begin
//confirma se deseja editar ou não:
if messagedlg('Deseja realmente editar o telefone ' + deletar,mtConfirmation,[mbYes,mbNo],0)=mrYes then
begin
fPrincipal.sql.SQL.Text:= 'update telefones set agenda_nome = ' + quotedstr(trim(edtNome.Text)) + ' , agenda_tel = ' + quotedstr(trim(edtTel.Text)) + ' where agenda_tel = ' + quotedstr(deletar);
fPrincipal.sql.ExecSQL(True);
self.Close;
fPrincipal.verdados(1);
end;
end;
E acabamos, compile e distribua para seus amigos :)
Como podem ter notado, criei a procedure verdados() com um parâmetro integer, deforma que fica mais fácil para inserir mais funções. Basta trocar o 1 por outro número qualquer e editar no fonte para executar o que você quiser de acordo com o número que foi escolhido.
Esse exemplo que criei te dará base para criar infinitas coisas mais complexas, use sua imaginação :)
Vida longa ao software livre.