Character Mode Cookbook

From DataFlex Wiki
Jump to navigationJump to search

Keys and commands

 on_key KCLEAR                      : F5
 on_key KCANCEL      Send Cancel    : Esc
 on_key KENTER                      : Enter
 on_key KSAVE_RECORD Send Do_Report : F2
Promt commands
df32
dfcomp ex.src -pfv1    p=precompile
dfcomp ex.src -fv1     fv1 creates prn-file (check errors)
dfrun ex
dfruncon ex            with mouse support

Declaration

Properties and variables

 property integer piCount public 0
 set piCount To (piCount(current_object)+1)

Move

local integer liNumber
 move 0 To liNumber

 Move (key+1) to key    key = key++ //Dont forget to use paratheses (a+(b*c))<>a+b*c

Set/Get

 Set value of (oPop(current_object)) item 0 to sVar      // item[0] = sVar
 Get Value item 0 to sVar                                // sVar    = item[0]

Be aware of the difference

 Set A of object to B  A=B
 Get A of object to B  B=A
 Move A to B
You can only use Get and Set on properties

Functions and Procedures

 get myFunc of (oObj(current_object)) "tmp" to sAnswer // sAnswer = oObj->myFunc("tmp")
--------------
SET
   value of OBJ ITEM to VAL
   location X Y [ABSOLUTE/RELATIVE]
   focus_mode to POINTER_ONLY
--------------
Procedure MyProcedure
End_Procedure
Send MyProcedure
------------------
Procedure DisplayResult String lsValue1 String lsValue2 String lsValue3
   set value of (oOutput(self)) item 0 to lsValue1
   set value of (oOutput(self)) item 1 to lsValue2
   set value of (oOutput(self)) item 2 to lsValue3
end_procedure
send DisplayResult lsValue1 "" ""
--------------
Procedure_Section // used in reports to handle paging in a smarter way
--------------
Function MyFunction integer i returns Integer

End_Function

get MyFunction(self) as iRet
--------------
function myFunc string test returns string
 local string lsRval
 move test to lsRval
 function_return lsRval
end_function
get myFunc of (oObj(current_object)) "tmp string" to sAnswer

Start "windows/console"

 start_ui       // starts a new console
 ui_accept      // has a return value
 activate_scope // opens a new "window"

Content layout

 --------------
 /Answer.hdr
 +--------------------+
 /Answer.dat
 ¦ Answer:_________   ¦
 +--------------------+
 /*
 register_object oAnswer
 Object oAnswer is a Client Answer.hdr
   Set location 7 30 ABSOLUTE
   On_Key kcancel Send cancel 

  Object oAnswData is a Form Answer.dat
    Set location 1 0 RELATIVE
    Set focus_mode to POINTER_ONLY
    item_list
      On_Item "" Send none
    end_item_list
  End_Object

  Procedure OpenAnswerForm string sValue
    local Integer iRval
    Set value of (oAnswData(current_object)) item 0 to sValue
    ui_accept current_object to iRval
  End_Procedure

 End_Object

 Send OpenAnswerForm to (oAnswer(current_object)) "test string"
 --------------

Reports

 /oReportView1.SectionName
    __________________________________________________________________________
 /oReportView1.body
   ____________________  ______________________
 /*


 //Activate_View Activate_Report1 for oReportView
 Object oReportView1 is a Report_View NO_IMAGE

    Object oMainReport is a seq.Report NO_IMAGE

        Set Main_File to customer.file_number
        //set Ordering to 2 // Order by name
        Set Report_Title to "Report 1 - Show position of sections"

        set Page_End to 18 // Page length set to screen length

        Procedure _PrintSectionName String lsValue
            Print lsValue to oReportView1.SectionName.1
            Output_Pagecheck oReportView1.SectionName
        End_Procedure

        // Procedures Page_Top thru Page_Bottom ONLY get used by the outermost report
        // object... All other objects delegate messages to this ultimate parent.
        // creating these procedures in child reports will have NO effect.

        // Procedure_Section Page_Top as oReportView1.SectionName
        // Procedure_Section Report_Header as oReportView1.SectionName
        // Procedure_Section Page_Header as oReportView1.SectionName
        // Procedure_Section Page_Title as oReportView1.SectionName
        // Procedure_Section Page_Total as oReportView1.SectionName
        // Procedure_Section Page_Footer as oReportView1.SectionName
        // Procedure_Section Report_Footer as oReportView1.SectionName
        Procedure_Section Page_Bottom as oReportView1.SectionName
            Send _PrintSectionName "Page_Bottom             (last thing printed on every page)"
        End_Procedure

        Procedure_Section Body as oReportView1.body      // or Procedure_Section Body
            Print customer.name to oReportView1.body.1   // Sets the data fields
            Print customer.city to oReportView1.body.2
            Output_Pagecheck oReportView1.body           // Prints the data to screen
        End_Procedure

        //Procedure_Section Total as oReportView1.SectionName

    End_Object

    Procedure run_report
        send run_report to (oMainReport(self))
    End_Procedure
 End_Object

 procedure Activate_Report_View_1
  send run_report to (oReportView1(self))
 end_procedure

---------------------------------------------------------------

Objects

 Object oOrder is a Entry_View_Client oOrder.hdr
    Set location 5 8 ABSOLUTE 

    Object Orderhea_DD is a Data_Set NO_IMAGE
        Set main_file to Orderhea.file_number
    End_Object       

    Object Orderdtl_DD is a Data_Set NO_IMAGE
        Set main_file to Orderdtl.file_number     
        Send attach_server (Orderhea_DD(current_object))
        //Set constrain_file to orderhea.file_number
        begin_constraints                    
             Constrain orderdtl relates to orderhea
        end_constraints
    End_Object   
    
    Object oForm is a Entry_Form oOrder.frm
        Set location 1 0 RELATIVE
        Set Server to (Orderhea_DD(current_object)) 

        item_list
          Entry_Item ORDERHEA.ORDER_NUMBER         { AutoClear AutoFind }
          Entry_Item ORDERHEA.ORDER_DATE           { AutoClear NoEnter }
          Entry_Item ORDERHEA.SHIP_VIA             { AutoClear NoEnter }
          Entry_Item ORDERHEA.ORDERED_BY           { AutoClear NoEnter }
          Entry_Item ORDERHEA.ORDER_TOTAL          { AutoClear NoEnter }          
        end_item_list
        
    End_Object

    Object oList is a Selection_List oOrder.lst
        Set location 13 0 RELATIVE
        Set Server to (Orderdtl_DD(current_object))
        
        Begin_Row    
          Entry_Item ORDERDTL.DETAIL_NUMBER      { AutoClear AutoFind NoPut}
          Entry_Item ORDERDTL.ITEM_ID            { AutoClear }
          Entry_Item ORDERDTL.QTY_ORDERED        { AutoClear }
          Entry_Item ORDERDTL.PRICE              { AutoClear }
          Entry_Item ORDERDTL.EXTENDED_PRICE     { AutoClear }
        End_Row

    End_Object
                                                                 
 End_Object
An object can be of different types
Containers
 - Entry_View_Client  : 
 - View_Client        : 
 - ModalClient        : Needs UI and brakes the flow
Controles
 - Entry_Form         : Data Aware
 - Form               : Non Data Aware
 - List               : Non Data Aware
 - Table              : Data Aware