Criando Objetos em execução
Galera, uso a seguinte procedure no meu programa para criar um formzinho e exibir alguns valores para edição...
Mas tenho um padrao de quando se pressiona pula par ao proximo campo...
e se for o ultimo fecha o Form...
Então preciso incluir uma procedure no OnKeyDown do DBEdit...alias, dos dois
além do KeyPress para testar as teclas digitadas...
Como poderia fazer isso...
procedure TfrmMontagemInterna.GridItensCompDblClick(Sender: TObject);
var
FrmQtd : TForm;
lblPeso, lblQtd : TLabel;
dbedtQtd, dbedtPeso : TDBEdit;
begin
qryItensComp.Edit;
FrmQtd := NIl;
lblPeso := NIL;
lblQtd := NIL;
dbedtQtd := NIL;
dbedtPeso := NIL;
Try
(*Cria o Formulário de QTD *)
FrmQtd := TForm.Create(Nil);
FrmQtd.Width := 251;
FrmQtd.Height := 77;
FrmQtd.Caption := ´Alteração de Quantidade e Peso´;
FrmQtd.Top := Mouse.CursorPos.Y;
FrmQtd.Left := Mouse.CursorPos.X;
FrmQtd.KeyPreview := True;
FrmQtd.BorderStyle := bsToolWindow;
(*Cria o Label de Qtd*)
lblQtd := TLabel.Create(NIl);
lblQtd.Parent := FrmQtd;
lblQtd.Left := 24;
lblQtd.Top := 8;
lblQtd.Width := 70;
lblQtd.Height := 13;
lblQtd.Font.Color := clBlue;
lblQtd.Font.Style := [fsBold];
lblQtd.Caption := ´Quantidade:´;
(*Cria o Label de Peso*)
lblPeso := TLabel.Create(Nil);
lblPeso.Parent := FrmQtd;
lblPeso.Left := 152;
lblPeso.Top := 8;
lblPeso.Width := 33;
lblPeso.Height := 13;
lblPeso.Caption := ´Peso:´;
lblPeso.Font.Color := clBlue;
lblPeso.Font.Style := [fsBold];
(*Cria um TDBEdit de QTD*)
dbedtQtd := TDBEdit.Create(Nil);
dbedtQtd.Parent := FrmQtd;
dbedtQtd.Width := 121;
dbedtQtd.Left := 0;
dbedtQtd.Top := 24;
dbedtQtd.DataSource := dtsItensComp;
dbedtQtd.DataField := ´QTD´;
(*Cria um TDBEdit de Peso*)
dbedtPeso := TDBEdit.Create(Nil);
dbedtPeso.Parent := FrmQtd;
dbedtPeso.Left := 120;
dbedtPeso.Top := 24;
dbedtPeso.Width := 121;
dbedtPeso.Height := 21;
dbedtPeso.DataSource := dtsItensComp;
dbedtPeso.DataField := ´peso´;
(*Mostra o Form*)
FrmQtd.ShowModal;
finally
lblPeso.Free;
lblQtd.Free;
dbedtQtd.Free;
dbedtPeso.Free;
FrmQtd.Free;
end;
end;
Mas tenho um padrao de quando se pressiona pula par ao proximo campo...
e se for o ultimo fecha o Form...
Então preciso incluir uma procedure no OnKeyDown do DBEdit...alias, dos dois
além do KeyPress para testar as teclas digitadas...
Como poderia fazer isso...
procedure TfrmMontagemInterna.GridItensCompDblClick(Sender: TObject);
var
FrmQtd : TForm;
lblPeso, lblQtd : TLabel;
dbedtQtd, dbedtPeso : TDBEdit;
begin
qryItensComp.Edit;
FrmQtd := NIl;
lblPeso := NIL;
lblQtd := NIL;
dbedtQtd := NIL;
dbedtPeso := NIL;
Try
(*Cria o Formulário de QTD *)
FrmQtd := TForm.Create(Nil);
FrmQtd.Width := 251;
FrmQtd.Height := 77;
FrmQtd.Caption := ´Alteração de Quantidade e Peso´;
FrmQtd.Top := Mouse.CursorPos.Y;
FrmQtd.Left := Mouse.CursorPos.X;
FrmQtd.KeyPreview := True;
FrmQtd.BorderStyle := bsToolWindow;
(*Cria o Label de Qtd*)
lblQtd := TLabel.Create(NIl);
lblQtd.Parent := FrmQtd;
lblQtd.Left := 24;
lblQtd.Top := 8;
lblQtd.Width := 70;
lblQtd.Height := 13;
lblQtd.Font.Color := clBlue;
lblQtd.Font.Style := [fsBold];
lblQtd.Caption := ´Quantidade:´;
(*Cria o Label de Peso*)
lblPeso := TLabel.Create(Nil);
lblPeso.Parent := FrmQtd;
lblPeso.Left := 152;
lblPeso.Top := 8;
lblPeso.Width := 33;
lblPeso.Height := 13;
lblPeso.Caption := ´Peso:´;
lblPeso.Font.Color := clBlue;
lblPeso.Font.Style := [fsBold];
(*Cria um TDBEdit de QTD*)
dbedtQtd := TDBEdit.Create(Nil);
dbedtQtd.Parent := FrmQtd;
dbedtQtd.Width := 121;
dbedtQtd.Left := 0;
dbedtQtd.Top := 24;
dbedtQtd.DataSource := dtsItensComp;
dbedtQtd.DataField := ´QTD´;
(*Cria um TDBEdit de Peso*)
dbedtPeso := TDBEdit.Create(Nil);
dbedtPeso.Parent := FrmQtd;
dbedtPeso.Left := 120;
dbedtPeso.Top := 24;
dbedtPeso.Width := 121;
dbedtPeso.Height := 21;
dbedtPeso.DataSource := dtsItensComp;
dbedtPeso.DataField := ´peso´;
(*Mostra o Form*)
FrmQtd.ShowModal;
finally
lblPeso.Free;
lblQtd.Free;
dbedtQtd.Free;
dbedtPeso.Free;
FrmQtd.Free;
end;
end;
Tremonti
Curtidas 0
Respostas
Delphi32
10/06/2005
Faça o seguinte: No form do grid crie uma procedure com os mesmos parâmetros que um evento OnKeyDown gera. Por exemplo:
Agora crie o corpo da rotina:
E agora na hora que você cria o Edit, você diz que o Evento OnKeyDown dele é essa procedure que você criou:
Obs.: No form do grid essa procedure poderia estar declarada como public ou mesmo private. Funciona das duas formas.
Até!
private
{ Private declarations }
procedure EditKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
public
{ Public declarations }
end;
Agora crie o corpo da rotina:
procedure TForm1.EditKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key=VK_RETURN then ShowMessage(´Enter Pressionado´); end;
E agora na hora que você cria o Edit, você diz que o Evento OnKeyDown dele é essa procedure que você criou:
//... (*Cria um TDBEdit de QTD*) dbedtQtd := TDBEdit.Create(Nil); dbedtQtd.Parent := FrmQtd; dbedtQtd.Width := 121; dbedtQtd.Left := 0; dbedtQtd.Top := 24; dbedtQtd.DataSource := dtsItensComp; dbedtQtd.DataField := ´QTD´; dbedtQtd.OnKeyDown := EditKeyDown; //<<VEJA AQUI //...
Obs.: No form do grid essa procedure poderia estar declarada como public ou mesmo private. Funciona das duas formas.
Até!
GOSTEI 0