Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Referans Gösteren Nesneyi Bulmak
#1
Merhaba,

Bir problemle karşınızdayım.
İki adet nesnemiz olduğunu varsayalım. Bir Edit ve bir Buton. Bu ikiside bizim yazdığımız nesnelerimiz. Buton nesnemizin bir propertysi var. Bunda dizayn anında Editimizi referanslıyoruz. Butondan nesnemizin referansladığı Edit nesnesine ulaşmak çok kolay. Fakat Edit nesnemiz butonu referanslamadığı için Editten butona ulaşmak istersem Form üzerindeki nesneleri taramam gerekli.

Kod ile gösterecek olursak;
property SKReferenceEdit    : TWinControl    read FSKReferenceEdit   write setReferenceEdit;

Sorum kısaca şu;
Formdaki bileşenleri gezmeden Edit'ten beni referans olarak gösteren X sınıfından bir buton var mı, varsa bana onu getir gibi bir işlem yapmamız mümkünmüdür?
Saygılarla.
Yalnızım ama bir kente yürüyen ordu gibiyim, edebiyattan kaçınmalıyım..
Cevapla
#2
Bu durumda basitçe; SetReferenceEdit procedure'nizde referans kurduğunuz TWinControl'ün Tag property'sine; NativeInt(Self) ataması yapabilirsiniz.

procedure TSizinSinif.SetReferenceEdit(const Value : TWinControl);
begin
  if Value <> FSKReferenceEdit then
  begin
    if not Assigned(Value) and Assigned(FSKReferenceEdit) then
      FSKReferenceEdit.Tag := 0;

    FSKReferenceEdit := Value;

    if Assigned(FSKReferenceEdit) then
      FSKReferenceEdit.Tag := NativeInt(Self);
  end;
end;
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla
#3
(24-04-2019, Saat: 08:40)Tuğrul HELVACI Adlı Kullanıcıdan Alıntı: Bu durumda basitçe; SetReferenceEdit procedure'nizde referans kurduğunuz TWinControl'ün Tag property'sine; NativeInt(Self) ataması yapabilirsiniz.

procedure TSizinSinif.SetReferenceEdit(const Value : TWinControl);
begin
  if Value <> FSKReferenceEdit then
  begin
    if not Assigned(Value) and Assigned(FSKReferenceEdit) then
      FSKReferenceEdit.Tag := 0;

    FSKReferenceEdit := Value;

    if Assigned(FSKReferenceEdit) then
      FSKReferenceEdit.Tag := NativeInt(Self);
  end;
end;
Öncelikle teşekkürler hocam, bu tarz bir özellik benimde aklıma geldi fakat kod yazarken ben veya bir başka bir kişi Bir den çok butonda aynı nesneyi referanslarsa nasıl birşey yaparımda takıldım. Bu tarz bir durumda son referanslayanı buluruz.
Yalnızım ama bir kente yürüyen ordu gibiyim, edebiyattan kaçınmalıyım..
Cevapla
#4
(24-04-2019, Saat: 09:19)narkotik Adlı Kullanıcıdan Alıntı:
(24-04-2019, Saat: 08:40)Tuğrul HELVACI Adlı Kullanıcıdan Alıntı: Bu durumda basitçe; SetReferenceEdit procedure'nizde referans kurduğunuz TWinControl'ün Tag property'sine; NativeInt(Self) ataması yapabilirsiniz.

procedure TSizinSinif.SetReferenceEdit(const Value : TWinControl);
begin
  if Value <> FSKReferenceEdit then
  begin
    if not Assigned(Value) and Assigned(FSKReferenceEdit) then
      FSKReferenceEdit.Tag := 0;

    FSKReferenceEdit := Value;

    if Assigned(FSKReferenceEdit) then
      FSKReferenceEdit.Tag := NativeInt(Self);
  end;
end;
Öncelikle teşekkürler hocam, bu tarz bir özellik benimde aklıma geldi fakat kod yazarken ben veya bir başka bir kişi Bir den çok butonda aynı nesneyi referanslarsa nasıl birşey yaparımda takıldım. Bu tarz bir durumda son referanslayanı buluruz.

Bu durumda, madem sınıflar sizin sınıflarınız; o halde TWinControl'den türeyen FSKReferenceEdit sınıfınızın içine bir adet generic liste sınıfı ekleyin. (TList<TSizinButton> gibi). Bu durumda yukarıdaki kullanımda, Tag ataması yerine, FSKReferenceEdit.List.Add(Self) ya da FSKReferenceEdit.List.Remove(Self) gibi bir yapı işinizi görebilir.

Tabii gerçekte tam olarak ne yapmak istediğinizi ifade ederseniz belki daha manidar açıklamalarımız olabilir.
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla
#5
(24-04-2019, Saat: 09:25)Tuğrul HELVACI Adlı Kullanıcıdan Alıntı:
(24-04-2019, Saat: 09:19)narkotik Adlı Kullanıcıdan Alıntı: Öncelikle teşekkürler hocam, bu tarz bir özellik benimde aklıma geldi fakat kod yazarken ben veya bir başka bir kişi Bir den çok butonda aynı nesneyi referanslarsa nasıl birşey yaparımda takıldım. Bu tarz bir durumda son referanslayanı buluruz.

Bu durumda, madem sınıflar sizin sınıflarınız; o halde TWinControl'den türeyen FSKReferenceEdit sınıfınızın içine bir adet generic liste sınıfı ekleyin. (TList<TSizinButton> gibi). Bu durumda yukarıdaki kullanımda, Tag ataması yerine, FSKReferenceEdit.List.Add(Self) ya da FSKReferenceEdit.List.Remove(Self) gibi bir yapı işinizi görebilir.

Tabii gerçekte tam olarak ne yapmak istediğinizi ifade ederseniz belki daha manidar açıklamalarımız olabilir.

Generic list şeklinde tutmak aslında işimi görür hocam, tabi referans gösterilen obje form üzerinden yok edilirse notificatian ile yakalayıp listedende yok etmem gerekli. O iş bende bir deneme atışı yapıyım.
Yalnızım ama bir kente yürüyen ordu gibiyim, edebiyattan kaçınmalıyım..
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  En çok satılan miktarı bulmak. OZCANK 3 734 08-02-2025, Saat: 16:35
Son Yorum: Hayati
  E-Fatura Seri Bulmak OZCANK 22 9.574 13-02-2023, Saat: 09:13
Son Yorum: OZCANK
  Memo1 deki kayıt sayısını bulmak. OZCANK 10 3.990 08-11-2021, Saat: 14:11
Son Yorum: OZCANK
  Run Time paneller oluşturmak ve drag-drop ile panelin kordinatlarını bulmak?(ÇÖZÜLDÜ) Hsavci 8 3.210 08-04-2021, Saat: 01:01
Son Yorum: Hsavci
  [ÇÖZÜLDÜ] Scrollbox içindeki nesneyi başka scrollbox a sürükle bırak shooterman 14 5.371 17-01-2021, Saat: 21:36
Son Yorum: shooterman



Konuyu Okuyanlar: 1 Ziyaretçi