1

Konu: Formun içinde Getfile fonksiyonu ile açılan pencereyi görüntülemek

Sevgili Arkadaşlar,
getfile fonksiyonu ile açılan pencereyi bir formun içinde göstermek mümkün mü? Mümkünse nasıl yapabilirim?
Bir form yaptım bu formda gördüğüm bilgilere göre belli bir klasörü açıp içindeki dosyaları silmek, veya adlarını değiştirmek istiyorum.
Şimdi bu problemi şöyle çözdüm ama hem görünüm yakışıksız oldu hem de içime sinmedi:
Program içerisinden getdir ile klasörü buluyorum.
Sonra bu klasöre gidip getfile ile istediğim tip dosyaları görüntülüyorum.
Sonra çalıştığım klasöre dönüp bilgi formunu açıyorum. Ve yapmak istediğim değişiklikleri formda gördüğüm bilgilere göre yapıyorum.
Acaba bu açtığım klasördeki dosyaları formun içerisinde gösterebilir miyim veya en azından getfile pencersi ile formu bir şekilde yanyana yapıştırabilir miyim?
Yardım edecek arkadaşlara şimdiden çok teşekkür ederim.
Sevgilerimle.
Erdal

2

Re: Formun içinde Getfile fonksiyonu ile açılan pencereyi görüntülemek

RowSourceType'i 7 (Files) olan listbox bir cozum olabilir.

O olmasin dersen, grid ya da gene listbox olur:

Visual Fox Pro
lcFolder = getdir()

adir(laFiles, addbs(m.lcFolder)+'*.*')
thisform.Addproperty('aFiles[1]')
acopy(laFiles, thisform.aFiles)
thisform.listbox.RowSourceType=5
thisform.listbox.RowSource = 'thisform.aFiles'

3

Re: Formun içinde Getfile fonksiyonu ile açılan pencereyi görüntülemek

