Ola a todos, fiz uma procedure para gerar um menu popup com DBGrid, ja imaginou você com 4 ou mais DbEdit ou Edit tendo que criar um DbGrid para cadas um, então eu fiz essa procedure que funciona assim, voce chama a funcao no form onde deseja e passa os parametros para consulta.
O Código ficou assim ->
PROCEDURE
procedure TFNC.PRC_POP_DbEdit(NQuery: TZQuery; NTabela, NCampo: String;
Sender: TObject; NGrid: TDBGrid; NDbEdit: TDBEdit; NDataSet: TDataSet;
NDataSource: TDataSource);
begin
NGrid.Left := (Sender as TDBEdit).Left + 8; //(Sender as TDBEdit).Left + 8;
NGrid.Top := (Sender as TDBEdit).Top + 144;
//ShowMessage((Sender as TDBEdit).Name);
NGrid.Height := 170;
NGrid.Ctl3D := False;
NGrid.Options := NGrid.Options - [dgEditing,dgTitles,dgIndicator,dgColumnResize,dgTa bs,dgConfirmDelete,dgCancelOnExit];
NGrid.DataSource := NDataSource;
NGrid.DataSource.DataSet := NDataSet;
NGrid.Columns[0].FieldName := NCampo;
FiltroGrid := NCampo;
If TDBEdit(Sender).Width < 150 Then
Begin
NGrid.Width := 250;
NGrid.Columns[0].Width := TDBEdit(Sender).Width - MarginLeft;
End
Else
Begin
NGrid.Width := TDBEdit(Sender).Width;
NGrid.Columns[0].Width := TDBEdit(Sender).Width - MarginLeft;
End;
WITH NQuery Do Begin
If NDbEdit.Text = '' Then
Begin
Close;
SQL.Clear;
SQL.Text := 'SELECT * FROM '+ NTabela;
Open;
End
ELSE
Begin
Close;
SQL.Clear;
SQL.Text := 'SELECT * FROM '+ NTabela + ' WHERE '+ NCampo +' LIKE '+''''+'%'+NDbEdit.Text+'%'+'''';
Open;
End;
If NQuery.RecordCount > 0 Then
//If Length(NDbEdit.Text) >= 3 Then
Begin
NGrid.Visible := True;
//ShowMessage(NomeCampo);
End
Else
Begin
NGrid.Visible := False;
End;
End;
end;
No DbEdit onde vc quer que o popup apareca ficou assim
procedure TFmCadastroAcervo.DbEditoraChange(Sender: TObject);
begin
inherited;
FNC.PRC_POP_DbEdit(DM.QueryEditora, 'TB_EDITORA', 'EDITORA', Sender, GridPopup, DbEditora, dm.QueryEditora, DM.dsQueryEditora);
end;
agora so falta resolver o problema de passagem de parametro no qual eu ainda nao consegui resovler, caso alguem saiba como nos ajudar por favor comente
procedure TFmCadastroAcervo.GridPopupKeyPress(Sender: TObject;
var Key: Char);
begin
inherited;
If Key = #13 Then
Begin
Key := #0;
(Sender as TDBEdit).Text := GridPopup.DataSource.DataSet.FieldByName(FNC.Filtr oGrid).AsString;
GridPopup.Visible := False;
End;
end;
O Código ficou assim ->
PROCEDURE
procedure TFNC.PRC_POP_DbEdit(NQuery: TZQuery; NTabela, NCampo: String;
Sender: TObject; NGrid: TDBGrid; NDbEdit: TDBEdit; NDataSet: TDataSet;
NDataSource: TDataSource);
begin
NGrid.Left := (Sender as TDBEdit).Left + 8; //(Sender as TDBEdit).Left + 8;
NGrid.Top := (Sender as TDBEdit).Top + 144;
//ShowMessage((Sender as TDBEdit).Name);
NGrid.Height := 170;
NGrid.Ctl3D := False;
NGrid.Options := NGrid.Options - [dgEditing,dgTitles,dgIndicator,dgColumnResize,dgTa bs,dgConfirmDelete,dgCancelOnExit];
NGrid.DataSource := NDataSource;
NGrid.DataSource.DataSet := NDataSet;
NGrid.Columns[0].FieldName := NCampo;
FiltroGrid := NCampo;
If TDBEdit(Sender).Width < 150 Then
Begin
NGrid.Width := 250;
NGrid.Columns[0].Width := TDBEdit(Sender).Width - MarginLeft;
End
Else
Begin
NGrid.Width := TDBEdit(Sender).Width;
NGrid.Columns[0].Width := TDBEdit(Sender).Width - MarginLeft;
End;
WITH NQuery Do Begin
If NDbEdit.Text = '' Then
Begin
Close;
SQL.Clear;
SQL.Text := 'SELECT * FROM '+ NTabela;
Open;
End
ELSE
Begin
Close;
SQL.Clear;
SQL.Text := 'SELECT * FROM '+ NTabela + ' WHERE '+ NCampo +' LIKE '+''''+'%'+NDbEdit.Text+'%'+'''';
Open;
End;
If NQuery.RecordCount > 0 Then
//If Length(NDbEdit.Text) >= 3 Then
Begin
NGrid.Visible := True;
//ShowMessage(NomeCampo);
End
Else
Begin
NGrid.Visible := False;
End;
End;
end;
No DbEdit onde vc quer que o popup apareca ficou assim
procedure TFmCadastroAcervo.DbEditoraChange(Sender: TObject);
begin
inherited;
FNC.PRC_POP_DbEdit(DM.QueryEditora, 'TB_EDITORA', 'EDITORA', Sender, GridPopup, DbEditora, dm.QueryEditora, DM.dsQueryEditora);
end;
agora so falta resolver o problema de passagem de parametro no qual eu ainda nao consegui resovler, caso alguem saiba como nos ajudar por favor comente
procedure TFmCadastroAcervo.GridPopupKeyPress(Sender: TObject;
var Key: Char);
begin
inherited;
If Key = #13 Then
Begin
Key := #0;
(Sender as TDBEdit).Text := GridPopup.DataSource.DataSet.FieldByName(FNC.Filtr oGrid).AsString;
GridPopup.Visible := False;
End;
end;
Comment