Popupmenu (Ortak)

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
abdulkadir
Kıdemli Üye
Mesajlar: 489
Kayıt: 13 Eyl 2003 09:10
Konum: istanbul
İletişim:

Popupmenu (Ortak)

Mesaj gönderen abdulkadir »

S.a
Arkadaslar herkese kolay gelsin.
eskiden her child formda bir popup menu kullanıyordum
biraz geliştirdim main forma bir tane popup menu koydum child formlarda kullanılan ortak ozellikler için

örnek her child formda dbgridi duzenle,yazdır,farklı kaydet gibi ortak işlemler var
her chilh formdaki dbgridin adını DBGrid_AS yaptım ve boylece aşagıdaki kod ile aktiv formdaki dbgride ulaşıp ortak ozellikleri kullanabiliyorum.

Kod: Tümünü seç

procedure TAnaF.GridOzelletir1Click(Sender: TObject);
var
ChildForm: TForm;
Grid : TDBGrid;
Form_name,Grid_name:String;
begin
 Form_name:='Form_Bulunamadı';
 Grid_name:='Grid_Bulunamadı';
  ChildForm:=ActiveMDIChild ;
  if Assigned(ChildForm)then
     Form_name :=ActiveMDIChild.Name;
      Grid :=(ChildForm.FindComponent('DBGrid_AS')as TDBGrid);
        if Assigned(Grid) then
           Grid_name:=Grid.Name;
 //---------İŞLEMİ UYGULA
    Lib_GridDuzenleRX(Form_name,Grid);
end;
Peki Sorun ne
child fordaki Dbgrid lerin sayısı artı kiminde 2 kiminde 3 tane olacak
child formdaki 3 dbgridinde popupmenu sünü main formdaki popup menu olarak ayarladım
popupmenu:=MainForm.PopupGrid;
ama hangi dbgride sag tıklandı tespit edemiyorum.
Ne dersiniz olacak şeymi...
Fikirleri Aktar
Kaynakları Dagıt
Ve
Yoldan Çekil
http://www.Leventler.com.tr
Kullanıcı avatarı
Lost Soul
Üye
Mesajlar: 1064
Kayıt: 01 Nis 2007 02:55
Konum: mekan ANKARA toprak ELAZIĞ
İletişim:

Re: Popupmenu (Ortak)

Mesaj gönderen Lost Soul »

Kod: Tümünü seç

procedure TAnaF.GridOzelletir1Click(Sender: TObject);
var
ChildForm: TForm;
Grid : TDBGrid;
Form_name,Grid_name:String;
begin
 Form_name:='Form_Bulunamadı';
 Grid_name:='Grid_Bulunamadı';
  ChildForm:=ActiveMDIChild ;
  if Assigned(ChildForm)then
     Form_name :=ActiveMDIChild.Name;
      Grid :=(ChildForm.FindComponent('DBGrid_AS')as TDBGrid);
        if Assigned(Grid) then
           Grid_name:=Grid.Name;
 //---------İŞLEMİ UYGULA
    Lib_GridDuzenleRX(Form_name,Grid);
end;
burada ChildForm:=ActiveMDIChild ; yerine sender.parentform;
Grid :=(ChildForm.FindComponent('DBGrid_AS')as TDBGrid); yerine de sender.name;
kullanın;
abdulkadir
Kıdemli Üye
Mesajlar: 489
Kayıt: 13 Eyl 2003 09:10
Konum: istanbul
İletişim:

Re: Popupmenu (Ortak)

Mesaj gönderen abdulkadir »

DCC error undeclared identifier:'parentform' Hatası veriyor
sender.parentform kullanılamıyor sender.name de aynı hata
Fikirleri Aktar
Kaynakları Dagıt
Ve
Yoldan Çekil
http://www.Leventler.com.tr
Kullanıcı avatarı
Lost Soul
Üye
Mesajlar: 1064
Kayıt: 01 Nis 2007 02:55
Konum: mekan ANKARA toprak ELAZIĞ
İletişim:

Re: Popupmenu (Ortak)

Mesaj gönderen Lost Soul »