Bu da filer.dll ornegi, browse ile. Browse yerine grid kullanabilirsin (Filer.dll'i Tools\Task Pane\Filer da kullaniyor):

Visual Fox Pro
lnSeconds = Seconds()

lcStartDir = "c:\temp"
lnFiles = GetTree(lcStartDir,'*.dbf;*.cdx;*.fpt', 'myCursor', .t.)
*lnFiles = GetTree(lcStartDir,'*.*', 'myCursor', .t.)
Local array arrSizeTot[1]
Select sum(FileSize) from myCursor into array arrSizeTot
? Seconds()-m.lnSeconds
? trans(iif(_Tally>0,arrSizeTot,0))+' bytes in '+trans(lnFiles)+' files.'
Select * from myCursor order by filepath,filename
 
Function GetTree
Lparameters tcStartDir,tcSkeleton,tcCursorName,;
  tlSubfolders,;
  tlWholeWords,tlIgnoreCase,tlSearchAnd,tcSearch1,tcSearch2,tcSearch3
Create Cursor (tcCursorName) ;
  (filepath c(250), filename c(250), ;
  FileSize i, fattr c(8), createtime T, lastacc T, lastwrite T)
Local oFiler, lnFound
oFiler = Createobject('filer.fileutil')
With oFiler
  .SearchPath = tcStartDir
  .FileExpression = tcSkeleton && Search for skeleton
  .Subfolder   = iif(tlSubfolders,1,0)  && Check subfolders
  .IgnoreCase  = iif(tlIgnoreCase,1,0)
  .WholeWords  = iif(tlWholeWords,1,0)
  .SearchAnd   = iif(tlSearchAnd,1,0)
  .SearchText1 = iif(empty(tcSearch1),"",tcSearch1)
  .SearchText2 = iif(empty(tcSearch2),"",tcSearch2)
  .SearchText3 = iif(empty(tcSearch3),"",tcSearch3)
  lnFound = .Find(0)
  For ix=1 To lnFound
    With .Files(ix)
      If !(Bittest(.Attr,4) And .Name = '.')
        Insert Into (tcCursorName) ;
          (filepath, filename, FileSize, fattr, createtime, lastacc, lastwrite)  ;
          values ;
          (.Path, .Name, .Size, Attr2Char(.Attr), ;
          Num2Time(.Datetime), Num2Time(.LastAccessTime), Num2Time(.LastWriteTime))
      Endif
    Endwith
  Endfor
Endwith
Return lnFound
 
Function Num2Time
Lparameters tnFloat
Return Dtot({^1899/12/30}+Int(tnFloat))+86400*(tnFloat-Int(tnFloat))
 
Function Attr2Char
Lparameters tnAttr
Return ;
  IIF(Bittest(tnAttr,0),'RO','RW')+;
  IIF(Bittest(tnAttr,1),'H','_')+;
  IIF(Bittest(tnAttr,2),'S','_')+;
  IIF(Bittest(tnAttr,4),'D','_')+;
  IIF(Bittest(tnAttr,5),'A','_')+;
  IIF(Bittest(tnAttr,6),'E','_')+;
  IIF(Bittest(tnAttr,7),'N','_')

4

Re: Formun içinde Getfile fonksiyonu ile açılan pencereyi görüntülemek

Bu da Shell.Application (explorer yani):

Visual Fox Pro
oShell=Createobject("shell.application")

GetFileList( HOME(),'FileList')
 
Select Cast(filePath As c(250)) From fileList
 
Procedure GetFileList(tcSourceFolder, tcCursorName, tlSubFolders)
  Local oFile
  If !Used(m.tcCursorName)
    Create Cursor (m.tcCursorName) (filePath m)
  Endif
  If Type('oShell.NameSpace(m.tcSourceFolder)') = 'O' ;
      And !Isnull(oShell.NameSpace(m.tcSourceFolder))
    For Each oFile In oShell.NameSpace(m.tcSourceFolder).items
      If !oFile.IsLink And oFile.IsFolder AND m.tlSubFolders
        GetFileList(oFile.Path,m.tcCursorName, m.tlSubFolders)
      Else
        Insert Into (m.tcCursorName) Values (oFile.Path)
      Endif
    Endfor
  Endif
Endproc

5

Re: Formun içinde Getfile fonksiyonu ile açılan pencereyi görüntülemek

Visual Fox Pro
PUBLIC oform1

oform1=NEWOBJECT("form1")
oform1.Show
RETURN
DEFINE CLASS form1 AS form
    Top = 0
    Left = 0
    Height = 317
    Width = 528
    DoCreate = .T.
    Caption = "Form1"
    Name = "Form1"
 
    ADD OBJECT brw AS olecontrol WITH ;
        Top = 5, ;
        Left = 4, ;
        Height = 308, ;
        Width = 518, ;
        Anchor = 15, ;
        Name = "brw", ;
        Oleclass = "shell.explorer"
 
    PROCEDURE brw.Init
        this.navigate(sys(2003))
    ENDPROC
ENDDEFINE

bu işine yararmı bilmiyorum, benim çok işime yarıyor
ancak sol tarafta çıkan ortak görevler nasıl kaldırılır bilen arkadaş varsa daha çok işime yarayacak smile

6

Re: Formun içinde Getfile fonksiyonu ile açılan pencereyi görüntülemek

Yardımcı olan tüm arkadaşlara sonsuz teşekkürler.
İlk fırsatta deneyip sonucu bildireceğim.
Sevgilerimle.
Erdal

7

Re: Formun içinde Getfile fonksiyonu ile açılan pencereyi görüntülemek

Sevgili Arkadaşlar,
Sevgili Metinin yolladığı program tam benim istediğim işi gördü. Kendisine teşekkür ederim. Yanlız pencerede dosyalar küçük resimlerle görüntüleniyor. Bunu ayrıntılar olarak görüntülemenin bir yolu var mı?
Ve asıl sıkıntı çekeceğim konu ise bu formu başka bir formun içine nasıl entegre edebilirim?
Belki bu sorularım sizlere basit gelebilir ama benim VFP bilgim henüz emekleme aşamasında olduğundan umarım hoşgörünüzü benden esirgemezsiniz.
Sevgi ve teşekkürlerimle.
Erdal

8

Re: Formun içinde Getfile fonksiyonu ile açılan pencereyi görüntülemek

Selam;

Erdal Abi kendi formunu edit et (form designer kullandığını varsayıyorum)
toolbardan "ActiveX Control (OleControl)" butonunu tıkla gelen listeden "Microsoft Web Browser" kontrolunü seç
adını "winexplorer" olarak değiştir ve aşağıdaki kodları formunun herhangi bir yerinde kullan

Visual Fox Pro
folderpath="c:\" && Kendi klasörün

thisform.winexplorer.navigate(folderpath)
do while thisform.winexplorer.readyState # 4
enddo
thisform.winexplorer.Document.CurrentViewMode=4 && Ayrıntılı Liste Görünümü

9

Re: Formun içinde Getfile fonksiyonu ile açılan pencereyi görüntülemek

Sevgili Metin,
Yardımların sayesinde program tam istediğim gibi oldu. Çok teşekkür ederim.
Sadece öğrenmek amacı ile soruyorum: Açılan explorer penceresinde belli bir dosya uzantılı dosyaları da gösterebilirmiyim? Örneğin *.doc veya *.txt gibi. İleride yapacağım programlarda bu, çok işime yarayabilir.
Sevgilerimle.
Erdal

10

Re: Formun içinde Getfile fonksiyonu ile açılan pencereyi görüntülemek

Selam;

Erdal Abi Windows Explorer ile klasör açınca dosya filtreleme yapamıyorsun (XP için biliyorum)
belirli dosyaları filtreleyerek görmek istersen yukarıda Çetin Üstadın verdiği kodları kullanman gerekir.

11

Re: Formun içinde Getfile fonksiyonu ile açılan pencereyi görüntülemek

Sevgili Metin,
Yardımların için çok teşekkür ederim. Şimdilik istediğim gibi bir programı yardımların sayesinde yazabildim. Filtreleme gerektiği zaman Sevgili Çetinin kodlarını denemeye çalışacağım.
Yardımcı olan tüm arkadaşlara tekrar tekrar teşekkür ederim.
Sevgilerimle.
Erdal.