Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 3/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
PopupMenunun Case Bloğunda checked olayının çözğmlenmesi
#1
for I := 0 to popupMenu.Items.Count - 1 do
      if popupMenu.Items[I].Checked then
      begin
        case popupMenu.Items[I].Tag of
          2: Hesapla(1);
          4: Hesapla(2);
          8: Hesapla(3);
          16: Hesapla(4);
          32: Hesapla(5);
        end;
        if not (popupMenu.Tag = MenuTumunuGoster.Tag) then
          popupMenu.Tag := popupMenu.Tag + popupMenu.Items[I].Tag;
      end;

      
      
    Bir formda Popup menu var ve bu sağ click ile bu menuyü açtığımızda item'lerden bazılarının AutoCheck özelliği aktif halde.
    Bu item'lerden hangisinin veya hangilerinin seçili olma durumuna göre başka bir procedure farklı parametreler gönderilmektedir.
    
    Burada sormak istediğim case blogunun 2 - 4 - 8 - 16 - 32 gibi artmasını anlamadım. Bu değerleri neye göre aldığını anlayamadım.
    
    İlginizden ve yardımlarınızdan dolayı teşekkürler.
Cevapla
#2
Sorudan anladığım kadarı ile cevap veriyorum

popupMenu bileşeninin elemanlarının aldığı tag(etiket) değerine göre karşılaştırıyor o değerlerle

tag değerlerini kendinde girebilirsin çalışma esnasında da değer atıyabilirsin.

popupMenu.Items[I].Tag //i deki değer 4 diyelim popupMenu'nün 4'düncü elemanın tag değerine bakıcak oda mesela 8 diyelim Hesapla(3) procedure çalışacak
Cevapla
#3
(14-05-2017, Saat: 00:51)Javs Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlSorudan anladığım kadarı ile cevap veriyorum

popupMenu bileşeninin elemanlarının aldığı tag(etiket) değerine göre karşılaştırıyor o değerlerle

tag değerlerini kendinde girebilirsin çalışma esnasında da değer atıyabilirsin.

popupMenu.Items[I].Tag //i deki değer 4 diyelim popupMenu'nün 4'düncü elemanın tag değerine bakıcak oda mesela 8 diyelim Hesapla(3) procedure çalışacak

Anlamadığım husus etiket değerlerinin nasıl oluştuğu, bu 4 -8 16 gibi değerler nerden geliyor?
Cevapla
#4
Form tasarım durumunda menudesigner ile her popup item tagleri elle tanımlandı veya programın başka bir yerinde
hesaplanan veya bir kurala bağlı olarak değer atandı.
Sanırım yazılmış olan bir kodu analiz ediyorsunuz / anlamaya çalışıyorsunuz.

Bit bazında bir eşleştirme yapılmış gibi görünüyor.

2: Hesapla(1); --- 1. bit H -- 0000 0010 = 2
4: Hesapla(2); --- 2. bit H -- 0000 0100 = 4
8: Hesapla(3); --- 3. bit H -- 0000 1000 = 8
16: Hesapla(4); --- 4. bit H -- 0001 0000 = 16
32: Hesapla(5); --- 5. bit H -- 0010 0000 = 32

Yukarıdaki açıklamalarım tahmin ve varsayımlara dayanmaktadır. İlgili diğer kod parçalarınıda paylaşırsanız daha kesin cevaplar alabilirsiz.
Cevapla
#5
(14-05-2017, Saat: 08:52)frmman Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlForm tasarım durumunda menudesigner ile her popup item tagleri elle tanımlandı veya programın başka bir yerinde
hesaplanan veya bir kurala bağlı olarak değer atandı.
Sanırım yazılmış olan bir kodu analiz ediyorsunuz / anlamaya çalışıyorsunuz.  

Bit bazında bir eşleştirme yapılmış gibi görünüyor.

         2: Hesapla(1);   --- 1. bit H -- 0000 0010 = 2
         4: Hesapla(2);   --- 2. bit H -- 0000 0100 = 4
         8: Hesapla(3);   --- 3. bit H -- 0000 1000 = 8
         16: Hesapla(4); --- 4. bit H -- 0001 0000 = 16
         32: Hesapla(5); --- 5. bit H -- 0010 0000 = 32

Yukarıdaki açıklamalarım tahmin ve varsayımlara dayanmaktadır. İlgili diğer kod parçalarınıda paylaşırsanız daha kesin cevaplar alabilirsiz.

Çalıştığım bir projeyi yeniden revize etmem gerekiyor. Ve sağ clic popupmenu de autocheck propertiesi true olan itemler var. Case bloğunda da bunu bit hesabıyla seçili olup olmadığına bakarak başka bir procedure parametre gönderilmiş. Bu bit değerlerinin nerede atandığını göremedim fakat incelemeye devam edeceğim. Bu değerlerin veya hesaplamaların nerde nasıl yapıldığına dair başka ne söylenebilir.

Döngüde popupMenu.Items.Count - 1 azaltılmış  popupMenu.Items[I].Checked şeçili olma şartına bakılmış daha sonra case blogunda ise hangisinin seçili olduğuna göre dağıtılmış. Bu bit değerlerini nereden okuyor olabilir. Biz bu bit değerlerini vermesek bile programlama mantığında adres olarak bu değerleri mi alıyor.
Cevapla
#6
İki ihtimal var
Birincisi form tasarım sırasında, menudesigner altında elle tanımlanmıştır.
İkinci ihtimal, unit içinde tag değerlerinin atandığı bir yer vardır.

Tasarım kısmında menudesigner.tag kısmında seçtiğiniz item in tag değerini göremiyorsanız, taglere değer atama işlemi kod tarafında yapılmıştır.

Kod tarafında ctrl+f ile tüm projede "popupMenu.Items[0].Tag" gibi anahtar kelimeler ile aramalar yaparak bulunan noktaları gözden geçirmeniz gerekir.
Cevapla

Konuyu Paylaş : facebook gplus twitter



Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  if & case yhackup 13 444 08-12-2017, Saat: 11:48
Son Yorum: yhackup
  Case Of (iki int arası) yhackup 14 997 25-03-2017, Saat: 12:46
Son Yorum: yhackup



Konuyu Okuyanlar: 1 Ziyaretçi