Duyuruyu Kapat
Facebook Gözat
Twitter Gözat

Dosya uzantisini kaydedip belirlenen programla çalıştırıyor ama (...) / Niye?

Konu, 'Pascal / Delphi / Delphi.NET' kısmında Sedat Atif tarafından paylaşıldı.

  1. Sedat Atif

    Sedat Atif Daimi Üye

    Kayıt:
    26 Ekim 2002
    Mesajlar:
    622
    Beğenilen Mesajlar:
    0
    Meslek:
    Öcü
    Şehir:
    Fâni bir yer
    Delphiturk'den şöyle bir kod buldum, ancak bir sorum var. Kod, dosya uzantisini kaydedip belirlenen programla çalıştırıyor. Örnekteki gibi .den dosyasını notepad açaliliyor. Ama benim metin editörü açamıyor. Açtığını zannediyor ama içi boş. Programımın bunu açabilmesi için oncreate'e birşeyler yazmalıyım herhalde. Ne yazmalıyım? :)
     
  2. hmustak

    hmustak PersianBulls

    Kayıt:
    29 Mayıs 2002
    Mesajlar:
    4,607
    Beğenilen Mesajlar:
    0
    Meslek:
    BT/QA
    Şehir:
    Persian
    çağırdığın dosya "deneme dosyası" ise bitişik olarak yazıp denesene öncelikle, yada "_" ile birleştirsen. Saat geç, tam dikkatimi veremesemde ilk etapda görebildiğim bu. Yarın akşam türkçeleştiririze hem...

    beni MSN kullanıyosan ADD'le, ilkel bir teknolojide olsa ( :) ) mailleşebiliriz.


    msn + mail : hmustak@ceviz.net


    not : Siteye giren güzel (olduğunu iddia eden) kızlar da ekleyebilirler :)
     
  3. Sedat Atif

    Sedat Atif Daimi Üye

    Kayıt:
    26 Ekim 2002
    Mesajlar:
    622
    Beğenilen Mesajlar:
    0
    Meslek:
    Öcü
    Şehir:
    Fâni bir yer
    Merhaba;

    Ne yazık ki MSN kullanmıyorum. Aslında MS'in internet ürünlerine pek güvenmiyorum. Bu belki bir önyargı, ama MS servislerinin Hacker'ların birinci hedefi olduğu da bir gerçek.

    Bu arada, cevabını pek anlayamadım. :)

    Saygılar.
     
  4. hmustak

    hmustak PersianBulls

    Kayıt:
    29 Mayıs 2002
    Mesajlar:
    4,607
    Beğenilen Mesajlar:
    0
    Meslek:
    BT/QA
    Şehir:
    Persian
    henüz eve geldim, bakdım...

    RegisterExtension('.den', 'Deneme Dosyasi', 'C:\windows\notepad.exe')

    satırını nda dosya ismini bitişik yazıp birdene. Deneme dosyası yerine sadece deneme adını kullan mesela.

    Sonra c:/windows/notepad.exe adresini
    %SystemRoot%\system32\NOTEPAD.EXE

    olarak bi dene (ApPath olan değişken).

    HKEY_CLASSES_ROOT\txtfile\DefaultIcon daki dizi değerini
    %SystemRoot%\system32\shell32.dll,-152
    olacak şekilde değiştir.

    Şimdilik deneyelim, olmazsa daha sonra beraber kafa yorarız :)
    Ben denemdim, sadece fikir yürütüyorum. Yanlış ve hataları üstleniyorum :D

    :cool:
     
    Son düzenleme yönetici tarafından yapıldı: 29 Kasım 2002
  5. Sedat Atif

    Sedat Atif Daimi Üye

    Kayıt:
    26 Ekim 2002
    Mesajlar:
    622
    Beğenilen Mesajlar:
    0
    Meslek:
    Öcü
    Şehir:
    Fâni bir yer
    Teşekkürler ama olmuyor. Olmuyor çünkü sorun ondan değil (gibi geliyor bana).

    Biraz daha açık anlatayım.

    Normalde notepad .txt uzantılı dosyaların üzerine çift tıklayınca açar ya. Ya da bir program kurduğumuz zaman (mesela Delphi) bazi uzantilari kendine ayırıp, o uzantılı dosyalara çift tıklayınca sanki File|Open demiş gibi açar ya. Ben de öyle yapmak istiyorum.

    Notepad'ı çok kullanıyorum. Ama CTRL+S tuş kombinasyonunu bile kabul etmemesinden sıkıldım. Kendime bir metin editörü yaptım (yapıyorum daha doğrusu). File|Open deyince sorun yok. Dosyayı drag&drop da yapabiliyorum. Ama hızımı arttırması için .txt uzantısını kaydettirmeli ve benim programımla açılmasını sağlamalıyım.

    Şimdi. Yukarıdaki kodu olduğu gibi kullanınca notepad'ın .den uzantılı dosyaları düzgün şekilde açtığını görüyorum. Bunu nasıl kontrol ediyorum? Önce bir .txt dosyası oluşturup içine birşeyler yazıyorum. Sonra bu .txt dosyasının uzantısını .den haline getiriyorum. Üzerine çift tıklayınca notepad dosyayı güzel güzel açıyor, metni görebiliyorum.

    Ancak 'C:\windows\notepad.exe' satırı yerine kendi programımın adresini yazdığımda, yani .den dosyalarının benim programımla açılmasını söylediğimde, dosyanın üzerine çift tıklayınca benim programım açılıyor, ama dosyayı açmıyor. Ben de diyorum ki, herhalde program açılırken nasıl açıldığını kontrol etmeli ve eğer bir dosyanın üzerine çift tıklanması sonucunda açılmışsa o dosyayı adam gibi açmalı.

    İşte hepsi bu. :D

    Teşekkürler.
     
  6. Sedat Atif

    Sedat Atif Daimi Üye

    Kayıt:
    26 Ekim 2002
    Mesajlar:
    622
    Beğenilen Mesajlar:
    0
    Meslek:
    Öcü
    Şehir:
    Fâni bir yer
    Bkz: Bir sonraki mesaj. :D
     
    Son düzenleme yönetici tarafından yapıldı: 2 Aralık 2002
  7. Sedat Atif

    Sedat Atif Daimi Üye

    Kayıt:
    26 Ekim 2002
    Mesajlar:
    622
    Beğenilen Mesajlar:
    0
    Meslek:
    Öcü
    Şehir:
    Fâni bir yer
    Şu şekilde çözülebiliyor (göründüğü kadarıyla).

    Şunu ekliyoruz. (Problemimi çözen asıl kod bu birincisi diğerleri açıklama)

    Kod:
    procedure TForm1.FormShow(Sender: TObject);
    begin
    /// exenin üzerine dosya sürüklenince ya da register edilmiş
    /// uzantılı dosyanın üzerine çift tıklanında düzgün şekilde
    /// açılmasını sağlıyor.
     if (ParamCount > 0) and FileExists(ParamStr(1)) then
     begin
        filename:=(ParamStr(1)); 
    //"filename" açık olan dosyanın adını taşıyan string
        dosyaac;
        end;
    end;
    -

    "dosyaac" prosedüründe de
    Kod:
     Memo1.Lines.LoadFromFile (FileName);
    vs var.

    -
    Filename şu şekilde gelebilir (bir muhtemel yol)
    Kod:
      if OpenDialog1.Execute then
        begin
          Filename := OpenDialog1.FileName;
          dosyaac;
        end; 
    -

    Bunları ekleyince istersek doyayı program iconun üzerine sürükleyerek ister register edilmiş uzantılı dosyaya çift tıklayarak açabiliyoruz.

    .den dosyası düzgün şekilde açılabiliyor.
    (Ama iconu değişmiyor. Niye?)

    Saygılar...





    <not>
    hmustak, bu Türkçe tag'ler benim çok hoşuma gitti, biraz geliştirelim ne dersin? :D
    Şu an için mevcut tag'ler:

    Kod:
    <$aka>
    <azda_olsa_ciddi>
    </azda_olsa_ciddi>
    </$aka>
    
    <espri>
    </espri>
    
    <not>
    </not>
    
    <$aka deger="azda_olsa_ciddi">
    
    <not deger="onemli">
    <not kime="Gates'e">
    
    <geyik>
    </geyik>
    
    <reklam>
    </reklam>
    
    <sacmalik>
    </sacmalik>
    

    </not>
    :s008:
     
  8. hmustak

    hmustak PersianBulls

    Kayıt:
    29 Mayıs 2002
    Mesajlar:
    4,607
    Beğenilen Mesajlar:
    0
    Meslek:
    BT/QA
    Şehir:
    Persian
    bidakka bidakka, biyerlerde bişiler miatladım ben.
    Sen kaydettiğin *.sdt uzantılı (attım) dosyayı dizin içinde çift tıklattığında senin programınam atanarak açılmasını istemiyormuydun ? yoksa ben mi yanlış şeylere kafa yoruyorum ??

    ayrıca yeni tag dizilimine verdiğin Method'larda göz kamaştırıcı. Aklıma TUPOL geldi birden :):)
     
  9. Sedat Atif

    Sedat Atif Daimi Üye

    Kayıt:
    26 Ekim 2002
    Mesajlar:
    622
    Beğenilen Mesajlar:
    0
    Meslek:
    Öcü
    Şehir:
    Fâni bir yer
    Hayır, yanlış şeye kafa yormuyorsun. Aynen öyle istiyorum. Ve bu kodu yazınca oluyor.
     
  10. Sedat Atif

    Sedat Atif Daimi Üye

    Kayıt:
    26 Ekim 2002
    Mesajlar:
    622
    Beğenilen Mesajlar:
    0
    Meslek:
    Öcü
    Şehir:
    Fâni bir yer
    Ayrıca "kafa yorduğun" için teşekkür ederim.
     
  11. hmustak

    hmustak PersianBulls

    Kayıt:
    29 Mayıs 2002
    Mesajlar:
    4,607
    Beğenilen Mesajlar:
    0
    Meslek:
    BT/QA
    Şehir:
    Persian
    Memo1.Lines.LoadFromFile (FileName);

    ve

    if OpenDialog1.Execute then
    begin
    Filename := OpenDialog1.FileName;
    dosyaac;
    end;


    Bunları yenibaşlayan Delphicilerde bilir. Ama tıkladığın *.sdt dosyasını açılması ile ne alaka, anlamış değilim ??
     
  12. Sedat Atif

    Sedat Atif Daimi Üye

    Kayıt:
    26 Ekim 2002
    Mesajlar:
    622
    Beğenilen Mesajlar:
    0
    Meslek:
    Öcü
    Şehir:
    Fâni bir yer
    :(

    :aglama:

    Diyelim ki elimizde basit bir program var.
    Bilirsin. TXT leri açıyor, değiştiriyor, kaydediyor.
    (Mesela OpenDialog, SaveDialog, Memo, birkaç buton vs'den oluşsun).
    Bu programda "OpenDialog1.Execute" tarzı şeyler olması normal.
    Burada bir sorun yok zaten.

    Sorun: Bu basit program, topiğin başındaki kod ile TXT uzantisi programa register edilse bile, dosyanın üzerine Windows Explorer penceresi içinde çift tıklayınca açmıyor.

    Kitapların cd'lerinden alınmış başka örnek metin editörleri de açmıyor.

    Ama
    Kod:
    procedure TForm1.FormShow(Sender: TObject);
    begin
     if (ParamCount > 0) and FileExists(ParamStr(1)) then
     begin
        filename:=(ParamStr(1)); 
        dosyaac;
        end;
    end;
    kodunu yazınca açılıyor.

    Diğerleri sadece açıklama demiştim.

    Sadece, Windows Explorer içinde nasıl bir TXT dosyasına çift tıklayınca NotePad bu dosyayı açıyorsa, aynı şekilde benim programımın da açmasını istemiştim o kadar.

    Ve bu kodu yazınca açıyor. Sorun kalmadı yani.

    Teşekkür ederim.


    <not>
    - Delphi4 kullanıyorum.
    - Bir süre foruma bakamayabilirim, bu da cevap yazamamam anlamına geliyor, kusura bakmayın.
    </not>
     
    Son düzenleme yönetici tarafından yapıldı: 14 Eylül 2003
  13. hmustak

    hmustak PersianBulls

    Kayıt:
    29 Mayıs 2002
    Mesajlar:
    4,607
    Beğenilen Mesajlar:
    0
    Meslek:
    BT/QA
    Şehir:
    Persian
    özledik, nerelerdesin??
     
  14. Sedat Atif

    Sedat Atif Daimi Üye

    Kayıt:
    26 Ekim 2002
    Mesajlar:
    622
    Beğenilen Mesajlar:
    0
    Meslek:
    Öcü
    Şehir:
    Fâni bir yer
    Teşekkürler.
    Buralardayım...