Genel Degişken

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
cihan
Üye
Mesajlar: 65
Kayıt: 02 Ağu 2005 03:34

Genel Degişken

Mesaj gönderen cihan »

birden fazla bpl içinde birden fazla form olan bir uygula yazmaya çalışıyorum. Anaform ve diğer paketlerdiki bazı formlardan değişkenlere
değer atayıp bunları başka formlarda kullanmak zorunluluğu ortaya çıktı.
Önce bu değişkenlerin hepsini bir sınıfta toplamak aklıma geldi ve aşağıdaki gibi bir kod yazarak bunu başardım

type
Tgenel=class
private
Fdeger1: string;
Fdeger2: string;
Fdeger3: integer;
procedure Setdeger1(const Value: string);
procedure Setdeger2(const Value: string);
procedure Setdeger3(const Value: integer);
published
property deger1:string read Fdeger1 write Setdeger1;
property deger2:string read Fdeger2 write Setdeger2;
property deger3:integer read Fdeger3 write Setdeger3;
end;

daha sonra bunu anaformun public kısmında
Genel:Tgenel; olarak tanımladım ve formun oncreate olayında hafızadan
yerini ayarladım ve destroy olayında da sildim.

Başaramadığım kısım

Ben bu sınıfa ana formdan birdeğer atadığım zaman bpl icindeki bir formdaki değişkene nasıl aktarabilirim ve bpl içindeki bir formdan bu sınıfa nasıl değer atayabilirim.Bir nevi paketlerle hazırlanmış bir programda (Paketler içinde birden fazla form bulunmakta) genel değerleri tutabileceğim bir ünite;

Bu konuda yardımlarınızı bekliyorum şimdiden teşekürler
Kullanıcı avatarı
fatihtolgaata
Üye
Mesajlar: 382
Kayıt: 04 Mar 2004 09:46
Konum: K.çekmece / İstanbul
İletişim:

Mesaj gönderen fatihtolgaata »

Ne yaptığınızı tam anlayamadım ama çok kasmışsınız gibi geldi bana. Çünkü bpl içindeki herhangi bir şeyi,dll'in aksine, çok rahat bir şekilde başka uygulama ve bpl'ler içinde de kullanabilirsiniz. İlk olarak mesela, bir paketden başka pakete ulaşmak için o paketin Requires bölümüne diğer paketin DCP dosyasını eklemek ve sonra da istediğiniz uniti uses kısmında kullanmanız yeterli. İkinci olarak bir uygulama içinden (dll ya da exe), bir pakete ulaşmak için, project options'dan Build with runtime packages içinden paketin DCP dosyasını seçmelisiniz. Bu kısma eklediğiniz paketler exe'ye ya da dll'e gömülmeyecektir. Yani harici olarak search path'de bulunması şart. Bu yüzden burada sadece paketiniz durabilir. Ardından uygulama içinden bpl içindeki istediğiniz unite uses bloğuna eklemek ile ulaşabilirsiniz. Paketinizi exe içine gömmek istiyorsanız design paketi olarak eklemelisiniz. Tabi bu statik çağırımdır. Dinamik çağırım biraz daha karmaşık. Ek olarak bir hatırlatma, paketinizin unitleri ile projenizin unitlerini aynı klasöre koymayın. Genelde dcp eklemeyi unutuyoruz ve implicit import hatası alıyoruz.

vesselam.
Kullanıcı avatarı
cihan
Üye
Mesajlar: 65
Kayıt: 02 Ağu 2005 03:34

Mesaj gönderen cihan »

fatihtolgaata yazdı:Ne yaptığınızı tam anlayamadım ama çok kasmışsınız gibi geldi bana. Çünkü bpl içindeki herhangi bir şeyi,dll'in aksine, çok rahat bir şekilde başka uygulama ve bpl'ler içinde de kullanabilirsiniz. İlk olarak mesela, bir paketden başka pakete ulaşmak için o paketin Requires bölümüne diğer paketin DCP dosyasını eklemek ve sonra da istediğiniz uniti uses kısmında kullanmanız yeterli. İkinci olarak bir uygulama içinden (dll ya da exe), bir pakete ulaşmak için, project options'dan Build with runtime packages içinden paketin DCP dosyasını seçmelisiniz. Bu kısma eklediğiniz paketler exe'ye ya da dll'e gömülmeyecektir. Yani harici olarak search path'de bulunması şart. Bu yüzden burada sadece paketiniz durabilir. Ardından uygulama içinden bpl içindeki istediğiniz unite uses bloğuna eklemek ile ulaşabilirsiniz. Paketinizi exe içine gömmek istiyorsanız design paketi olarak eklemelisiniz. Tabi bu statik çağırımdır. Dinamik çağırım biraz daha karmaşık. Ek olarak bir hatırlatma, paketinizin unitleri ile projenizin unitlerini aynı klasöre koymayın. Genelde dcp eklemeyi unutuyoruz ve implicit import hatası alıyoruz.

vesselam.
paketler dinamik olarak yükleniyor.
dinamik olarak yüklenen bir paketteki formdan ana formdaki değişkenin değerini okumak gibi
Kullanıcı avatarı
fatihtolgaata
Üye
Mesajlar: 382
Kayıt: 04 Mar 2004 09:46
Konum: K.çekmece / İstanbul
İletişim:

Mesaj gönderen fatihtolgaata »

dinamik olarak yüklerken, uygulamanız host'tur, bpl host uygulama değildir. Yani exe dosyası da bpl gibi bir şeyleri export edecek ki, paket dosyası da exe'den bir şeyler alabilsin. Aksi durumda, uygulamadan pakete parametre yollayıp çıktı alabilirsiniz. Bu durumda ana forma ulaşmak istiyorsanız, bpl'deki formu da oluşturduğunuzu varsayarak, bpl içinde şöyle bir şey işinizi görebilir:

Kod: Tümünü seç

var
  MainForm: TForm;
begin
  MainForm := Application.FindComponent('FormunIsmi') as TForm;
  //ya da Application.MainForm da olabilir.
  ShowMessage(MainForm.edtBirEdit.Text);
kolay gele
Cevapla