TSaveDialog - FilterIndex değeri yanlış dönüyor. ( D2007 )

Yazdığınız makaleleri ve üyelerimizin işine yarayacağını düşündüğünüz kodlarınızı gönderebilirsiniz. Bu foruma soru sormayın!
Cevapla
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

TSaveDialog - FilterIndex değeri yanlış dönüyor. ( D2007 )

Mesaj gönderen mrmarman »

Merhabalar.

- Bugüne değin Delphi BDS (Win32) kullanıyorken bir de Vista uyumunu göreyim diye Delphi 2007 (Win32) deneyim dedim. Tabiri yanlış olmazsa -Dakika 1- golü yedim.

(Kullandığım İşletim sistemi Windows Vista Home Premium )

Şöyle ki :

- Daha önce TSaveDialog lazım olduğunda kalabalıklık yapmasın diye Form'a koymaz dinamik olarak lazım olduğu yerde CREATE eder, sonra da işim bir daha olmayacağından FREE ederdim.

- TSaveDialog kullanırken olmazsa olmaz özelliklerinden FilterIndex özelliği ile, kullanıcının hangi dosya tipiyle "kaydetmek istediğini" / "tercih kullandığını" okuyup ona göre basit bir CASE bloğuyla işlem gerçekleşirdi.

- Sorunsal : FilterIndex değeri, If EXECUTE sorgusunda BDS2006 ve daha eski sürümlerde herhangi bir ek uygulamaya gerek kalmaksızın kullanıcının tercihine göre kendiliğinden güncellenirken, Delphi 2007 ile varsayılan değerde kaldığını farkettim. Bunun varsayılan değerden kullanıcının tercihi doğrultusunda değiştiğini görmek için illaki de boş ta olsa bir tane OnTypeChange eventini eklemek gerekiyor olmuş.

- Bu BUGGEREKLİLİK mi tartışmaya açık ama daha önce bu şekilde tercih sunanlar için bilinmesi gereken bir durum olduğunun altını çizmek istedim.

- Artık her formda (Sender: TObject); parametreli boş bir EVENT koyup, bu ve benzeri varsa başkaları varsa hepsini oraya yönlendirmek lazım gelir olduğunu bilmek beni üzdü.

Örnek Kod :

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
Var
  Secili : String;
begin
  Secili := '';
  With TSaveDialog.Create(Nil) do begin
    // eskiden aşağıdaki bu tek satır olmadan da çalışırdı...
    // Dilerseniz deneyebilirsiniz, başına // ekleyin ve devre dışı bırakın...
    // ------------------------------------------------------
    OnTypeChange := KulkaEvent;
    Filename    := 'TEST';
    Filter      := 'DOC Dosyaları|*.doc|XLS Dosyaları|*.xls|CSV Dosyaları|*.csv';
    FilterIndex := 2; // Varsayılan olarak XLS olanlar seçilsin dedik..
    if Execute then begin
      case FilterIndex of
        1: Secili := 'DOC Dosyaları|*.doc';
        2: Secili := 'XLS Dosyaları|*.xls';
        3: Secili := 'CSV Dosyaları|*.csv';
      end;
      ShowMessage( Secili );
    end;
    Free; // With SaveDialog
  end;
end;

Kod: Tümünü seç

procedure TForm1.KulkaEvent(Sender: TObject);
begin
  ; // bu şekilde boş bir Event koymazsak kullanıcı tercihini yapsa da / değiştirse de FilterIndex değişmiyor..
end;
// Bilmeyenler için
// KuklaEvent'i Private altında otomatik olarak oluşturmak için üzerinde "CTRL + SHIFT + C" basın. Ya da aşağıdaki kısmı da en yukarı ekleyin.

Kod: Tümünü seç

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    procedure KulkaEvent(Sender: TObject);
    { Private declarations }
  public
    { Public declarations }
  end;
Resim
Resim ....Resim
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: TSaveDialog - FilterIndex değeri yanlış dönüyor. ( D2007 )

Mesaj gönderen aslangeri »

Burda daha güzel durdu.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: TSaveDialog - FilterIndex değeri yanlış dönüyor. ( D2007 )

Mesaj gönderen mrmarman »

Teşekkürler.

Başlangıçta soru olarak başladı, sonradan çözümü üretince altına örnekle sonucu eklemek gereğini duymuştum. Ondan soru makaleye dönüştü.
Resim
Resim ....Resim
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Re: TSaveDialog - FilterIndex değeri yanlış dönüyor. ( D2007 )

Mesaj gönderen sadettinpolat »

http://qc.codegear.com/wc/qcmain.aspx?d=44401
http://qc.codegear.com/wc/qcmain.aspx?d=44393

delphi 2007 ile vista altinda calisirken meydana gelen bir bugmis. sizin yaptiginiz gibi typeChange olayina bos bir metod atamak problemin cozumlerinden biri olarak gosterilmis. delphi 2007 nin guncellemelerini yuklerseniz sanirim bu problem ortadan kalkacaktir.
"Sevmek, ne zaman vazgececegini bilmektir." dedi, bana.

---
http://sadettinpolat.blogspot.com/
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: TSaveDialog - FilterIndex değeri yanlış dönüyor. ( D2007 )

Mesaj gönderen mrmarman »

:) Nedenini aramış ama bulamamıştım. İşin garibi, CodeGear 2007 ile yaptığım daha ilk uygulamada bu hata çıkınca çok şaşırmıştım. Bu linkten yola çıkarak olası karşılaşacağım diğer sorunlara da bakabilirim.

Teşekkürler.
Resim
Resim ....Resim
Cevapla