Character Mode Cookbook

From DataFlex Wiki
Revision as of 15:01, 8 November 2007 by Johan (talk | contribs) (→‎Objects)
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