Newsgroup: it.comp.lang.delphi
Titolo: popupmenu condiviso

Salve a tutti ma mi sono perso, problema.
Ho una form con due dbgrid che visualizzano due tabelle separate (ma uguali come struttura) a cui ho associato un popmenu condiviso il quale ha diversi menuitem.
al momento della selezione onclick del menuitem vorrei individuare quale dbgrid è utilizzata per poter operare sulla tabella corretta.

Ciao Brunello,

Dato che le due griglie hanno la stessa struttura puoi facilmente 
risolvere il problema utilizzando la "variabile" sender : TObject
 
Form con 2 tdbgrid
 
Metti questo codice (le due grigle al mousdown puntano entrambe alla 
stessa procedura nella grid1
 
unit Main;
 
interface
 
uses
   Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, 
System.Classes, Vcl.Graphics,
   Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Data.DB, Vcl.Menus, Vcl.Grids,
   Vcl.DBGrids;
 
type
   TForm1 = class(TForm)
     DBGrid1: TDBGrid;
     DBGrid2: TDBGrid;
     PopupMenu1: TPopupMenu;
     Item11: TMenuItem;
     Item21: TMenuItem;
     procedure PopupMenu1Popup(Sender: TObject);
     procedure DBGrid1MouseDown(Sender: TObject; Button: TMouseButton;
       Shift: TShiftState; X, Y: Integer);
   private
     { Private declarations }
 
     ActiveGrid : TObject;
 
   public
     { Public declarations }
   end;
 
var
   Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.DBGrid1MouseDown(Sender: TObject; Button: TMouseButton;
   Shift: TShiftState; X, Y: Integer);
begin
   ActiveGrid:=Sender;
end;
 
procedure TForm1.PopupMenu1Popup(Sender: TObject);
begin
   if (ActiveGrid is TDBGrid)  then
   Begin
     if (ActiveGrid as TDBGrid).Name = 'DBGrid1' then
     begin
       Item11.Caption:='DBGrid1 Item1';
       Item21.Caption:='DBGrid1 Item1';
     end
     else
     if (ActiveGrid as TDBGrid).Name = 'DBGrid2' then
     begin
       Item11.Caption:='DBGrid1 Item2';
       Item21.Caption:='DBGrid1 Item2';
     end;
   End;
 
 
end;
 
end.
 
ActiveGrid e' una vaiabile che si prende cura di quale griglia stai 
puntando e viene assegnata al onmoudedown (non importa quale bottone premi).
Quando ativi il popup il controllo lo fai sulla griglia selezionata 
(ActiveGrid).
Poi anziche' lacorare con DBGrid1.qualcosa dovrai utilizzare ActiveGrid.
Per esempio se fai una locate:
(ActiveGrid As TDbgrid).Locate()
Per il post
(ActiveGrid As TDbgrid).Post
o in un eof
(ActiveGrid As TDbgrid).eof
e cosi' via
 
Forse ci sara' qualcosa di migliore ma, cosi' al volo, mi e' venuta in 
mente questa via.
 
Ciao
 
Daniele
 
 

Grazie mille adesso provo e penso che sia una buona soluzione, poi ti faccio sapere, ciao

 Grazie mille adesso provo e penso che sia una buona soluzione, poi ti faccio sapere, ciao
 
 
Come sta andando??
 
Ciao
Daniele

 Come sta andando?? 
purtroppo per altri problemi ho dovuto stoppare il progetto, i prossimi giorni appena ho la possibilità ci rimetto mano e ti dico, grazie ciao

 > Come sta andando?? 
ottimo suggerimento solo che non avendo necessità di modificare i menu ma solo di modificare le operazioni ho spostato il controllo dei ActiveGrid all'interno dell'Onclick del TmenuItem, Grazie di nuovo
 
  if ActiveGrid is TDBGrid then
    begin
      if (ActiveGrid as TDBGrid).Name = 'Griglia' then
        begin
//          tabella collegata alla prima griglia
        end
      else
        begin
//          tabella collegata alla seconda griglia
        end;
    end;
 

Ciao Brunello,

Buon lavoro, alla prossima ...
 
Ciao
Daniele