<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://weblogs.foxite.com/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Luis Guillermo Navas Dangel</title><link>http://weblogs.foxite.com/luisnavas/default.aspx</link><description /><dc:language>es-GT</dc:language><generator>CommunityServer 2.0 (Build: 60217.2664)</generator><item><title>The day arrived</title><link>http://weblogs.foxite.com/luisnavas/archive/2008/04/01/5916.aspx</link><pubDate>Tue, 01 Apr 2008 03:52:00 GMT</pubDate><guid isPermaLink="false">8827bd1c-7596-4a8f-b0de-f59ce9ede522:5916</guid><dc:creator>luisn</dc:creator><slash:comments>3</slash:comments><comments>http://weblogs.foxite.com/luisnavas/comments/5916.aspx</comments><wfw:commentRss>http://weblogs.foxite.com/luisnavas/commentrss.aspx?PostID=5916</wfw:commentRss><description>&lt;p&gt;Yes, it's not the end of the world, it's the beginning of a new experience for me. I have started to develop in C#. I was avoiding this move to be honest I didn't want to, but since there are almost no more jobs for a Visual FoxPro Developer, I had to start. I choose&amp;#160; C# over VB, because there are more Jobs, it's an international standard language now and the most important to me IT'S NOT VB. :) &lt;/p&gt;  &lt;p&gt;I know VB it's a new and powerful language, but it was VB, and that is enough for my personal point of view.&lt;/p&gt;  &lt;p&gt;I choose C# over Java, because I'm sadly used to Microsoft Tools, but I will keep my eye on Java, seems impressive for me. &lt;/p&gt;  &lt;p&gt;Also I choose C#, because I think Microsoft it's not going to kill it soon (I hope not...)&lt;/p&gt;  &lt;p&gt;As for my learning, well actually I started learning last week, by reading the great book of .Net for Visual FoxPro Developers, at the same time I downloaded all the Visual Studio 2008 express editions and installed on my PC, next I started to look for videos, since it's an easier way to learn, and I found some videos from Microsoft site, to be exact the site address is &lt;a title="http://msdn2.microsoft.com/en-us/express/aa700758.aspx" href="http://msdn2.microsoft.com/en-us/express/aa700758.aspx"&gt;http://msdn2.microsoft.com/en-us/express/aa700758.aspx&lt;/a&gt; I downloaded all the videos, and started to watching them. To be honest, the first videos where really boring since we as VFP developers have a great amount of knowledge and after those beginners videos I already consider my self an intermediate Developer or at least not beginner.&lt;/p&gt;  &lt;p&gt;The next step I took, was to start transforming my simplest VFP applications to C#, but I tried to follow the good fundamentals I had from VFP. Until now, I must say, that I love the IDE, and I can't stop thinking &amp;quot;Why Microsoft never gave this support to VFP&amp;quot;, seriously why???? with the same amount of support and advertising VFP would be really popular. &lt;/p&gt;  &lt;p&gt;Until now, everything it's ok, the transition hasn't been as hard as I thought it would be.&lt;/p&gt;  &lt;p&gt;Anyway I hope to become a good C# developer, and as always keep on working and developing in my beloved VFP for as long as I can.&lt;/p&gt;  &lt;p&gt;If anyone has done this before has a good free source of information to make this process easier, please put it in the comments.&lt;/p&gt;&lt;img src="http://weblogs.foxite.com/aggbug.aspx?PostID=5916" width="1" height="1"&gt;</description></item><item><title>VFP9 SP2 Available</title><link>http://weblogs.foxite.com/luisnavas/archive/2007/10/12/5144.aspx</link><pubDate>Fri, 12 Oct 2007 13:14:00 GMT</pubDate><guid isPermaLink="false">8827bd1c-7596-4a8f-b0de-f59ce9ede522:5144</guid><dc:creator>luisn</dc:creator><slash:comments>2</slash:comments><comments>http://weblogs.foxite.com/luisnavas/comments/5144.aspx</comments><wfw:commentRss>http://weblogs.foxite.com/luisnavas/commentrss.aspx?PostID=5144</wfw:commentRss><description>&amp;nbsp;&amp;nbsp;&amp;nbsp; Hurry, hurry and download the SP2 for VFP!!!&lt;br&gt;&lt;br&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=a28ddec6-ba3c-49d0-8176-8c0b3fca06d1&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=a28ddec6-ba3c-49d0-8176-8c0b3fca06d1&amp;amp;displaylang=en&lt;/a&gt;&lt;br&gt;&lt;br&gt;Just wondering when will be all the DBI ActiveX available?&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;img src="http://weblogs.foxite.com/aggbug.aspx?PostID=5144" width="1" height="1"&gt;</description></item><item><title>Visual FoxPro Can Create Office Plug In's</title><link>http://weblogs.foxite.com/luisnavas/archive/2007/08/18/4540.aspx</link><pubDate>Sat, 18 Aug 2007 01:10:00 GMT</pubDate><guid isPermaLink="false">8827bd1c-7596-4a8f-b0de-f59ce9ede522:4540</guid><dc:creator>luisn</dc:creator><slash:comments>1</slash:comments><comments>http://weblogs.foxite.com/luisnavas/comments/4540.aspx</comments><wfw:commentRss>http://weblogs.foxite.com/luisnavas/commentrss.aspx?PostID=4540</wfw:commentRss><description>&lt;font size="3"&gt;We had a meeting some time ago in the company where I work, we were speaking in ways for a better use of the bandwidth of our connection. One of the points we talk about, was that every file sent as an attachment, should be a ZIP file. We all agree about this, but during the next week, we find out that not all of the employes were going to follow the rule (some because "they don't know how" even when you have teached them, some because they don't want to, etc). So I tought about a program that will take all the attachments from a message and create a ZIP file from them.&lt;br&gt;&lt;br&gt;A simple search in google, bring me a lot of choices for this, but at the same time, I was reading the newest entry on Craig Boyds blog (wich by the way it's always great), and came to my hands the latest version of his compression library, so yesterday I tried to create a COM server in VFP to create a ZIP file from all the attachments in an email message using Microsoft Outlook.&lt;br&gt;&lt;br&gt;This was a quick work, so I'm sure that anyone can make it better, I have only tried this with Outlook 2003, so please let me know any issues you may have.&lt;br&gt;&lt;br&gt;These are the steps, needed to make it work:&lt;br&gt;&lt;br&gt;&lt;br&gt;1. First every office plug in based in COM, it's based in the following class IDTExtensibility2, what is this? well thanks to our Object browser, was really easy to find out it's the Microsoft Add In Designer, like this image shows&lt;br&gt;&lt;br&gt;&lt;/font&gt;&lt;a href="/photos/luisnavas/IDTExtensibility2.aspx" target="_blank"&gt;&lt;img src="/photos/luisnavas/images/original/IDTExtensibility2.aspx" border="0"&gt;&lt;/a&gt;&lt;br&gt;&lt;font size="3"&gt;&lt;br&gt;&lt;br&gt;So if you ever need to write one, this is the way to go. Drag and drop the interface part into a an empty PRG, and it will create the basic structure to the class we are going to build. After this part, we need to create another class that we are going to bind to the Microsoft Outlook application model, for this part I read all the information in the VFP Help File.&lt;br&gt;&lt;br&gt;Thi&lt;/font&gt;&lt;font size="3"&gt;s is the code, of the two libraries:&lt;br&gt;&lt;/font&gt;&lt;br&gt;&lt;font size="3"&gt;Define Class Connect As session OLEPUBLIC&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Implements IDTExtensibility2 In {AC0714F2-3D04-11D1-AE7D-00A0C90F26F4}#1.0&lt;br&gt;&lt;/font&gt;&lt;font size="3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; oOutlook=Null&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; oProxy=Null&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font size="3"&gt; Procedure IDTExtensibility2_OnConnection(_Application As VARIANT, ConnectMode As VARIANT, AddInInst As VARIANT, custom As VARIANT) As VOID&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Local lcStr As String&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lcStr="Iniciando Servidor en: "+_Vfp.ServerName&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; StrToFile(lcStr,"C:\LogNavas.Log")&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; This.oOutlook=_Application&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; This.oProxy=NewObject("OutlookEvents")&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; If EventHandler(This.oOutlook,This.oProxy) Then&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lcStr=Chr(13)+Chr(10)+"BindEvent Hecho"&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font size="3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; StrToFile(lcStr,"C:\LogNavas.Log",1)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Else&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font size="3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lcStr=Chr(13)+Chr(10)+"No se pudo realizar el BindEvent"&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; StrToFile(lcStr,"C:\LogNavas.Log",1)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EndIf&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; EndProc&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Procedure IDTExtensibility2_OnDisconnection(RemoveMode As VARIANT, custom As &lt;/font&gt;&lt;font size="3"&gt;VARIANT) As VOID&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; EndProc&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font size="3"&gt;Procedure IDTExtensibility2_OnAddInsUpdate(custom As VARIANT) As VOID&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; EndProc&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Procedure IDTExtensibility2_OnStartupComplete(custom As VARIANT) As VOID&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; EndProc&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Procedure IDTExtensibility2_OnBeginShutdown(custom As VARIANT) As VOID&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; This.oOutlook=Null&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; This.oProxy=Null&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; EndProc&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Function Error(nError As Integer, cMethod As String, nLine As Integer)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font size="3"&gt;ComReturnError(cMethod+'&amp;nbsp; Error#='+Str(nError,5)+'&amp;nbsp; línea='+Str(nline,6)+' '+Message(),_VFP.ServerName)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font size="3"&gt;EndFunc&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Procedure Destroy&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; EndProc&lt;br&gt;EndDefine&lt;br&gt;&lt;br&gt;Define Class OutlookEvents As Session OLEPUBLIC&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font size="3"&gt;Implements ApplicationEvents In Outlook.Application&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; oFiles=Null&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cTempPath=""&lt;br&gt;&amp;nbsp;&amp;nbsp; Procedure ApplicationEvents_ItemSend(ITEM AS VARIANT, CANCEL AS LOGICAL) AS VOID&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Local loItem As Object, lcFileName As String, lcPath As String, lnI As Integer, lnTotal &lt;/font&gt;&lt;font size="3"&gt;As Integer, lcStr As String&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lcPath=JustPath(_Vfp.ServerName)+"\"&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Set Library To lcPath+"vfpcompression.fll"&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; This.cTempPath=Addbs(Sys(2023))&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lnTotal=m.Item.Attachments.Count&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; If lnTotal&amp;gt;0 Then&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; This.oFiles=CreateObject("Collection")&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; If File(This.cTempPath+"Adjuntos.Zip") Then&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Delete File (This.cTempPath+"Adjuntos.Zip")&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font size="3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lcStr=Chr(13)+Chr(10)+"Se elimino el archivo Adjuntos.ZIP"&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font size="3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; StrToFile(lcStr,"C:\LogNavas.Log",1)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EndIf&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ZipOpen("Adjuntos.Zip",This.cTempPath,.F.)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lcStr=Chr(13)+Chr(10)+"Se Creo el Archivo Adjuntos.ZIP"&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; StrToFile(lcStr,"C:\LogNavas.Log",1)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; For lnI=lnTotal To 1 Step -1&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lcFileName=This.cTempPath+m.Item.Attachments(lnI).FileName&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font size="3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m.Item.Attachments.Item(lnI).SaveAsFile(lcFileName)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ZipFile(lcFileName,.T.)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font size="3"&gt; lcStr=Chr(13)+Chr(10)+"Se Agregó el Archivo "+lcFileName&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; StrToFile(lcStr,"C:\LogNavas.Log",1)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m.Item.Attachments.Item(lnI).Delete&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; This.oFiles.Add(lcFileName)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font size="3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EndFor&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ZipClose()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m.Item.Attachments.Add(This.cTempPath+"Adjuntos.Zip")&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lcStr=Chr(13)+Chr(10)+"Se Adjunto el Archivo Adjuntos.ZIP"&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; StrToFile(lcStr,"C:\LogNavas.Log",1)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; For lnI=1 To lnTotal&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Delete File (This.oFiles.Item(lnI))&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lcStr=Chr(13)+Chr(10)+"Se Eliminó el Archivo "+This.oFiles.Item(lnI)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; StrToFile(lcStr,"C:\LogNavas.Log",1)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font size="3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EndFor&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EndIf&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; This.oFiles=Null&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font size="3"&gt; EndProc&lt;br&gt;&amp;nbsp;&amp;nbsp; Procedure ApplicationEvents_NewMail() AS VOID&lt;br&gt;&amp;nbsp;&amp;nbsp; EndProc&lt;br&gt;&amp;nbsp;&amp;nbsp; Procedure ApplicationEvents_Reminder(ITEM AS VARIANT) AS VOID&lt;br&gt;&amp;nbsp;&amp;nbsp; EndProc&lt;br&gt;&amp;nbsp;&amp;nbsp; Procedure ApplicationEvents_OptionsPagesAdd(PAGES AS VARIANT) AS VOID&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font size="3"&gt; EndProc&lt;br&gt;&amp;nbsp;&amp;nbsp; Procedure ApplicationEvents_Startup() AS VOID&lt;br&gt;&amp;nbsp;&amp;nbsp; EndProc&lt;br&gt;&amp;nbsp;&amp;nbsp; Procedure ApplicationEvents_Quit() AS VOID&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; If File(This.cTempPath+"Adjuntos.Zip") Then&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Delete File (This.cTempPath+"Adjuntos.Zip")&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font size="3"&gt;&amp;nbsp;&amp;nbsp; EndIf&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Local lcStr As Strin&lt;/font&gt;&lt;font size="3"&gt;g&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lcStr=Chr(13)+Chr(10)+"Se Finalizó la Sesión"&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; StrToFile(lcStr,"C:\LogNavas.Log",1)&lt;br&gt;&amp;nbsp;&amp;nbsp; EndProc&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font size="3"&gt; Function Error(nError As Integer, cMethod As String, nLine As Integer)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ComReturnError(cMethod+'&amp;nbsp; Error#='+Str(nError,5)+'&amp;nbsp; línea='+Str(nline,6)+' '+Message(),_VFP.ServerName)&lt;br&gt;&amp;nbsp;&amp;nbsp; EndFunc&lt;br&gt;&amp;nbsp;&amp;nbsp; Procedure Destroy&lt;br&gt;&amp;nbsp;&amp;nbsp; EndProc&lt;/font&gt;&lt;br&gt;&lt;font size="3"&gt;EndDefine&lt;br&gt;&lt;br&gt;&lt;br&gt;An important part of the code is the EventHandler(This.oOutlook,This.oProxy) function call, think of it like BindEvent() but for COM objects.&lt;br&gt;&lt;br&gt;The last step, is to create a key in the registry:&lt;br&gt;&lt;br&gt;&lt;/font&gt;&lt;font size="3"&gt;[HKEY_CURRENT_USER\Software\Microsoft\Office\Outlook\AddIns\outlookzip.Connect]&lt;br&gt;"LoadBehavior"=dword:00000003&lt;br&gt;"Description"="To create ZIP files in all attachments"&lt;br&gt;"FriendlyName"="Outlook ZIP"&lt;br&gt;&lt;br&gt;This is an image of the registry key:&lt;/font&gt;&lt;br&gt;&lt;font size="3"&gt;&lt;br&gt;&lt;/font&gt;&lt;a href="/photos/luisnavas/images/original/Registry.aspx" target="_blank"&gt;&lt;img src="/photos/luisnavas/images/original/Registry.aspx" border="0"&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;font size="3"&gt;&lt;br&gt;To check if everything is working as expected, in Outllook, go to Tools Menu, Options, Others tab, Advanced options, Com plug in and be sure that Outlook Zip is checked.&lt;br&gt;&lt;br&gt;Take a look at this image, if you have any doubt:&lt;br&gt;&lt;/font&gt;&lt;br&gt;&lt;font size="3"&gt;&lt;br&gt;&lt;/font&gt;&lt;a href="/photos/luisnavas/images/original/Outlook.aspx" target="_blank"&gt;&lt;img src="/photos/luisnavas/images/original/Outlook.aspx" border="0"&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;font size="3"&gt;You will find all the code in the file attached to&lt;/font&gt;&lt;font size="3"&gt; this post.&lt;br&gt;&lt;br&gt;&lt;i&gt;More information, and samples in another languages,&amp;nbsp; in:&lt;br&gt;&lt;br&gt;http://msdn2.microsoft.com/en-us/library/Aa140126(office.10).aspx&lt;br&gt;http://www.outlookcode.com/article.aspx?ID=36&lt;/i&gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;a href="/photos/luisnavas/IDTExtensibility2.aspx" target="_blank"&gt;&lt;br&gt;&lt;/a&gt;&lt;img src="http://weblogs.foxite.com/aggbug.aspx?PostID=4540" width="1" height="1"&gt;</description><enclosure url="http://weblogs.foxite.com/luisnavas/attachment/4540.ashx" length="59973" type="application/x-zip-compressed" /><category domain="http://weblogs.foxite.com/luisnavas/archive/category/1038.aspx">COM</category></item><item><title>Visual FoxPro Popup Class</title><link>http://weblogs.foxite.com/luisnavas/archive/2006/10/02/2570.aspx</link><pubDate>Mon, 02 Oct 2006 21:42:00 GMT</pubDate><guid isPermaLink="false">8827bd1c-7596-4a8f-b0de-f59ce9ede522:2570</guid><dc:creator>luisn</dc:creator><slash:comments>6</slash:comments><comments>http://weblogs.foxite.com/luisnavas/comments/2570.aspx</comments><wfw:commentRss>http://weblogs.foxite.com/luisnavas/commentrss.aspx?PostID=2570</wfw:commentRss><description>Hi to all, when I saw Emerson Reed Outlook Class I love it at the first time, so I tried to create my small contribussion to this community that has give me a lot.&lt;BR&gt;&lt;BR&gt;That is how this class was born, I'm taking some ideas from the Emerson source, and other that came to my mind while I was working. The class it's free, and it's really easy to use:&lt;BR&gt;&lt;BR&gt;Take a look at this code:&lt;BR&gt;&lt;BR&gt;Public oPopup As Object&lt;BR&gt;Set Classlib To popup Additive&lt;BR&gt;oPopup=NewObject("popup","menus")&lt;BR&gt;With oPopup&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .AddPad("New","FileNew.Bmp","New File","Modify Command Temp")&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .AddPad("Open","FileOpen.Bmp","Open File","Getfile()")&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .AddPad("Save As...","FileSave.Bmp","Save File","PutFile()")&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Addpad("\-") &amp;amp;&amp;amp;Separator&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .AddPad("First","NavigateFirst.bmp","Navigates to First Record","Messagebox('You Selected First Previous')")&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .AddPad("Previous","NavigatePrevious.bmp","Navigates to Previous Record","Messagebox('You Selected Navigate Previous')")&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .AddPad("Next","NavigateNext.bmp","Navigates to Next Record","Messagebox('You Selected Navigate Next')")&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .AddPad("Last","NavigateLast.bmp","Navigates to Last Record","Messagebox('You Selected Last Next')")&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Addpad("\-") &amp;amp;&amp;amp;Separator&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .AddPad("Disabled Item and without Picture","","Selects all data in the Current Control","Messagebox('Disabled')",".F.")&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .AddPad("Last Popup Item","","Selects all data in the Current Control","Messagebox('Last Popup Item')")&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Show()&lt;BR&gt;EndWith&lt;BR&gt;&lt;BR&gt;This will create a popup like this image:&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;A HREF="/photos/luisnavas/Blue_Menu.aspx" target=_blank&gt;&lt;IMG src="/photos/luisnavas/images/thumb/Blue_Menu.aspx" border=0&gt;&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;The class will detect in an automatic way the 3 standard themes of XP.&lt;BR&gt;&lt;BR&gt;&lt;B&gt;Olive&lt;/B&gt;&lt;BR&gt;&lt;BR&gt;&lt;A HREF="/photos/luisnavas/picture2573.aspx" target=_blank&gt;&lt;IMG src="/photos/luisnavas/images/2573/thumb.aspx" border=0&gt;&lt;/A&gt;&lt;BR&gt;&lt;B&gt;Silver&lt;/B&gt;&lt;BR&gt;&lt;BR&gt;&lt;A HREF="/photos/luisnavas/picture2574.aspx" target=_blank&gt;&lt;IMG src="/photos/luisnavas/images/2574/thumb.aspx" border=0&gt;&lt;/A&gt;&lt;BR&gt;The AddPad method will receive this parameters:&lt;BR&gt;&lt;B&gt;lcCaption As String&lt;/B&gt;&lt;BR&gt;
&lt;BLOCKQUOTE&gt;Caption of the Menupad&lt;/BLOCKQUOTE&gt;&lt;B&gt;lcPicture As String&lt;/B&gt; 
&lt;BLOCKQUOTE&gt;Picture to use in the Menupad&lt;BR&gt;&lt;/BLOCKQUOTE&gt;&lt;B&gt;lcMessage As S&lt;/B&gt;&lt;B&gt;tring&lt;/B&gt; 
&lt;BLOCKQUOTE&gt;Message to display in Statusbar when selected or mouse over it.&lt;BR&gt;&lt;/BLOCKQUOTE&gt;&lt;B&gt;lcCommand As S&lt;/B&gt;&lt;B&gt;tring&lt;/B&gt;&lt;BR&gt;
&lt;BLOCKQUOTE&gt;Command to run when the user clicl on the pad&lt;BR&gt;&lt;/BLOCKQUOTE&gt;&lt;B&gt;lcSkipFor As String&lt;/B&gt;&lt;BR&gt;
&lt;BLOCKQUOTE&gt;Expresion that must evaluate to boolean to enable or disable a menupad.&lt;BR&gt;&lt;/BLOCKQUOTE&gt;&lt;BR&gt;Future Features that I wish to add:&lt;BR&gt;&lt;BR&gt;1. Enable to handle Sub Popups.&lt;BR&gt;2. Create a MenuBar&lt;BR&gt;3. Create a Builder&lt;BR&gt;4. Ability to define shortcuts and support for hotkeys&lt;BR&gt;5. Support to any Windows XP Theme.&lt;BR&gt;6. Create a toolbar base class to be partner of the menubar&lt;BR&gt;7. Fix all the bugs it may have.&lt;BR&gt;&lt;BR&gt;If anyone of you is interested in make it better, feel free to do it, I'm sure a lot of people will come with better ideas than this. Just let me know any update and please share it with all VFP developers.&lt;BR&gt;&lt;BR&gt;I hope you like&lt;BR&gt;&lt;BR&gt;Take care &lt;BR&gt;&lt;BR&gt;Luis Navas&lt;BR&gt;&lt;A HREF="/photos/luisnavas/picture2572.aspx" target=_blank&gt;&lt;BR&gt;&lt;/A&gt;&lt;img src="http://weblogs.foxite.com/aggbug.aspx?PostID=2570" width="1" height="1"&gt;</description><enclosure url="http://weblogs.foxite.com/luisnavas/attachment/2570.ashx" length="104611" type="application/zip" /><category domain="http://weblogs.foxite.com/luisnavas/archive/category/1018.aspx">Menus</category></item><item><title>QuickFRX2PDF Update</title><link>http://weblogs.foxite.com/luisnavas/archive/2006/03/13/1284.aspx</link><pubDate>Mon, 13 Mar 2006 15:49:00 GMT</pubDate><guid isPermaLink="false">8827bd1c-7596-4a8f-b0de-f59ce9ede522:1284</guid><dc:creator>luisn</dc:creator><slash:comments>2</slash:comments><comments>http://weblogs.foxite.com/luisnavas/comments/1284.aspx</comments><wfw:commentRss>http://weblogs.foxite.com/luisnavas/commentrss.aspx?PostID=1284</wfw:commentRss><description>Hi to all. It's been a while since I use my Blog here at this greate site www.foxite.com&lt;br&gt;&lt;br&gt;I have updated my Listener to create PDF Files, now it can merge existing documents into the PDF file being generated. I also had chance to get a better performance when processing reports with Images in it. Today I tried the INVOICE reports sample that come with VFP and it took me less than 50 seconds to proccess 747 pages. Here's some sample code of how to use it:&lt;br&gt;&lt;br&gt;You can generate two types of PDF files, a normal file, this PDF file will let you Copy the text, has a better resolution at greater zoom levels and the file size it's really small.&lt;br&gt;&lt;br&gt;&lt;pre&gt;&lt;b&gt;Local loListener As ReportListener, lcTargetFile As String, lcMasterPassword As String, lcUserPAssword As String,;&lt;br&gt;lcMergeFileName As String&lt;br&gt;&lt;br&gt;lcTargetFile="MyPDfFile"&lt;br&gt;lcMasterPassword="master"&lt;br&gt;lcUserPassword="user"&lt;br&gt;lcMergeFileName="existingPDF"&lt;br&gt;loListener = NewObject('PdfListener1', 'QuickFRX2PDF.vcx','QuickFRX2PDF.App')&lt;br&gt;loListener.TargetFileName = lcTargetFile&lt;br&gt;loListener.QuietMode=.F. &amp;amp;&amp;amp;Put .T. to turn off messagges&lt;br&gt;loListener.EncryptDocument=.F. &amp;amp;&amp;amp;Put .T. to Encrypt Document&lt;br&gt;If loListener.EncryptDocument&lt;br&gt;	loListener.MasterPassword=lcMasterPassword&lt;br&gt;	loListener.UserPassword=lcUserPassword&lt;br&gt;EndIf&lt;br&gt;loListener.MergeDocument=.F. &amp;amp;&amp;amp;Put .T. to Merge Document with an Existing PDF&lt;br&gt;If loListener.MergeDocument&lt;br&gt;	loListener.MergeDocumentName=lcMergeFileName &amp;amp;&amp;amp;Name of the existing file to be merged with&lt;br&gt;EndIf&lt;br&gt;loListener.OpenViewer=.T. &amp;amp;&amp;amp;Put .F. to prevent Acrobat Reader from being opened&lt;br&gt;Report Form myrerport.frx Object loListener&lt;br&gt;&lt;/b&gt;&lt;/pre&gt;&lt;br&gt;And you can generate an Image PDF File, this kind of PDF will export everything as an image file to the document, people will not be abble to copy your text form it, but PDF files are bigger and has less resolution at greater zoom levels.&lt;br&gt;&lt;br&gt;&lt;pre&gt;&lt;b&gt;Local loListener As ReportListener, lcTargetFile As String, lcMasterPassword As String, lcUserPAssword As String,;&lt;br&gt;lcMergeFileName As String&lt;br&gt;&lt;br&gt;lcTargetFile="MyPDfFile"&lt;br&gt;lcMasterPassword="master"&lt;br&gt;lcUserPassword="user"&lt;br&gt;lcMergeFileName="existingPDF"&lt;br&gt;loListener = NewObject('PdfListener2', 'QuickFRX2PDF.vcx','QuickFRX2PDF.App') &amp;amp;&amp;amp;By calling PdfListener2 we create a PDF File as image.&lt;br&gt;loListener.TargetFileName = lcTargetFile&lt;br&gt;loListener.QuietMode=.F. &amp;amp;&amp;amp;Put .T. to turn off messagges&lt;br&gt;loListener.EncryptDocument=.F. &amp;amp;&amp;amp;Put .T. to Encrypt Documente&lt;br&gt;If loListener.EncryptDocument&lt;br&gt;	loListener.MasterPassword=lcMasterPassword&lt;br&gt;	loListener.UserPassword=lcUserPassword&lt;br&gt;EndIf&lt;br&gt;loListener.MergeDocument=.F. &amp;amp;&amp;amp;Put .T. to Merge Document with an Existing PDF&lt;br&gt;If loListener.MergeDocument&lt;br&gt;	loListener.MergeDocumentName=lcMergeFileName &amp;amp;&amp;amp;Name of the existing file to be merged with&lt;br&gt;EndIf&lt;br&gt;loListener.OpenViewer=.T. &amp;amp;&amp;amp;Put .F. to prevent Acrobat Reader from being opened&lt;br&gt;Report Form myrerport.frx Object loListener&lt;br&gt;&lt;/b&gt;&lt;/pre&gt;&lt;br&gt;Also you can specify other options for both PDF Files types, you can enabled or disable print button, copy options and you can encrypt the document with 2 different levels and assign a passwords.&lt;br&gt;Anyone interest in try it, can download a copy from www.crystalvfpclass.net&lt;br&gt;It comes with complete Help file and sample form, and there's also a version in Spanish.&lt;br&gt;Or send me an email to lnavasdangel@gmail.com&lt;br&gt;&lt;br&gt;&lt;img src="http://weblogs.foxite.com/aggbug.aspx?PostID=1284" width="1" height="1"&gt;</description></item><item><title>QuickFRX2PDF</title><link>http://weblogs.foxite.com/luisnavas/archive/2005/10/10/936.aspx</link><pubDate>Mon, 10 Oct 2005 17:48:00 GMT</pubDate><guid isPermaLink="false">8827bd1c-7596-4a8f-b0de-f59ce9ede522:936</guid><dc:creator>luisn</dc:creator><slash:comments>3</slash:comments><comments>http://weblogs.foxite.com/luisnavas/comments/936.aspx</comments><wfw:commentRss>http://weblogs.foxite.com/luisnavas/commentrss.aspx?PostID=936</wfw:commentRss><description>Update, I had to change my domain to 
www.crystalvfpclass.net

