Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 2.5/5 - 2 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Delphi TAdvPlanner Items Olayı
#1
İyi geceler,

Bir randevu programı yazıyorum, özel kurumsal firmalar için. Grid üzerinde ki randevuları silerken kullanılan belli bir event mevcut. Bu event ile silme işlemini gerçekleştirebiliyorum. Lakin prosedürde şöyle bir durum var;

procedure TfrmAnaForm.DBPlanner1ItemDelete(Sender: TObject; Item: TPlannerItem);
begin
 DBPlanner1.FreeItem(Item);
end;


Burada bir problem yok ama değişken tanımlamasında "Item: TPlannerItem" değişkeni işimi bozuyor, mesela;

DBPlanner1ItemDelete(Sender, Item);

Şöyle bir şey yaptığımda, Delphi haklı olarak "Kardeşim Item ne yav" diye haykırıyor.


procedure TfrmAnaForm.RandevuyuSil1Click(Sender: TObject);
var
Mesaj: Integer;
begin
Mesaj := MessageDlg('Bu randevuyu silmek istediğinize emin misiniz?', mtConfirmation, mbYesNo, 0 );
if Mesaj = mrYes then
begin
  DBPlanner1ItemDelete(Sender, Item);
end;

if Mesaj = mrNo then
begin
  DBPlanner1.Update;
end;
end;

end.

Şimdi şöyle bir durumda ben silme işlemini tabi ki gerçekleştiremiyorum. Item değişkenini normal prosedürüme tanımlayınca hata alıyorum. Ben bu durumdan nasıl çıkarım.


Özetle, 

DBPlanner1ItemDelete(Sender: TObject; Item: TPlannerItem);

Prosedürünü nasıl kullanabilirim.


Dipçe:  Normal kodlar ile Item'i select edipte silmeyi deneyince hata aldım.


Teşekkürler,
İyi çalışmalar.
Eski dos'tan windows olmaz.
Cevapla
#2
(12-12-2017, Saat: 00:34)hyperxman Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol...

DBPlanner1ItemDelete(Sender: TObject; Item: TPlannerItem);

Prosedürünü nasıl kullanabilirim.

...

Merhaba,

Genelde bu tarz master event ve item/child event durumu olan komponentlerle çalışırken, item/child üzerinde ekle-düzenle-sil işlemi yapmamız gereken durum ve koşullar için 2 tip yöntem vardır;

1) item/child seçilebilir bir nesne ise (ki genelde öyledir), onun seçili olması durumunda master (container yada atası olan nesne) (bir grid için; grid master iken, kolon veya satır item/child olarak kabul edilir.) içinde yer alan eventlara göz atarak, OnItem... şeklinde Item üzerinden yürütülen bir event ile çözümlenebilir. Eğer meselemiz harici bir buton ile bu işi yapmaksa, bu kez Button1'e tıklayınca, DBPlanner1'in ItemDelete eventını harici olarak tetikleriz. Yukarıda alıntıladığım yöntemden yola çıkarak;

Button1Click içinde; 

Önce DBPlanner1'in seçili olan bir item/child'ı var mı kontrol edilir.
Daha sonra; DBPlanner1ItemDelete(nil,DBPlanner1.SelectedItem);


2) Her ne düzenleme yapılacaksa, DBPlanner1 yerine kod ile oluşturulan bir DBPlanner nesnesi üzerinden her şeyi yapıp, iş bittiğinde görsel olarak formda gözüken DBPlanner1'e bağlamak kalır. Böylece kod'un içinde global olarak tanımlayacağın planner'ı hem tüm randevu biçim ve yöntemlerinde değerlendirebilirsin, hemde bir nevi Session tutarmış gibi, elinde bir nesnede oynayıp, nesne ne zaman değişikliğe uğrarsa onun üzerinden yürütürsün. Bunu genellikle .Net platformunda DataSet'ler ve DataTable'lar için kullanılır. Delphi için ClientDataSet vardır bir benzeri. Benzer prensipleri kendine alıp kullanabilirsin.
{ talk is cheap show me the code. }
Cevapla
#3
(12-12-2017, Saat: 00:49)Abdullah ILGAZ Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
(12-12-2017, Saat: 00:34)hyperxman Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol...

DBPlanner1ItemDelete(Sender: TObject; Item: TPlannerItem);

Prosedürünü nasıl kullanabilirim.

...

Merhaba,

Genelde bu tarz master event ve item/child event durumu olan komponentlerle çalışırken, item/child üzerinde ekle-düzenle-sil işlemi yapmamız gereken durum ve koşullar için 2 tip yöntem vardır;

1) item/child seçilebilir bir nesne ise (ki genelde öyledir), onun seçili olması durumunda master (container yada atası olan nesne) (bir grid için; grid master iken, kolon veya satır item/child olarak kabul edilir.) içinde yer alan eventlara göz atarak, OnItem... şeklinde Item üzerinden yürütülen bir event ile çözümlenebilir. Eğer meselemiz harici bir buton ile bu işi yapmaksa, bu kez Button1'e tıklayınca, DBPlanner1'in ItemDelete eventını harici olarak tetikleriz. Yukarıda alıntıladığım yöntemden yola çıkarak;

