Konu: Word belgelerini Düzenlemek
Word belgelerini VFP 9.0 ile açıp düzenleyip kaydeden fakat bu işlemleri yaparken word den dosya ismine müdahaleyi engelleyen bi koda ihtiyacım var. Başlangıç olabilecek bi örnek olan arkadaşımız varsa sevinirim.
Giriş yapmadınız. Lütfen giriş yapın yada kayıt olun.
fox4um » Microsoft Office Otomasyonu » Word belgelerini Düzenlemek
Word belgelerini VFP 9.0 ile açıp düzenleyip kaydeden fakat bu işlemleri yaparken word den dosya ismine müdahaleyi engelleyen bi koda ihtiyacım var. Başlangıç olabilecek bi örnek olan arkadaşımız varsa sevinirim.
lcGetFile = Getfile('DOC')
Local oword As 'word.application'
oword = Newobject('word.application')
oWordEvents = Newobject("WordEvents",'','',oword)
Eventhandler(oword,oWordEvents)
With oword
.Documents.Open(m.lcGetFile)
.Visible = .T.
.Activate
Endwith
Define Class WordEvents As Session OlePublic
Implements ApplicationEvents2 In "C:\PROGRAM FILES\MICROSOFT OFFICE\OFFICE11\MSWORD.OLB"
oHook = Null
Procedure Init(loHook)
This.oHook = loHook
Endproc
Procedure ApplicationEvents2_Quit() As VOID
? 'User is quitting word',Datetime()
Eventhandler(This.oHook,This,.T.)
Endproc
Procedure ApplicationEvents2_DocumentChange() As VOID
Endproc
Procedure ApplicationEvents2_DocumentOpen(Doc As VARIANT) As VOID
Endproc
Procedure ApplicationEvents2_DocumentBeforeClose(Doc As VARIANT, Cancel As LOGICAL) As VOID
Endproc
Procedure ApplicationEvents2_DocumentBeforePrint(Doc As VARIANT, Cancel As LOGICAL) As VOID
Endproc
Procedure ApplicationEvents2_DocumentBeforeSave(Doc As VARIANT, SaveAsUI As LOGICAL, Cancel As LOGICAL) As VOID
Local lcUserDocName
lcUserDocName = Doc.FullName
Cancel = .T.
? 'Attempted save..Cancelled save...',Datetime()
Local loBalloon,lVisible
loBalloon = Doc.Application.Assistant.NewBalloon
lVisible = Doc.Application.Assistant.Visible
Doc.Application.Assistant.Visible = .T.
With loBalloon
.Heading = "Sorry. VFP doesn't let you to save '" + m.lcUserDocName + "'" + ;
CHR(13)+Chr(10) +;
CHR(13)+Chr(10) +;
"After you respond to this dialog I will return control to VFP dismissing any changes."
.Show()
Endwith
Doc.Application.Assistant.Visible = m.lVisible
#Define wdDoNotSaveChanges 0
Doc.Application.Quit(wdDoNotSaveChanges)
Endproc
Procedure ApplicationEvents2_NewDocument(Doc As VARIANT) As VOID
Endproc
Procedure ApplicationEvents2_WindowActivate(Doc As VARIANT, Wn As VARIANT) As VOID
Endproc
Procedure ApplicationEvents2_WindowDeactivate(Doc As VARIANT, Wn As VARIANT) As VOID
Endproc
Procedure ApplicationEvents2_WindowSelectionChange(Sel As VARIANT) As VOID
Endproc
Procedure ApplicationEvents2_WindowBeforeRightClick(Sel As VARIANT, Cancel As LOGICAL) As VOID
Endproc
Procedure ApplicationEvents2_WindowBeforeDoubleClick(Sel As VARIANT, Cancel As LOGICAL) As VOID
Endproc
Enddefine
Çetin hocam cevabınız için çok teşekkür ederim. Ancak buradaki sorun şu ki bu kod ile belgede yapılan değişiklik hiçbir durumda kaydedilmiyor. Ben sadece dosyada değişiklik yapılanca kullanıcının farklı kaydet ile kaydetmesini engellemek istiyorum. Mesela Ankara.doc dosyasını kullanıcı açıp bazı değişiklikler yaptığında Ankara.doc orjinal hali ile kalacak değişiklik sonrasındaki hali ise mesela Ankara_01.doc ismi ile kaydedilecek. yardımcı olursanız sevinirim. İyi çalışmalar.
DoumentBeforeSave'i degistirmen gerekli:
Procedure ApplicationEvents2_DocumentBeforeSave(Doc As VARIANT, SaveAsUI As LOGICAL, Cancel As LOGICAL) As VOID
Local lcUserDocName, lcMyDocName
lcUserDocName = Doc.FullName
lcMyDocName = "c:\temp\PatronBenim.doc"
If !( Upper(Trim(m.lcUserDocName)) == Upper(Trim(m.lcMyDocName)) ) AND ;
ATC('normal.dot',m.lcUserDocName)=0
Cancel = .t.
Doc.Saveas(m.lcMyDocName)
Doc.Saved = .t.
Local loBalloon,lVisible
loBalloon = Doc.Application.Assistant.NewBalloon
lVisible = Doc.Application.Assistant.Visible
Doc.Application.Assistant.Visible = .T.
With loBalloon
.Heading = TEXTMERGE("Uzgunum [<<m.lcUserDocName>>]"+;
" olarak saklamaniza izin yok. Dosya <<m.lcMyDocName>> olarak saklandi.")
.Show()
Endwith
Doc.Application.Assistant.Visible = m.lVisible
endif
*!* #Define wdDoNotSaveChanges 0
*!* Doc.Application.Quit(wdDoNotSaveChanges)
Endproc
Aşağıdaki kodla word 97/2003 menüsüne müdahele edilerek örneğin SaveAs ve Open menüsünü disable edebiliyor. Aynı işlemler diğer office uygulamalarına da yapılabiliyor. Word 2007/2010 için hata da vermiyor ama menüden disable da etmiyor. Bir fikri olan var mı acaba? Şimdiden teşekkürler.
LOCAL oWord As Word.Application
oWord = Createobject('Word.Application')
oWord.Visible= .T.
oWord.Documents.Add
oWord.CommandBars.Item("File").Controls.Item("Open...").Enabled =.f.
oWord.CommandBars.Item("File").Controls.Item("Save &As...").Enabled =.f.
Office'in yeni versiyonlarında menüden save, save as, open... gibi bazı menü maddelerini görünmez veya pasif yapabiliyor muyuz ? Microsoft Word için bir örnek var mı ?
Teşekkürler.
Aşağıdaki kodla word 97/2003 menüsüne müdahele edilerek örneğin SaveAs ve Open menüsünü disable edebiliyor. Aynı işlemler diğer office uygulamalarına da yapılabiliyor. Word 2007/2010 için hata da vermiyor ama menüden disable da etmiyor. Bir fikri olan var mı acaba? Şimdiden teşekkürler.
Visual Fox ProLOCAL oWord As Word.Application
oWord = Createobject('Word.Application')
oWord.Visible= .T.
oWord.Documents.Add
oWord.CommandBars.Item("File").Controls.Item("Open...").Enabled =.f.
oWord.CommandBars.Item("File").Controls.Item("Save &As...").Enabled =.f.
fox4um » Microsoft Office Otomasyonu » Word belgelerini Düzenlemek