TButton(sender).parentform; olarak deneyin bi de
abdulkadir
Kıdemli Üye
Mesajlar: 489
Kayıt: 13 Eyl 2003 09:10
Konum: istanbul
İletişim:

Re: Popupmenu (Ortak)

Mesaj gönderen abdulkadir »

olmadı maalesef....
Fikirleri Aktar
Kaynakları Dagıt
Ve
Yoldan Çekil
http://www.Leventler.com.tr
Kullanıcı avatarı
Battosai
Üye
Mesajlar: 1316
Kayıt: 01 Eki 2007 12:02
Konum: Ankara

Re: Popupmenu (Ortak)

Mesaj gönderen Battosai »

Aşağıdaki kod ile hangi kontrol üzerinde olduğunu öğrenebilirsin....Artık kendine göre düzenleme yaparsın...

Kod: Tümünü seç

function FindControlAtPos: TWinControl;
var
  Pt: TPoint;
begin
  GetCursorPos(Pt);
  Result := FindControl(WindowFromPoint(Pt));
end;
abdulkadir
Kıdemli Üye
Mesajlar: 489
Kayıt: 13 Eyl 2003 09:10
Konum: istanbul
İletişim:

Re: Popupmenu (Ortak)

Mesaj gönderen abdulkadir »

Bu sekilde de olmadı yanlıs sonuclar veriyor.

Kod: Tümünü seç

function FindControlAtPos: TWinControl;
var
  Pt: TPoint;
begin
  GetCursorPos(Pt);
  Result := FindControl(WindowFromPoint(Pt));
end;

var
ChildForm: TCustomForm;
Grid : TWinControl;
Form_name,Grid_name:String;
begin
 Form_name:='Form_Bulunamadı';
 Grid_name:='Grid_Bulunamadı';

  ChildForm:=GetParentForm(Self);
  if Assigned(ChildForm)then   Form_name :=ActiveMDIChild.Name;
      Grid :=FindControlAtPos;
        if Assigned(Grid) then Grid_name:=Grid.Name;

           ShowMessage('F---'+Form_name+' ----G------'+Grid_name);
Fikirleri Aktar
Kaynakları Dagıt
Ve
Yoldan Çekil
http://www.Leventler.com.tr
Kullanıcı avatarı
Battosai
Üye
Mesajlar: 1316
Kayıt: 01 Eki 2007 12:02
Konum: Ankara

Re: Popupmenu (Ortak)

Mesaj gönderen Battosai »

-Global olarak bir tane kontrol değişkeni tanımla örneğin ctrl:Twincontrol;
-Pop-up menün onpopup event'ına

Kod: Tümünü seç

ctrl:=FindVCLWindow(Mouse.CursorPos);
yaz...hangi control olduğunu öğrendik...işlem yaptıracağın koda da aşağıdaki gibi bir kod ile çalıştır...

Kod: Tümünü seç

  if ctrl<>nil then
  if ctrl is TDBGrid then
    Begin
    .....
    ......
    .....
    End;
Kullanmış olduğun kodlara ihtiyaç yok bunlar yeterli...
abdulkadir
Kıdemli Üye
Mesajlar: 489
Kayıt: 13 Eyl 2003 09:10
Konum: istanbul
İletişim:

Re: Popupmenu (Ortak)

Mesaj gönderen abdulkadir »

Tesekkür ederim biraz degişiklik ile sorun halloldu

Gridi düzenleyen procedure boyle

Kod: Tümünü seç

procedure Lib_GridDuzenleRX(F_name:string;Grid : TRxDBGrid);
Global tanım ve onpopup işleminden sonra Busekilde işlem tamam

Kod: Tümünü seç

procedure TAnaF.GridOzelletir1Click(Sender: TObject);
var
ChildForm: TForm;
Grid : TRxDBGrid;
begin
   ChildForm:=ActiveMDIChild;//Form ismine ihtiyacım var
  if ctrl<>nil then
  if ctrl is TRxDBGrid then  Begin
     Grid :=(ctrl as TRxDBGrid);
    Lib_GridDuzenleRX(ChildForm.Name,Grid);
    End;
end;
Tesekkür ederim...
Fikirleri Aktar
Kaynakları Dagıt
Ve
Yoldan Çekil
http://www.Leventler.com.tr
Cevapla