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.
kisisel_logo_dark.png
WWW
Cevapla
#2
(12-12-2017, Saat: 00:34)hyperxman Adlı Kullanıcıdan Alıntı: ...

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.
Cevapla
#3
(12-12-2017, Saat: 00:49)Abdullah ILGAZ Adlı Kullanıcıdan Alıntı:
(12-12-2017, Saat: 00:34)hyperxman Adlı Kullanıcıdan Alıntı: ...

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
kisisel_logo_dark.png
WWW
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
kisisel_logo_dark.png
WWW
Cevapla
#5
(12-12-2017, Saat: 21:26)hyperxman Adlı Kullanıcıdan Alıntı: Çö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ı:
(12-12-2017, Saat: 21:26)hyperxman Adlı Kullanıcıdan Alıntı: Çö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
kisisel_logo_dark.png
WWW
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Delphi 7 Unrar mcuyan 12 484 19-03-2024, Saat: 10:30
Son Yorum: frmman
Lightbulb Delphi 7zip Password lü Dosya Sıkıştırma ve Açma + Bonus RAR5 Desteği frmman 6 262 16-03-2024, Saat: 17:55
Son Yorum: delphi.developer
  delphi 12 ile TFileStream çalışmıyor aegean 5 424 05-03-2024, Saat: 22:23
Son Yorum: aegean
  Delphi ile geliştirdiğiniz uygulamalar neler? - İki Ödüllü Mr.Developer 20 12.683 01-01-2024, Saat: 22:46
Son Yorum: aegean
  Delphi 7 ye göre MB Döviz kurları nasıl alırız maydin60 7 964 31-12-2023, Saat: 02:18
Son Yorum: maydin60



Konuyu Okuyanlar: 1 Ziyaretçi