Showing posts with label auto. Show all posts
Showing posts with label auto. Show all posts

Monday, July 18, 2011

Change default printer

Declare Long GetLastError In WIN32API
Declare Long SetDefaultPrinter In WINSPOOL.DRV String pPrinterName


xPrinterName = "New Printer"
xDefaultPrinter = Set("printer", 2)
If SerDefaultPrinter(xPrinterName) = 0
  MessageBox("Unable to set the " + ;
             xPrinterName         + ;
             " as the default printer", 0 + 16)
Else


  && insert your code here...


EndIf


SerDefaultPrinter(xDefaultPeinter)

Saturday, July 16, 2011

Treeview Recursive Program

It is a simple way to implement a Treeview in Foxpro.


Create a catalog database
Create Table Catalog (ID N(10), Parent N(10), Name C(50))
The ID field must be an unique number with start from 1 to 9999999999. Parent is the number pointing to the parent node (Previous level). In this program, 0 (zero) is the root node (first node) of the tree.

Create a form
Add a TreeView control into a form. Name it as tvwCatalog. This is what I usually do. I use txtSomething to indicate the object is a text box. tvw is stand for TreeView. Although it is not quite necessary, but with a good practice is always a good idea. In the Form1.Init, add Do Load_Catalog with this, 0

Create a recursive program (Load_Catalog)
Here is the code of the Load_Catalog.Prg
LPARAMETERS pTree, pNode

Private xQ, xParent, xID, xName, xCheck

***** Add the root node when the tree is empty
IF pTree.Nodes.Count = 0
pTree.Nodes.Add (,, 'C0', 'Root')
pTree.Nodes.Item('C0').Expanded = .T.
pTree.Nodes.Item('C0').Checked  = .T.
ENDIF


***** SYS(2015) returns a temporary file name
xQ = SYS(2015)


***** Read the nodes with specified parent node number
Select * from Catalog ;
 WHERE Parent = pNode ;
 ORDER BY Name        ;
 INTO CURSOR &xQ


***** If this parent has child node
IF RECCOUNT() > 0
  SCAN
    xParent = 'C' + ALLTRIM(STR(&xQ..Parent))
    xID     = 'C' + ALLTRIM(STR(&xQ..ID))
    xName   =       ALLTRIM(&xQ..Name)
    pTree.Nodes.Add (xParent, 4, xID, xName)
    DO Load_Catalog WITH pTree, &xQ..ID
  ENDSCAN
ENDIF
Select &xQ
USE




Test the code

Since the Catalog database has no record. You should only see the "Root" in the tree. Later I added an "ADD" button. Here is the code:


PRIVATE xName, xID, xParent, xName


xName = ALLTRIM(INPUTBOX('Please enter a name', ;
                         'Add New Catalog', ''))


IF NOT EMPTY(xName)
  SELECT MAX(ID + 1) as NewID FROM Catalog INTO CURSOR Q1
  IF RECCOUNT() = 0
    xID  = 1
  ELSE
    xID  = IIF(RECCOUNT() = 0, 1, Q1.NewID)
  ENDIF
  xParent = VAL(SUBSTR(thisform.tvwCatalog.SelectedItem.Key, 2))

  INSERT INTO Catalog (ID,  Parent,  Name) ;
               VALUES (xID, xParent, xName)
thisform.tvwCatalog.Init
ENDIF