Adim adim Anadolu:)
1) Gecici bir form yarat (saklamayacagiz). Modify Form xx [enter]
2) Forma sunlari koy:
Bir label ("Dosyayi Secin" filan gibi bir baslik)
Bir textbox (adini txtDosya yap)
Bir commandbutton (cmdDosya, caption: ...)
ve son olarak Microsoft Common Dialog Control (activex - kitap iconuna tiklayip cikanlardan sececeksin, eger henuz eklemediysen once menu "Tools\options\Controls"tan ekle.
3) 2 Commandbutton'dan cmdDosya'nin click kodunu yaz:
Visual Fox Pro
#define cdlOFNFileMustExist 0x1000
#define cdlOFNHideReadOnly 0x4
#define cdlOFNNoChangeDir 0x8
#define cdlOFNPathMustExist 0x800
with This.Parent.CommDlg
.DialogTitle = this.Parent.lblSelect.Caption
* Set flags
.Flags = cdlOFNPathMustExist+cdlOFNHideReadOnly+cdlOFNNoChangeDir+iif(this.Parent.lSaveAs,0,cdlOFNFileMustExist)
* Set filters
.Filter = this.Parent.FilterList
* Specify default filter
.FilterIndex = this.Parent.FilterIndexPos
.DefaultExt = this.Parent.DefaultExtension
* Display the Open dialog box
.ShowOpen
if !empty(.Filename)
this.Parent.txtDosya.Value = .filename
endif
endwith
4) Bu kontrolleri istedigin gibi gorsel acidan duzenle.
5) Ucunu birden sec, menu 'File\Save as class". Bir class library ve class adi ver - ornegin class adi dosyaSec olsun.
6) O classa bazi propertyler ekle:
FilterList (filtreleyecegi dosyalar)
* Default degerini istewdigin gibi yaz benimki:
All Files (*.*)|*.*|Databases (*.dbc)|*.dbc|Tables (*.dbf)|*.dbf|Forms (*.scx)|*.scx|Classes (*.vcx)|*.vcx
FilterIndexPos (baslangicta secili olan filtre indexi)
Benimki: 3 (yani dbf'ler)
lSaveAs
Default .F. Bu .T. ise o zaman dosya olmak zorunda degil. Yeni dosyayi surada su isimle sakla cinsi secimler icin.
Su ana kadar yaptigin bir adet "dosya secim" kontrolunu class olarak yapmak oldu. Artik dosya sectirecegin her yerde bunu kullanabilirsin.
Simdi bunu kullanacagin yere koy (ister surukle birak, ister toolbardan sec ...). Calistirmakta kullanacagin CommandButton'i koy (dikkat et, calistiran butonu ayri tuttuk. Dosya secme cok kullanilan bir is ama o dosyanin calistirilmasi nadir, o yuzden class'in parcasi yapmadik. Bir alt class yapabiliriz ama bence gereksiz). Caption'ini yaz ve click koduna sunu koy:
Visual Fox Pro
local lcFileName
lcFileName = trim(thisform.dosyaSec1.txtDosya.Value)
if !empty(m.lcFileName) and file(m.lcFileName)
declare long ShellExecute in "shell32.dll" ;
long hwnd, string lpszOp, ;
string lpszFile, string lpszParams, ;
string lpszDir, long nShowCmd
ShellExecute(0,'Open',m.lcFileName,0,0,1)
endif
Bu kadar.