Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Package Combobox Property
#1
Merhabalar,

Component yazmakla uğraşan arkadaşlardan bir konuda bilgi almak isterim.

Misal;

tDbEditText'in DataSource seçildikten sonra bağlı oldugu querynin fieldleri combobox gibi seçilebilir halde propertyde bulunmaktadır.
Benim bu combobox gibi olan propertyinin kullanımını öğrenmem lazım.

Bunun hakkında hep ingilizce kaynak olduğundan ve ingilizcemin yetersizliğinden konuları anlayamadım.

Fikri olan arkadaşlar yardımcı olabilirse çok sevinirim Smile
Yeni Nesil Yazılımcı
Linkedin: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
Blog adresim: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
WWW
Cevapla
#2
(25-08-2017, Saat: 12:15)barisatalay Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlMerhabalar,

Component yazmakla uğraşan arkadaşlardan bir konuda bilgi almak isterim.

Misal;

tDbEditText'in DataSource seçildikten sonra bağlı oldugu querynin fieldleri combobox gibi seçilebilir halde propertyde bulunmaktadır.
Benim bu combobox gibi olan propertyinin kullanımını öğrenmem lazım.

Bunun hakkında hep ingilizce kaynak olduğundan ve ingilizcemin yetersizliğinden konuları anlayamadım.

Fikri olan arkadaşlar yardımcı olabilirse çok sevinirim Smile

RegisterPropertyEditor(TypeInfo(string),     TComponent, 'DataField', TDataFieldProperty);

Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol Wink
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla
#3
Daha önce yazdığım dandik bir Component vardı. Onun üzerinden anlatmaya çalışayım olayı.

- Öncelikle Componentinizi yazdığınızı varsayıyorum. Bu Component'in iligili propertysine Combobox şeklinde bir property editör yazmanız gerekiyor. Bunun için bence ayrı bir Unitte bu editör kodlarını tutmalısınız.kWo5YWkWo5YW.png
-Normal component kaydeder gibi bu property editörüde Register procedure ile kaydediyosunuz.
-Kaydederken hangi Class için, Class'ın hangi Properysi için kaydettiğinizi giriyosunuz.


N1PjbON1PjbO.png

-Dikkat edilmesi gereken yer bu Register işlemini yaparken iki şekilde yapılabilir. Birincisi ilk parametredeki özelliği sağlayan bütün Componentlerde bu editör çalışsın diyebilirsiniz. Yani TypeInfo(string) derseniz tanımladığınız Classtaki bütün string propertylerinde sizin Editör çalışacaktır. 

aGW7BzaGW7Bz.png

WQ5jrYWQ5jrY.pngpW1OY0

Yada bu Classın sadece bu property si için çalış diyebilirsiniz.

pW1OY0.png
-İlgili Editör kodlarına bakarsak temelde her editörde olan iki method vardır.
Bunlar
    function  GetAttributes: TPropertyAttributes; override;
   procedure GetValues(Proc: TGetStrProc); override;

Birinci method editörün nasıl davranacağı ile ilgili bilgilinin girildiği. Yani bir liste şeklindemi açılacak liste içinde bir sıralama yapacakmı gibi.
İkinci method da editörün içindeki verilerinin tanımlandığı yer diyebiliriz. Bu söylediklerim sadece örnekteki için geçerli başka editörler yaptığınızda farklı methodlar devreye girebilmektedir.

3q0kRA3q0kRA.png

Son olarak test edip baktığımızda bizim property de bizim yazdığımız editör gelmektedir.

RPMj61RPMj61.png

Görünüm:
[img]<a href=[/img]ff8A3W.gif
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
WWW
Cevapla
#4
Attığınız link ve resimler sayesinde bahsettiğim şekilde yapabildim teşekkürler arkadaşlar.

Peki şuan aklımda bir şeyler oluştu.

Bu "TStringProperty"den türetilen sınıf hiçbir şekilde bizim componentimizin içerisinden .Create denilerek oluşturulmuyor.

Şuan yapmaya çalıştığım;
Benim componentim içerisinde bir method var o method gerekli koşullar sağlandığında çalışıyor ve çalıştığında, bir TList<String> tipli değişkeni dolduruyor.

Bu değişken dolduğunda "GetValues" içerisinde ki ekleme işlemlerini benim listem sayesinde yapmam gerek.

Şuan hala kurcalıyorum fakat bir türlü bağlantıyı kuramadım.

Bu arada @witalihakko aşırı detaylı anlatım için teşekkürler Smile
Yeni Nesil Yazılımcı
Linkedin: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
Blog adresim: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
WWW
Cevapla
#5
Eğer Datasource dan kolon isimlerini almak istiyosan şunu kullanabilirsin.

function TDataFieldProperty.GetDataSourcePropName: string;
begin
  Result := 'DataSource';
end;

procedure TDataFieldProperty.GetValueList(List: TStrings);
var
 DataSource: TDataSource;
begin
 DataSource := GetObjectProp(GetComponent(0), GetDataSourcePropName) as TDataSource;
 if (DataSource <> nil) and (DataSource.DataSet <> nil) then
   DataSource.DataSet.GetFieldNames(List);
end;

Bu ayrıca senin sorunuda cevaplamış oluyor. Eğer ana classında bir değişkeni kullanacaksan GetComponent(0) ile ana classına bağlanıp istediğin property veya değişkeni kullanabilirsin.

Bende şu an delphi7 var eminim yeni versiyonlarda da vardır. Delphinin klasöründe kaynak kodlar kısmında property editörler pas dosyaları mevcut. Onları da inceleyebilirsin. Dosya yolu "...\Borland\Delphi7\Source\Property Editors"
WWW
Cevapla

Konuyu Paylaş : facebook gplus twitter



Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  cxgrid cell içine combobox yerleşimi masteryoda 4 347 08-08-2017, Saat: 08:48
Son Yorum: meko
  SQL ile 3 combobox tan sorgu atma emrekilinc1984 8 1.560 04-11-2016, Saat: 17:47
Son Yorum: Fesih ARSLAN



Konuyu Okuyanlar: 1 Ziyaretçi