Button1Click içinde; 

Önce DBPlanner1'in seçili olan bir item/child'ı var mı kontrol edilir.
Daha sonra; DBPlanner1ItemDelete(nil,DBPlanner1.SelectedItem);


2) Her ne düzenleme yapılacaksa, DBPlanner1 yerine kod ile oluşturulan bir DBPlanner nesnesi üzerinden her şeyi yapıp, iş bittiğinde görsel olarak formda gözüken DBPlanner1'e bağlamak kalır. Böylece kod'un içinde global olarak tanımlayacağın planner'ı hem tüm randevu biçim ve yöntemlerinde değerlendirebilirsin, hemde bir nevi Session tutarmış gibi, elinde bir nesnede oynayıp, nesne ne zaman değişikliğe uğrarsa onun üzerinden yürütürsün. Bunu genellikle .Net platformunda DataSet'ler ve DataTable'lar için kullanılır. Delphi için ClientDataSet vardır bir benzeri. Benzer prensipleri kendine alıp kullanabilirsin.

 Teşekkürler hocam okuldan dönünce denerim. "Selected" yapayım Eger olmazsa "DB" üzerinden hallederim dediğiniz gibi Smile
Eski dos'tan windows olmaz.
Cevapla
#4
Çözümü paylaşayım lazım olur;


   if DBPlanner1.Items.Selected.Selected = True  then ///Üstadın dediği gibi kontrol ediyoruz.
   begin
   DBPlanner1ItemDelete(nil, DBPlanner1.Items.Selected); ///Seçili olanı siliyoruz.
  end;


Burda şimdi geliştirici Selected.Selected yapmış ikinci fonksiyon  boolean türünde onu bulmak için canım çıktı bir insan neden iki defa aynı isimde farklı değişken türünde fonksiyon yazar ki??  Big Grin Big Grin
Eski dos'tan windows olmaz.
Cevapla
#5
(12-12-2017, Saat: 21:26)hyperxman Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlÇözümü paylaşayım lazım olur;


   if DBPlanner1.Items.Selected.Selected = True  then ///Üstadın dediği gibi kontrol ediyoruz.
   begin
   DBPlanner1ItemDelete(nil, DBPlanner1.Items.Selected); ///Seçili olanı siliyoruz.
  end;


Burda şimdi geliştirici Selected.Selected yapmış ikinci fonksiyon  boolean türünde onu bulmak için canım çıktı bir insan neden iki defa aynı isimde farklı değişken türünde fonksiyon yazar ki??  Big Grin Big Grin

Muhtemelen seçili bir item olmadığında bu kod ile Access Violation hatası alırsınız. Bu bağlamda, Selected'ın nil'den farklı olup olmadığını kontrol ettikten sonra ilerlemenizi öneririm.
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla
#6
(14-12-2017, Saat: 13:39)Tuğrul HELVACI Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
(12-12-2017, Saat: 21:26)hyperxman Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlÇözümü paylaşayım lazım olur;


   if DBPlanner1.Items.Selected.Selected = True  then ///Üstadın dediği gibi kontrol ediyoruz.
   begin
   DBPlanner1ItemDelete(nil, DBPlanner1.Items.Selected); ///Seçili olanı siliyoruz.
  end;


Burda şimdi geliştirici Selected.Selected yapmış ikinci fonksiyon  boolean türünde onu bulmak için canım çıktı bir insan neden iki defa aynı isimde farklı değişken türünde fonksiyon yazar ki??  Big Grin Big Grin

Muhtemelen seçili bir item olmadığında bu kod ile Access Violation hatası alırsınız. Bu bağlamda, Selected'ın nil'den farklı olup olmadığını kontrol ettikten sonra ilerlemenizi öneririm.

Ustat 2 gündür bende diyorum neden hata veriyor. Allah razı olsun Smile
Eski dos'tan windows olmaz.
Cevapla

Konuyu Paylaş : facebook gplus twitter



Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  HHBMailComponent - Kolay Mail Gönderim Bileşeni [Delphi] hyperxman 0 16 1 saat önce
Son Yorum: hyperxman
  Delphi Uygulama Güvenliği hyperxman 12 386 31-03-2018, Saat: 00:29
Son Yorum: mcuyan
  Delphi Sql Tarih Sorunu Pimapen_Nuri 15 551 14-03-2018, Saat: 17:29
Son Yorum: Pimapen_Nuri
  Delphi 10.2.2 Tokyo narkotik 9 379 09-03-2018, Saat: 13:43
Son Yorum: engerex
  Delphi 10.2 Fast Report Install Error narkotik 5 202 01-03-2018, Saat: 15:02
Son Yorum: narkotik



Konuyu Okuyanlar: 1 Ziyaretçi