home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1998 April B / Pcwk4b98.iso / Borland / Dbase50w / SAMPLES1.PAK / NAMEINFO.WFM < prev    next >
Text File  |  1994-08-02  |  15KB  |  514 lines

  1. ******************************************************************************
  2. *  PROGRAM:      Nameinfo.wfm
  3. *
  4. *  WRITTEN BY:   Borland Samples Group
  5. *
  6. *  DATE:         12/93
  7. *
  8. *  UPDATED:      4/94
  9. *
  10. *  REVISION:     $Revision:   1.17  $
  11. *
  12. *  VERSION:      dBASE FOR WINDOWS 5.0
  13. *
  14. *  DESCRIPTION:  This program shows dBASE for Windows' DDE capabilities.  It
  15. *                establishes a link with WordPerfect to create a "Thank you"
  16. *                letter for customers that purchased software.
  17. *
  18. *  PARAMETERS:   None
  19. *
  20. *  CALLS:        Namesrch.wfm        (Search form)
  21. *                Buttons.cc          (Custom controls file)
  22. *                Names.qbe           (View of table)
  23. *
  24. *  USAGE:        DO Nameinfo.wfm
  25. *
  26. *******************************************************************************
  27. #include "Messdlg.h"
  28. create session
  29. set talk off
  30. set ldCheck off
  31.  
  32. ** END HEADER -- do not remove this line*
  33. * Generated on 06/18/94
  34. *
  35. LOCAL f
  36. f = NEW NAMEINFOFORM()
  37. f.Open()
  38.  
  39. CLASS NAMEINFOFORM OF FORM
  40.    Set Procedure to Buttons.cc Additive
  41.    this.View = "NAMES.QBE"
  42.    this.Top =          2.08
  43.    this.Text = "WordPerfect Merge"
  44.    this.Width =         61.59
  45.    this.Height =         17.17
  46.    this.Left =         16.10
  47.    this.MousePointer =          1
  48.    this.OnOpen = CLASS::FORM_ONOPEN
  49.    this.Maximize = .F.
  50.    this.HelpId = ""
  51.    this.Minimize = .F.
  52.    this.HelpFile = ""
  53.    this.OnClose = {;close procedure Buttons.cc}
  54.  
  55.    DEFINE RECTANGLE MERGERECT OF THIS;
  56.        PROPERTY;
  57.          BorderStyle          1,;
  58.          Top          0.00,;
  59.          Text "",;
  60.          Width         46.06,;
  61.          ColorNormal "N/W",;
  62.          Height         17.17,;
  63.          Left          0.00,;
  64.          Border .T.
  65.  
  66.    DEFINE TEXT TITLETEXT OF THIS;
  67.        PROPERTY;
  68.          Top          0.54,;
  69.          Text "Title:",;
  70.          Width         10.46,;
  71.          ColorNormal "N/W",;
  72.          Height          1.07,;
  73.          Left          1.16,;
  74.          FontBold .F.,;
  75.          Border .F.,;
  76.          FontSize          4.00
  77.  
  78.    DEFINE TEXT FIRSTNAMETEXT OF THIS;
  79.        PROPERTY;
  80.          Top          0.54,;
  81.          Text "First name:",;
  82.          Width         9.46,;
  83.          ColorNormal "N/W",;
  84.          Height          1.07,;
  85.          Left         12.45,;
  86.          FontBold .F.,;
  87.          Border .F.
  88.  
  89.    DEFINE TEXT LASTNAMETEXT OF THIS;
  90.        PROPERTY;
  91.          Top          0.54,;
  92.          Text "Last name:",;
  93.          Width         9.79,;
  94.          ColorNormal "N/W",;
  95.          Height          1.07,;
  96.          Left         32.87,;
  97.          FontBold .F.,;
  98.          Border .F.
  99.  
  100.    DEFINE TEXT ADDRESSTEXT OF THIS;
  101.        PROPERTY;
  102.          Top          3.26,;
  103.          Text "Address:",;
  104.          Width         8.47,;
  105.          ColorNormal "N/W",;
  106.          Height          1.07,;
  107.          Left          1.16,;
  108.          FontBold .F.,;
  109.          Border .F.
  110.  
  111.    DEFINE TEXT CITYTEXT OF THIS;
  112.        PROPERTY;
  113.          Top          6.06,;
  114.          Text "City:",;
  115.          Width          6.47,;
  116.          ColorNormal "N/W",;
  117.          Height          1.10,;
  118.          Left          1.16,;
  119.          FontBold .F.,;
  120.          Border .F.
  121.  
  122.    DEFINE TEXT STATETEXT OF THIS;
  123.        PROPERTY;
  124.          Top          6.06,;
  125.          Text "State:",;
  126.          Width          5.15,;
  127.          ColorNormal "N/W",;
  128.          Height          1.10,;
  129.          Left         24.40,;
  130.          FontBold .F.,;
  131.          Border .F.
  132.  
  133.    DEFINE TEXT ZIPCODETEXT OF THIS;
  134.        PROPERTY;
  135.          Top          6.06,;
  136.          Text "Zip Code:",;
  137.          Width         10.46,;
  138.          ColorNormal "N/W",;
  139.          Height          1.10,;
  140.          Left         30.21,;
  141.          FontBold .F.,;
  142.          Border .F.
  143.  
  144.    DEFINE TEXT PHONETEXT OF THIS;
  145.        PROPERTY;
  146.          Top          8.80,;
  147.          Text "Phone:",;
  148.          Width          6.47,;
  149.          ColorNormal "N/W",;
  150.          Height          1.07,;
  151.          Left          1.16,;
  152.          FontBold .F.,;
  153.          Border .F.
  154.  
  155.    DEFINE TEXT PRODUCTTEXT OF THIS;
  156.        PROPERTY;
  157.          Top         11.52,;
  158.          Text "Product:",;
  159.          Width          7.80,;
  160.          ColorNormal "N/W",;
  161.          Height          1.07,;
  162.          Left          1.16,;
  163.          FontBold .F.,;
  164.          Border .F.
  165.  
  166.    DEFINE ENTRYFIELD FIRSTNAMEENTRY OF THIS;
  167.        PROPERTY;
  168.          DataLink "NAMES->FNAME",;
  169.          Top          1.61,;
  170.          Width         15.11,;
  171.          Height          1.36,;
  172.          Left         10.46,;
  173.          Border .T.
  174.  
  175.    DEFINE ENTRYFIELD LASTNAMEENTRY OF THIS;
  176.        PROPERTY;
  177.          DataLink "NAMES->LNAME",;
  178.          Top          1.61,;
  179.          Width         19.42,;
  180.          Height          1.36,;
  181.          Left         26.23,;
  182.          Border .T.
  183.  
  184.    DEFINE ENTRYFIELD ADDRESSENTRY OF THIS;
  185.        PROPERTY;
  186.          DataLink "NAMES->ADDRESS",;
  187.          Top          4.39,;
  188.          Width         44.49,;
  189.          Height          1.36,;
  190.          Left          1.16,;
  191.          Border .T.
  192.  
  193.    DEFINE ENTRYFIELD CITYENTRY OF THIS;
  194.        PROPERTY;
  195.          DataLink "NAMES->CITY",;
  196.          Top          7.13,;
  197.          Width         22.41,;
  198.          Height          1.36,;
  199.          Left          1.16,;
  200.          Border .T.
  201.  
  202.    DEFINE ENTRYFIELD STATEENTRY OF THIS;
  203.        PROPERTY;
  204.          DataLink "NAMES->STATE",;
  205.          Top          7.13,;
  206.          Picture "AA",;
  207.          Width          3.82,;
  208.          Function "!",;
  209.          Height          1.36,;
  210.          Left         24.40,;
  211.          Border .T.
  212.  
  213.    DEFINE ENTRYFIELD ZIPENTRY OF THIS;
  214.        PROPERTY;
  215.          DataLink "NAMES->ZIP",;
  216.          Top          7.13,;
  217.          Picture "99999",;
  218.          Width         15.44,;
  219.          Height          1.36,;
  220.          Left         30.21,;
  221.          Border .T.
  222.  
  223.    DEFINE ENTRYFIELD PHONEENTRY OF THIS;
  224.        PROPERTY;
  225.          DataLink "NAMES->PHONE",;
  226.          Top          9.86,;
  227.          Picture "(999)999-9999",;
  228.          Width         22.41,;
  229.          Function "R(999)999-9999",;
  230.          Height          1.36,;
  231.          Left          1.16,;
  232.          Border .T.
  233.  
  234.    DEFINE ENTRYFIELD PRODUCTENTRY OF THIS;
  235.        PROPERTY;
  236.          DataLink "NAMES->PRODUCT",;
  237.          Top         12.66,;
  238.          Width         44.49,;
  239.          Height          1.36,;
  240.          Left          1.16,;
  241.          Border .T.
  242.  
  243.    DEFINE PUSHBUTTON NEWBUTTON OF THIS;
  244.        PROPERTY;
  245.          Default .T.,;
  246.          OnClick {;append blank;go bottom},;
  247.          Top         15.09,;
  248.          Text "&New",;
  249.          Width         14.11,;
  250.          ColorNormal "",;
  251.          Height          1.50,;
  252.          Left          1.16
  253.  
  254.    DEFINE PUSHBUTTON SEARCHBUTTON OF THIS;
  255.        PROPERTY;
  256.          OnClick CLASS::SEARCHBUTTON_ONCLICK,;
  257.          Top         15.09,;
  258.          Text "&Search",;
  259.          Width         14.11,;
  260.          ColorNormal "",;
  261.          Height          1.50,;
  262.          Left         16.43
  263.  
  264.    DEFINE PUSHBUTTON MERGEBUTTON OF THIS;
  265.        PROPERTY;
  266.          OnClick CLASS::MERGEBUTTON_ONCLICK,;
  267.          Top         15.09,;
  268.          Text "&Merge",;
  269.          Width         14.11,;
  270.          ColorNormal "",;
  271.          Height          1.50,;
  272.          Left         31.54
  273.  
  274.    DEFINE OKBUTTON OKINFOBUTTON OF THIS;
  275.        PROPERTY;
  276.          OnClick CLASS::OKINFO_ONCLICK,;
  277.          Top          1.07,;
  278.          Width         14.11,;
  279.          Height          1.50,;
  280.          Left         46.70
  281.  
  282.    DEFINE CANCELBUTTON CANCELINFOBUTTON OF THIS;
  283.        PROPERTY;
  284.          OnClick CLASS::CANCELINFO_ONCLICK,;
  285.          Top          3.00,;
  286.          Width         14.11,;
  287.          Height          1.50,;
  288.          Left         46.70
  289.  
  290.    ****************************************************************************
  291.    PROCEDURE Form_OnOpen
  292.    ****************************************************************************
  293.  
  294.    form.stateEntry.Width = 3.96
  295.    form.zipEntry.Width = 10.56
  296.  
  297.    form.titles = new array(5)
  298.  
  299.    form.titles[1] = "Mr."
  300.    form.titles[2] = "Mrs."
  301.    form.titles[3] = "Ms."
  302.    form.titles[4] = "Dr."
  303.    form.titles[5] = "Rev."
  304.  
  305.    DEFINE COMBOBOX TitleCombo OF THIS;
  306.       PROPERTY;
  307.          Width 7.92,;
  308.          Top 1.66,;
  309.          Left 1.32,;
  310.          Height 1.66,;
  311.          Style 2,;
  312.          DataLink "NAMES->TITLE",;
  313.          DataSource "ARRAY form.titles"
  314.  
  315.    this.netobj = NEW NETLOCKS ()
  316.  
  317.    ****************************************************************************
  318.    PROCEDURE OKINFO_OnClick
  319.    ****************************************************************************
  320.    local result
  321.    if FORM.netobj.reclock()
  322.        result = commit()
  323.        flush
  324.        go top
  325.  
  326.    else
  327.        AlertMessage("Warning","Your record was not locked. No data will be saved!")
  328.    endif
  329.    if dbf() = "NAMES"
  330.       use
  331.    endif
  332.    form.close()
  333.    return
  334.  
  335.    ****************************************************************************
  336.    PROCEDURE CANCELINFO_OnClick
  337.    ****************************************************************************
  338.    if FORM.netobj.reclock()
  339.        rollback()
  340.    else
  341.        AlertMessage("Warning","No data was saved!")
  342.    endif
  343.    if alias() = "NAMES"
  344.        use
  345.    endif
  346.    form.Close()
  347.    return
  348.  
  349.    ****************************************************************************
  350.    PROCEDURE SEARCHBUTTON_OnClick
  351.    ****************************************************************************
  352.    * Open the search dialog box modal
  353.    local srch
  354.    set procedure to namesrch.wfm additive
  355.    srch = NEW NAMESRCHFORM ()
  356.    srch.mdi = .f.
  357.    srch.readModal()
  358.    close procedure Namesrch.wfm
  359.  
  360.  
  361.    ****************************************************************************
  362.    PROCEDURE MERGEBUTTON_OnClick
  363.    ****************************************************************************
  364.  
  365.    * Macro substitution for International translation
  366.    fld1 = field(1)
  367.    fld4 = field(4)
  368.    fld9 = field(9)
  369.    myLink = new DdeLink (form)
  370.  
  371.    if MyLink.initiate("WPWin60_Macros","commands")
  372.        * If WordPerfect is already running
  373.        *MyLink.execute('FileOpen (Filename:"DDETEST.wpd",4)')
  374.        ok2exec = .t.
  375.    else
  376.       * If WordPerfect has to be started
  377.       * object.initiate("appname","filename")
  378.       * This will start WordPerfect with file: DDETEST
  379.       * DDETEST.WPD has to exist in the WordPerfect Path
  380.       *MyLink.initiate("c:\wpwin60\wpwin","ddetest.wpd")
  381.       MyLink.initiate("c:\wpwin60\wpwin","")
  382.       * This is required to go into command mode
  383.       if MyLink.initiate("WPWin60_Macros","commands")
  384.         ok2exec = .t.
  385.       else
  386.         AlertMessage("Unable to establish DDE Link. Start WordPerfect.","DDE Warning")
  387.         ok2exec = .f.
  388.       endif
  389.    endif
  390.    if ok2exec
  391.        ddeName = 'Type ({"'+FORMNAME()+'"})'           && Proper name
  392.        ddeAddress =  'Type ({"'+&FLD4+'"})'            && Street Address
  393.        ddeCity =  'Type ({"'+FORMCITY()+'"})'          &&Formatted City, State & Zip
  394.        ddeSalutation =  'Type ({"'+FMTSTR("Dear %S:",TRIM(&FLD1))+'"})'
  395.        ddeProduct =  'Type ({"'+FMTSTR("Congratulations on purchasing %S!",TRIM(&FLD9))+'"})'
  396.  
  397.        ExecuteLink(Mylink,"HardReturn()")
  398.        ExecuteLink(Mylink,"DateText()")
  399.        ExecuteLink(Mylink,"HardReturn()")
  400.        ExecuteLink(Mylink,"HardReturn()")
  401.        ExecuteLink(Mylink,"HardReturn()")
  402.        ExecuteLink(Mylink,ddeName)
  403.        ExecuteLink(Mylink,"HardReturn()")
  404.        ExecuteLink(Mylink,ddeAddress)
  405.        ExecuteLink(Mylink,"HardReturn()")
  406.        ExecuteLink(Mylink,ddeCity)
  407.        ExecuteLink(Mylink,"HardReturn()")
  408.        ExecuteLink(Mylink,"HardReturn()")
  409.        ExecuteLink(Mylink,"HardReturn()")
  410.        ExecuteLink(Mylink,ddeSalutation)
  411.        ExecuteLink(Mylink,"HardReturn()")
  412.        ExecuteLink(Mylink,ddeProduct)
  413.        ExecuteLink(Mylink,'Type ({" We trust that using this software will be fun and exciting."})')
  414.        ExecuteLink(Mylink,'Type ({"We hope you will continue to use our products."})')
  415.        ExecuteLink(Mylink,"HardReturn()")
  416.        ExecuteLink(Mylink,"HardReturn()")
  417.        ExecuteLink(Mylink,"HardReturn()")
  418.        ExecuteLink(Mylink,'Type ({"Sincerely,"})')
  419.        ExecuteLink(Mylink,"HardReturn()")
  420.        ExecuteLink(Mylink,"HardReturn()")
  421.        ExecuteLink(Mylink,"HardReturn()")
  422.        ExecuteLink(Mylink,'Type ({"Programmer"})')
  423.        ExecuteLink(Mylink,"HardReturn()")
  424.        ExecuteLink(Mylink,'Type ({"DDE Person"})')
  425.        ExecuteLink(Mylink,"HardReturn()")
  426.        ExecuteLink(Mylink,"HardReturn()")
  427.        ExecuteLink(Mylink,"HardReturn()")
  428.        ExecuteLink(Mylink,'Type ({"dFW:TJC"})')
  429.        ExecuteLink(Mylink,"Filesave(Filename: 'ddetest'; ExportType: 4;  Overwrite: Yes!)")
  430.  
  431.        ExecuteLink(Mylink,"Close (Save: 1)")
  432.     endif &&ok2execute
  433.  
  434.    MyLink.terminate()
  435.  
  436. ENDCLASS
  437.  
  438. CLASS NETLOCKS
  439.  
  440.    *******************************************************************************
  441.    FUNCTION RecLock
  442.    *******************************************************************************
  443.    local cnt, isLocked
  444.    cnt = 1
  445.    isLocked = .f.
  446.    do while .not. isLocked .and. cnt < 11
  447.      isLocked = rlock()
  448.      cnt = cnt + 1
  449.    enddo
  450.    return isLocked
  451.  
  452.    *******************************************************************************
  453.    FUNCTION FilLock
  454.    *******************************************************************************
  455.    local cnt, islocked
  456.    cnt = 1
  457.    islocked = .f.
  458.    do while .not. islocked .and. cnt < 11
  459.      islocked = frlock()
  460.      cnt = cnt + 1
  461.    enddo
  462.    return islocked
  463.  
  464. ENDCLASS
  465.  
  466. *******************************************************************************
  467. FUNCTION FormName
  468. *******************************************************************************
  469. Local fmtLine
  470. fmtLine = "%1 %2 %3"
  471. fld1 = field(1)
  472. fld2 = field(2)
  473. fld3 = field(3)
  474. return Fmt3Str(fmtLine,iif(empty(&fld3),"",trim(&fld3)),trim(&fld1),&fld2)
  475.  
  476. *******************************************************************************
  477. FUNCTION FormCity
  478. *******************************************************************************
  479. Local fmtLine
  480. fmtLine = "%1, %2 %3"
  481. fld5 = field(5)
  482. fld6 = field(6)
  483. fld7 = field(7)
  484. return Fmt3Str(fmtLine,trim(&fld5),&fld6,&fld7)
  485.  
  486. *******************************************************************************
  487. FUNCTION FmtStr(string, repStr)
  488. *******************************************************************************
  489. * replaces "%S" with replacement String
  490. return stuff(string, at("%S",string),2,repStr)
  491.  
  492. *******************************************************************************
  493. FUNCTION Fmt3Str(string,rep1, rep2, rep3)
  494. *******************************************************************************
  495.  
  496. for i = 1 to 3
  497.   do case
  498.   case i = 1
  499.     string = stuff(string, at("%1",string),2,rep1)
  500.   case i = 2
  501.     string = stuff(string, at("%2",string),2,rep2)
  502.   case i = 3
  503.     string = stuff(string, at("%3",string),2,rep3)
  504.   endcase
  505. next
  506. return string
  507.  
  508.  
  509. *******************************************************************************
  510. PROCEDURE ExecuteLink(link,string)
  511. *******************************************************************************
  512.    link.execute(ansi(string))
  513.  
  514.