I have published a new version of my PDF convertor. I'm really excited with this realese. It's now faster than before, has a Help File and the PDF Files are much smaller. In the previous version the class exported all pages as images to the PDF, this new version exprts everything as it should, text as text and so on. Please take a look at it here:

http://www.crystalvfpclass.net/QuickFRX2PDF.htm

The spanish version can be find it here (Versión en español):

http://www.crystalvfpclass.net/QuickFRX2PDFEsp.htm

The money I get from the sales of this library will be used to make cirgury to my kid, he is deaf and he needs a cochlear implant.

Thanks a lot for your time and let me know any bugs you find.&lt;img src="http://weblogs.foxite.com/aggbug.aspx?PostID=936" width="1" height="1"&gt;</description></item><item><title>My first post here, bringing you a new Listener Class</title><link>http://weblogs.foxite.com/luisnavas/archive/2005/05/30/475.aspx</link><pubDate>Mon, 30 May 2005 14:54:00 GMT</pubDate><guid isPermaLink="false">8827bd1c-7596-4a8f-b0de-f59ce9ede522:475</guid><dc:creator>luisn</dc:creator><slash:comments>2</slash:comments><comments>http://weblogs.foxite.com/luisnavas/comments/475.aspx</comments><wfw:commentRss>http://weblogs.foxite.com/luisnavas/commentrss.aspx?PostID=475</wfw:commentRss><description>I have updated the link to the file, thanks to Borislav Borisovv for the space in his server. Please try to download the file again.


Well it's my first time playing with Blogs, first of all I will like to thank Eric for this oportunity. To anyone interested I have created a new listener class for creating PDF files from VFP reports. It's the first version, and it will be improved in the future. Please let me know any problem you have or bug found in the class. You can find more information here:


http://www.crystalvfpclass.com/QuickPdfVfp.htm

&lt;img src="http://weblogs.foxite.com/aggbug.aspx?PostID=475" width="1" height="1"&gt;</description></item></channel></rss>