* Table Manners

Writing and using plugins for Version 5 and above.
Post Reply
User avatar
Ron Melby
Superstar
Posts: 440
Joined: 15 Nov 2016 15:40
Family Historian: V6.2

Table Manners

Post by Ron Melby » 19 Jul 2019 23:12

I am not facile with table layout.
I had thought to build a record
ADDR{key], Area = (val), Inter = val
not understanding how to do that pretty obviously, if the first code chunk doesnt work, I dont see how the second will.


Code: Select all

  ptrWork:MoveTo(ptrRCD, rcdOffset)
  if ptrWork:IsNotNull() then
    ADDR     = fhGetValueAsText(ptrWork)
    area     = matAREA(ptrRCD, basOffset)
    area     = (tblADDR[ADDR].Area or area)   <<<<  fail here attempt to index field ?
    inter    = (tblADDR[ADDR].Inter or 0 ) + 1
    tblADDR[ADDR] = {Area = area; Inter = inter;} 
  end
  return
end  -- fn wrtTbls

function matOUT()
  cwara =  0
  cwcem =  0
  cwbur =  0

--  put tblADDR fields into tables
  for CEM, _ in pairs (tblADDR) do
    table.insert(tblCEM, CEM)
    cwcem = math.max(cwcem, #CEM)

    table.insert(tblArea, tblADDR[ADDR].Area)
    cwara = math.max(cwara, #tblADDR[ADDR].Area)

    table.insert(tblInter,tblADDR[ADDR].Inter)
    cwbur = math.max(cwbur, #tostring(tblADDR[ADDR].Inter))
  end
  return
end  -- bldOutput
FH V.6.2.7 Win 7 64 bit

User avatar
tatewise
Megastar
Posts: 16616
Joined: 25 May 2010 11:00
Family Historian: V6.2
Location: Torbay, Devon, UK
Contact:

Re: Table Manners

Post by tatewise » 20 Jul 2019 09:10

Your code snippet is somewhat incomplete, but I know what the problem is.

Presumably, somewhere above you have defined tblADDR = { }

What is NOT defined is tblADDR[ADDR] and therefore the fields Area and Inter cannot be accessed.

So insert one of the following statements (that I know you have used before) just before tblADDR[ADDR].Area is used:

if not tblADDR[ADDR] then tblADDR[ADDR] = { } end
or
tblADDR[ADDR] = tblADDR[ADDR] or { }
Mike Tate ~ researching the Tate and Scott family history ~ tatewise ancestry

User avatar
Ron Melby
Superstar
Posts: 440
Joined: 15 Nov 2016 15:40
Family Historian: V6.2

Re: Table Manners

Post by Ron Melby » 20 Jul 2019 12:05

there was no change, same error. I have provided the complete code.

Code: Select all

--[[
@title: CemArea
@author: Ron Melby
@lastupdated: Apr 2018
@version: 1.0
@description: 
]]

require '_STD_SLT'
require '_STD_FMT'

function sltOPT()
-- Dialog for specifing Parameters.
  WSTitle = 'Locus'
  txtOpt1 = 'country'       
  txtOpt2 = 'state'     

  txtOpt3 = 'county'    
  txtOpt4 = 'township'  
  txtOpt5 = 'city'      
  txtOpt6 = 'address'   
  txtOpt7 = 'building'  
  Slt     = 0

  WS_RC, Slt = iup.GetParam(
    WSTitle, 
    param_action,
    'Area: %l|' .. txtOpt1 .. '|' .. txtOpt2 .. '|' .. txtOpt3 .. '|' .. txtOpt4 .. '|'.. txtOpt5 .. '|' .. txtOpt6 .. '|' .. txtOpt7 .. '|\n', 
    Slt)

  if WS_RC == WS_ENTER then
    Opt = Slt
  end
  return WS_RC, Opt
end


local tblOFS   = {'.ADDR','.PLAC'} -- DataOffset
local tblADDR  = {}  
local tblArea  = {} -- Country.State.County 
local tblCEM   = {}
local tblInter = {} -- Cem interments

function matAREA(iptr, Offset)

  local rcdOffset = (Offset .. tblOFS[2]) -- tblOFS, 1 or tblOFS, 2

  local tblFLD    = {}
  local PLAC      = ''
  local AREA      = ''
  local index     = 0
--  local zip       = '^ -%d+%-?%d+ -$'

  PLAC = fhGetItemText(iptr, rcdOffset)
  if (PLAC == '') 
  or (PLAC == ' ') then
    return '  . .  '
  end

  for field in string.gmatch(PLAC, '([^,]+)') do
    index = index + 1
    tblFLD[index] = field or ' '
  end

  lim = index - Opt  

  local country  = index      
  local state    = (index - 1)
  local county   = (index - 2)
  local township = (index - 3)
  local city     = (index - 4)
  local address  = (index - 5)
  local building = (index - 6)

  while index > 0 do
    field = (tblFLD[index]:gsub('^%s*', ''))
    if (index == country) 
    and field < '   ' then
      field = '   '
    elseif (index == state)  
    and field < '  ' then
      field = '  '
    elseif (index == county) 
    and field == '' then
      field = ' '
    elseif (index == township) 
    and field == '' then
      field = ' '
    elseif (index == city) 
    and field == '' then
      field = ' '
    end

    if index >= lim then
      AREA = AREA .. field
      if index > lim then
        AREA = AREA .. '.'
      end
    end
    index = index - 1
  end
  return AREA
end -- fn matAREA 

function matTBLS(ptrCEM)
  -- tblData  = (tblADDR[ADDR] or { })
  local ptrRCD      = fhNewItemPtr()  -- Basing Pointer INDI
  local ptrWork     = fhNewItemPtr()  -- Basing Pointer SOUR
  local ptrADDR     = fhNewItemPtr()  

  local basOffset   = ''
  local rcdOffset   = ''
  local ADDR        = ''              
  local area        = ''              

  ptrRCD:MoveToRecordItem(ptrCEM)
  ptrWork = ptrCEM

-- CEM or disposition
  basOffset = '~.' .. (fhGetTag(ptrWork))
  rcdOffset = (basOffset.. tblOFS[1])

  ptrWork:MoveTo(ptrRCD, rcdOffset)
  if ptrWork:IsNotNull() then
    tblADDR[ADDR] = tblADDR[ADDR] or { }
    ADDR     = fhGetValueAsText(ptrWork)
    area     = matAREA(ptrRCD, basOffset)
    area     = (tblADDR[ADDR].Area or area)
    inter    = (tblADDR[ADDR].Inter or 0 ) + 1
    tblADDR[ADDR] = {Area = area; Inter = inter;} 
  end
  return
end  -- fn wrtTbls

function matOUT()
  cwara =  0
  cwcem =  0
  cwbur =  0

--  put tblADDR fields into tables
  for CEM, _ in pairs (tblADDR) do
    table.insert(tblCEM, CEM)
    cwcem = math.max(cwcem, #CEM)

    table.insert(tblArea, tblADDR[ADDR].Area)
    cwara = math.max(cwara, #tblADDR[ADDR].Area)

    table.insert(tblInter,tblADDR[ADDR].Inter)
    cwbur = math.max(cwbur, #tostring(tblADDR[ADDR].Inter))
  end
  return
end  -- bldOutput

-- MAIN()
rc, Opt = sltOPT()
if rc ==  false then
  return
end
rc = sltSRCD()
if rc ==  false then
  return
end

local ptrBURI = fhNewItemPtr()
local ptrCREM = fhNewItemPtr()
local ptrINDI = fhNewItemPtr()
ptrINDI:MoveToFirstRecord('INDI')
while ptrINDI:IsNotNull() do
  ptrBURI = fhGetItemPtr(ptrINDI,'~.BURI')
  if (not ptrBURI:IsNull()) then
    matTBLS(ptrBURI) 
  end
  ptrCREM = fhGetItemPtr(ptrINDI,'~.CREM') 
  if (not ptrCREM:IsNull()) then
    matTBLS(ptrCREM) 
  end
  ptrINDI:MoveNext('SAME_TAG')                     -- move to next TAG
end
matOUT()

cwara = (enscolwid(cwara)  *  4)     -- Area
cwcem = (enscolwid(cwcem + 1)  *  4) -- ADDR
cwbur = (enscolwid(cwbur)  * 16)     -- Burials

fhOutputResultSetTitles('CEM.AREA')
fhOutputResultSetColumn('Area',     'text',  tblArea, #tblArea,  cwara, 'align_left',  1)
fhOutputResultSetColumn('Place',    'text',   tblCEM, #tblCEM,   cwcem, 'align_left',  3)
fhOutputResultSetColumn('#Inter','integer', tblInter, #tblInter, cwbur, 'align_right', 2, false)

return
FH V.6.2.7 Win 7 64 bit

User avatar
tatewise
Megastar
Posts: 16616
Joined: 25 May 2010 11:00
Family Historian: V6.2
Location: Torbay, Devon, UK
Contact:

Re: Table Manners

Post by tatewise » 20 Jul 2019 13:13

Sorry Ron, but you are more intelligent than that.
How do you expect tblADDR[ADDR] = tblADDR[ADDR] or { } to work before the value of ADDR is defined?

I said to insert it just before tblADDR[ADDR].Area is used.
Mike Tate ~ researching the Tate and Scott family history ~ tatewise ancestry

User avatar
Ron Melby
Superstar
Posts: 440
Joined: 15 Nov 2016 15:40
Family Historian: V6.2

Re: Table Manners

Post by Ron Melby » 20 Jul 2019 13:41

I corrected it. I am quite tangled up here trying to understand whats going on:


St. Petri Cemetery, 36200 300th Street NE, Grygla, MN, 56727, USA => (table .2)
Inter => 5
Area => "USA.MN.Marshall.Valley "[T156NR39W S20]""

*STOP* it clicked, I got it, running now. thanks for the code bit, slow on the uptake but have a slightly better understanding now.

**************************************
the table entries are correct, and as I have been here before, that same error has moved to the table.insert
145: attempt to index field '?' (a nil value)

table.insert(tblArea, tblADDR[ADDR].Area)
cwara = math.max(cwara, #tblADDR[ADDR].Area)

and there I see it in the table, so lost again and still.
FH V.6.2.7 Win 7 64 bit

User avatar
tatewise
Megastar
Posts: 16616
Joined: 25 May 2010 11:00
Family Historian: V6.2
Location: Torbay, Devon, UK
Contact:

Re: Table Manners

Post by tatewise » 20 Jul 2019 14:02

Well in that function matOUT() there is no value assigned to ADDR so the record name is not defined.

The for ... pairs ... do loop is stepping through the records in tblADDR.
So what variable is holding the name of the record?
Also what do you think is held in the _ variable?

Use the debugger to investigate.

If it has really clicked then the loop should look like:

Code: Select all

  for CEM, REC in pairs (tblADDR) do    -- Loop on record name CEM and contents REC
    table.insert(tblCEM, CEM)
    cwcem = math.max(cwcem, #CEM)

    local Area = REC.Area    -- Lookup record Area field once
    table.insert(tblArea, Area)
    cwara = math.max(cwara, #Area)

    local Inter = REC.Inter    -- Lookup record Inter field once
    table.insert(tblInter, Inter)
    cwbur = math.max(cwbur, #tostring(Inter))
  end
  
Mike Tate ~ researching the Tate and Scott family history ~ tatewise ancestry

User avatar
Ron Melby
Superstar
Posts: 440
Joined: 15 Nov 2016 15:40
Family Historian: V6.2

Re: Table Manners

Post by Ron Melby » 20 Jul 2019 14:25

are there any good examples of a plugin that prints a report, because I am looking to get into more mischief here.

my thought was , add a table tbl???: which would be an array INTER (an indi pointer to the interments in the cemetery.) sort of like the link to places, where records could be chosen.

so the output might look something like this

AREA: GBR.EN.Kent
INTERMENTS 10
St. Mildreds Churchyard, Church Road Tenterden, Kent, TN30 6AT, GBR
Hook, Thomas......yadda yadda yadda blah blah blah
Hook, Henry....
Hook, John...
Hook, Sarah...

AREA: GBR.EN.Kent
All Saints Churchyard.....and so on
FH V.6.2.7 Win 7 64 bit

User avatar
tatewise
Megastar
Posts: 16616
Joined: 25 May 2010 11:00
Family Historian: V6.2
Location: Torbay, Devon, UK
Contact:

Re: Table Manners

Post by tatewise » 20 Jul 2019 15:41

What exactly do you mean by prints a report?
Do you mean write to a self contained file external to FH?

To write to a plain text (.txt) file see Knowledge Base > Save String to File (code snippet).

To create a MS Word document see Knowledge Base > Word Load Data Direct Into (code snippet).

I don't know of any Plugin that creates such reports, but several write to plain text files, especially FH customisation files.
Mike Tate ~ researching the Tate and Scott family history ~ tatewise ancestry

User avatar
Ron Melby
Superstar
Posts: 440
Joined: 15 Nov 2016 15:40
Family Historian: V6.2

Re: Table Manners

Post by Ron Melby » 20 Jul 2019 23:17

holding off on the text file for the moment, I have extended the business end of my code to:


ptrWork:MoveTo(ptrRCD, rcdOffset)
if ptrWork:IsNotNull() then
ADDR = fhGetValueAsText(ptrWork)
tblADDR[ADDR] = tblADDR[ADDR] or { } -- makes the key if does not exist
area = matAREA(ptrRCD, basOffset) -- builds area
area = (tblADDR[ADDR].area or area) -- if new area add
inter = (tblADDR[ADDR].inter or 0 ) + 1 -- if first interment
tblADDR[ADDR] = {area = area; inter = inter;} -- update table

****new code*****

tblData = (tblADDR[ADDR] or { })
elem = (inter)

ptr[elem] = ptrRCD:Clone() or {}
tblData[ADDR] = {elem = elem; ptr = ptrr[elem];}
end

what intend but do not know how to say it in lua is each tblADDR entry will have an associated entry in a table
the fields in the table will be:
elem =interments in a cemetery, ptr= array of pointers to those interred

I could dispense with elem, because I have it already in Inter. (but I am practicing...)

so, cemeteries come randomly when I loop INDI.

one ptr array might have 1 entry while another 103.

so that when the time comes to print I can do:
for Cem, Rec in
print area
print cem
for i, elem in tbldata. ptr[] do
print name
print this
print that
enddo
enddo

but I dont know how to say, add ptrInter at ptr[elem] correctly
FH V.6.2.7 Win 7 64 bit

User avatar
tatewise
Megastar
Posts: 16616
Joined: 25 May 2010 11:00
Family Historian: V6.2
Location: Torbay, Devon, UK
Contact:

Re: Table Manners

Post by tatewise » 21 Jul 2019 10:01

All you need is to insert the following instead of tblADDR[ADDR] = {area = area; inter = inter;} -- update table

Code: Select all

ptr = (tblADDR[ADDR].ptr or {}) -- cope with first ptrRCD
table.insert(ptr,ptrRCD:Clone()) -- append pointer
tblADDR[ADDR] = {area = area; inter = inter; ptr=ptr; } -- update table
Then later:

Code: Select all

for Cem, Rec in pairs (tblADDR) do
  print (Cem)
  print (Rec.area)
  for i, ptr in ipairs (Rec.ptr) do
    print (fhGetDisplayText(ptr))
    print ("this")
  end
end
Mike Tate ~ researching the Tate and Scott family history ~ tatewise ancestry

User avatar
Ron Melby
Superstar
Posts: 440
Joined: 15 Nov 2016 15:40
Family Historian: V6.2

Re: Table Manners

Post by Ron Melby » 21 Jul 2019 15:33

I have text printing, but this is bedeviling me, no errors but:

table.sort(tblADDR, function(a, b) return a.area < b.area end)

this does not sort, ouput after sort:

GBR.EN.Kent.Kent 2
St. Margarets Church, , Horsmonden, Kent, TN12 8EJ, GBR

HOOK, Elizabeth F (1777 - 1813)
ELPHICK, Samuel M (1772 - 1834)


USA.VT.Franklin. 1
Webster Cemetery, Cook Road, St Albans City, VT, 05478, USA

WEEKS, John M (1779 - 1810)


USA.ND.McKenzie. 5
Schafer Cemetery, , Watford City, ND, 58854, USA

PETERSON, Doris Ann Jean F (1935 - 2004)
THORP, Arthur Leroy M (1887 - 1953)
THORP, Orvel Durland M (1924 - 2014)
THORPE, Isabelle F (1897 - 1960)
THORP, Dorsey Vernon M (1857 - 1945)


USA.NE.Chase. 1
Greenlawn Cemetery, , Lamar, NE, 69023, USA

MITCHELL, Lewis Alonzo M (1850 - 1910)


AUS.QLD.Ward.Scenic Rim 1
Beaudesert Cemetery, , Beaudesert, QLD, , AUS

SIBLEY, Levi B. M (1913 - 1993)

to recap area is AUS.QLD ...
tblADDR[ADDR], area, inter, ptr.

how do I sort the areas so all the USA.MN.Marion etc are all together alphabetically?
FH V.6.2.7 Win 7 64 bit

User avatar
tatewise
Megastar
Posts: 16616
Joined: 25 May 2010 11:00
Family Historian: V6.2
Location: Torbay, Devon, UK
Contact:

Re: Table Manners

Post by tatewise » 21 Jul 2019 16:15

You cannot sort table dictionaries where the index keys are textual, i.e. table pairs cannot be sorted.
You can only sort table arrays where the index keys are consecutive integers, i.e. table ipairs can be sorted.

So you need the following where tblADDR has both textual and integer keys that cross-refer to itself.
This relies on ADDR never being a simple integer.

Code: Select all

ADDR = fhGetValueAsText(ptrWork)
KEY = tblADDR[ADDR] or (#tblADDR + 1) -- obtain integer index key
tblADDR[KEY] = tblADDR[KEY] or { } -- make the table if does not exist
area = matAREA(ptrRCD, basOffset) -- builds area
area = (tblADDR[KEY].area or area) -- if new area add
inter = (tblADDR[KEY].inter or 0 ) + 1 -- increment interments
ptr = (tblADDR[KEY].ptr or {}) -- cope with first ptrRCD
table.insert(ptr,ptrRCD:Clone()) -- append pointer
tblADDR[KEY] = { addr=ADDR; area=area; inter=inter; ptr=ptr; } -- update tables
tblADDR[ADDR] = KEY
Then the table.sort will work and the printing code will need the following.

Code: Select all

table.sort(tblADDR, function(a, b) return a.area < b.area end)
for i, Rec in ipairs (tblADDR) do
  print (Rec.addr)
  print (Rec.area)
  for i, ptr in ipairs (Rec.ptr) do
    print (fhGetDisplayText(ptr))
    print ("this")
  end
end
Mike Tate ~ researching the Tate and Scott family history ~ tatewise ancestry

User avatar
Ron Melby
Superstar
Posts: 440
Joined: 15 Nov 2016 15:40
Family Historian: V6.2

Re: Table Manners

Post by Ron Melby » 21 Jul 2019 17:14

lost -- the chunks are thus:

Code: Select all

  ptrWork:MoveTo(ptrRCD, rcdOffset)
  if ptrWork:IsNotNull() then
    ADDR     = fhGetValueAsText(ptrWork)
    KEY = tblADDR[ADDR] or (#tblADDR + 1) -- obtain integer index key
    tblADDR[KEY] = tblADDR[KEY] or { } -- make the table if does not exist
    area = matAREA(ptrRCD, basOffset) -- builds area
    area = (tblADDR[KEY].area or area) -- if new area add
    inter = (tblADDR[KEY].inter or 0 ) + 1 -- increment interments
    ptr = (tblADDR[KEY].ptr or {}) -- cope with first ptrRCD
    table.insert(ptr, ptrRCD:Clone()) -- append pointer
    tblADDR[KEY] = { addr=ADDR; area = area; inter = inter; ptr=ptr; } -- update tables
    tblADDR[ADDR] = KEY

--[[ temp removed
    ADDR     = fhGetValueAsText(ptrWork)
    tblADDR[ADDR] = tblADDR[ADDR] or { }          -- makes the key if does not exist
    area     = matAREA(ptrRCD, basOffset)         -- builds area
    area     = (tblADDR[ADDR].area or area)       -- if new area add
    inter    = (tblADDR[ADDR].inter or 0 ) + 1    -- if first interment 

    ptr = (tblADDR[ADDR].ptr or {}) -- cope with first ptrRCD
    table.insert(ptr, ptrRCD:Clone()) -- append pointer
    tblADDR[ADDR] = {area = area; inter = inter; ptr = ptr; } -- update table
 ]]
  end

output summary tables for display:

Code: Select all

--  put tblADDR fields into tables
  for k, Rec in pairs(tblADDR) do
    local ADDR = Rec.addr    -- Lookup record Area field once
    table.insert(tblCEM, ADDR)
    cwcem = math.max(cwcem, #ADDR)

    local area = Rec.area    -- Lookup record Area field once
    table.insert(tblArea, area)
    cwara = math.max(cwara, #area)

    local inter = Rec.inter    -- Lookup record Inter field once
    table.insert(tblInter, inter)
    cwbur = math.max(cwbur, #tostring(inter))
  end
163: attempt to index local 'Rec' (a number value)

havent gotten here.
output tables to file.

Code: Select all

  table.sort(tblADDR, function(a, b) return a.area < b.area end)

  for k, Rec in pairs (tblADDR) do
    table.insert(prtFile, Rec.area .. '   Interments: ' .. Rec.inter)
    table.insert(prtFile, Rec.addr .. '\n')
    for k, ptr in ipairs (Rec.ptr) do
      thisptr = Rec.ptr[k]
      local Name = rtvNAME(thisptr)
      local sex = rtvSEX(thisptr)
      local Dates, age, drm, sort = rtvLifeInf(thisptr)
      table.insert(prtFile, Name .. '  ' .. sex .. '  ' .. Dates)
    end
    table.insert(prtFile, '\n')
  end  
  SaveStringToFile(table.concat(prtFile, '\n') .. '\n', 'C:\\Users\\user\\Desktop\\CemArea.txt')
end
the table entry is thus:

tblADDR => (table #1, .2)
[1] => (table .4)
inter => 1
addr => "Saint Olaf Cemetery, State Highway 89 NE, Grygla, MN, 56727, USA"
ptr => (table #1)
[1] (item) => Individual: Alice Elsie BRUCKNER
area => "USA.MN.Marshall.Valley "[T156NR39W S25]""
Saint Olaf Cemetery, State Highway 89 NE, Grygla, MN, 56727, USA => 1

what have I misunderstood this time?
FH V.6.2.7 Win 7 64 bit

User avatar
Ron Melby
Superstar
Posts: 440
Joined: 15 Nov 2016 15:40
Family Historian: V6.2

Re: Table Manners

Post by Ron Melby » 21 Jul 2019 17:33

missed an ipairs.... corrected.
FH V.6.2.7 Win 7 64 bit

User avatar
Ron Melby
Superstar
Posts: 440
Joined: 15 Nov 2016 15:40
Family Historian: V6.2

Re: Table Manners

Post by Ron Melby » 21 Jul 2019 19:34

CemArea.txt
(160.88 KiB) Downloaded 10 times
here is what it looks like now, might try the Word output, so thats only 30 more hours of you debugging my code.....

dont know if thats going to work....

*
* AUS.NSW. . Interments: 1
* Church Of England Cemetery, Ponds Road, Prospect, NSW, 2148, AUS
*
DUNK, Ethel Watson F (1878 - 1921)


*
* AUS.NSW. .Sydney Interments: 1
* Wesleyan Cemetary, Devonshire Street, Surry Hills, NSW, 2000, AUS
*
DUNK, Catherine Agnes F (1868 - 1872)


*
* AUS.NSW.Cumberland.Sydney Interments: 2
* Rookwood General Cemeteries Reserve Trust, Hawthorne Avenue Rookwood Necropolis, Rookwood, NSW, 2141, AUS
*
DUNK, Henry Robert M (1862 - 1937)
JENKINS, Lyla F (1860 - 1916)


*
* AUS.QLD.Ward.Scenic Rim Interments: 1
* Beaudesert Cemetery, , Beaudesert, QLD, , AUS
*
SIBLEY, Levi B. M (1913 - 1993)


*
* AUS.VIC. .Hobsons Bay City Interments: 2
* Williamstown Cemetery, Champion Road, Williamstown, VIC, 3016, AUS
*
HOOK, Sion Richard M (1879 - 1953)
HOOK, Sion M (1849 - 1888)


*
* CAN.AB.Lethbridge Census Division. Interments: 2
* Milk River Cemetery, AB 501, Milk River, AB, T0K 1M0, CAN
*
CHAPMAN, Leon Robert M (1908 - 2000)
THIELEN, Immaculate Christina F (1914 - 2005)


*
* CAN.BC.Fraser Valley Regional District. Interments: 2
* Hatzic Cemetery, , Hatzic, BC, , CAN
*
WINSOR, Katherline Marie F (1920 - 2001)
MAUS, August Gustave M (1916 - 1992)


*
* CAN.ON. . Interments: 1
* Saint Johns Anglican Church, 212 Church Street, Bath, ON, K0H-1G0, CAN
*
DAVY, Peter M (1768 - 1857)


*
* CAN.ON.Chatham-Kent Municipality. Interments: 4
* Evergreen Cemetery, 470 Talbot Street Easr, Blenheim, ON, N0P 1A0, CAN
*
RUSSELL, Barnett Sampson M (1842 - 1925)
RUSSELL, Roy Barnett M (1883 - 1946)
BOYLE, Maria F (1848 - 1934)
WRIGHTSELL, Rose B. F (1885 - 1969)


*
* CAN.ON.Durham Regional Municipality. Interments: 2
* Oshawa Union Cemetery, 760 King Street West, Oshawa, ON, L1J 2L3, CAN
*
COVEY, Nathan M (1771 - 1850)
COVEY, Nathan John M (1800 - 1886)


*
* CAN.ON.Leeds and Grenville United Counties. Interments: 1
* Manhard Cemetery, 5840-5898 County Road 8, Elizabethtown-Kitley, ON, , CAN
*
JOHNS, Sarah F (1787 - 1818)


*
* CAN.ON.Lennox and Addington. Interments: 1
* Saint Johns Anglican Church Cemetery, 212 Church Street, Bath, ON, , CAN
*
CHAPMAN, Aurelia F (1789 - 1873)


*
* CAN.ON.Lennox and Addington.Loyalist Interments: 1
* Fourth Line Cemetery, 6385 CO Road 2, Odessa, ON, K0H 2H0, CAN
*
CHAPMAN, Timothy M (1752 - 1827)


*
* CAN.QU.Montérégie Region. Interments: 1
* Union Cemetery, 5- 61 Rue Principale, Clarenceville, QC, J0J 1B0, CAN
*
COVEY, Samuel Sr. M (1755 - 1822)


*
* CAN.QU.Montérégie Region. Interments: 2
* Saint Georges Anglican Cemetery, , Clarenceville, QU, , CAN
*
CURTIS, Avis F (1764 - 1845)
CHAPMAN, Albert M (1792 - 1872)
FH V.6.2.7 Win 7 64 bit

User avatar
Ron Melby
Superstar
Posts: 440
Joined: 15 Nov 2016 15:40
Family Historian: V6.2

Re: Table Manners

Post by Ron Melby » 22 Jul 2019 00:53

https://www.fhug.org.uk/wiki/doku.php?i ... irect_into

that link doesnt say much, but it says it real briefly.

I sort of went thru miserablesoft links, and find no setfont, getfont, turnonfont, turnofffont.
for i, rec tblADDR
if something:IsNotNull()
area (set bold set font)
less big less bold: address (set off bold set font smaller)
normal name sex dates (set font courier new 10)
end
doc:TypeParagraph()
enddo

whats with book? I dont get it
FH V.6.2.7 Win 7 64 bit

User avatar
tatewise
Megastar
Posts: 16616
Joined: 25 May 2010 11:00
Family Historian: V6.2
Location: Torbay, Devon, UK
Contact:

Re: Table Manners

Post by tatewise » 22 Jul 2019 09:58

Sorry Ron, can't help you much as I don't use those features.

However, it didn't take me long to find the Font Property:
VBA Language Reference > Microsoft Word Visual Basic Reference > Reference > Properties > F > Font Property
https://docs.microsoft.com/en-us/previo ... office.11)

However, that refers to MS Office Word 2003, so not sure if still relevant with latest versions of Word.
Mike Tate ~ researching the Tate and Scott family history ~ tatewise ancestry

Post Reply