1

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.

2

Re: Word belgelerini Düzenlemek

Visual Fox Pro
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

3

Re: Word belgelerini Düzenlemek

Ç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.

4

Re: Word belgelerini Düzenlemek

DoumentBeforeSave'i degistirmen gerekli:


Visual Fox Pro
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

5

Re: Word belgelerini Düzenlemek

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 Pro
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.

6

Re: Word belgelerini Düzenlemek

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.

ozcan yazdı:

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 Pro
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.