TextBox 函数系列之一

Public Declare Function SendMessage Lib “user32” Alias “SendMessageA” (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Const EM_GETSEL = &HB0
Public Const EM_LINEFROMCHAR = &HC9
Public Const EM_LINEINDEX = &HBB

Public Function GetTextBoxRowText(ByVal oTextBox As TextBox, ByVal iLine As Integer) As String ‘获取 TextBox 某行文字
On Error Resume Next
Dim TempArray As Variant
TempArray = Split(oTextBox.Text, vbCrLf, -1, vbTextCompare)
GetTextBoxRowText = TempArray(iLine – 1)
On Error GoTo 0
End Function

Public Function GetTextBoxRowCount(ByVal oTextBox As TextBox) As Integer ‘获取 TextBox 文字行数
On Error Resume Next
GetTextBoxRowCount = 0
Dim TempArray As Variant
TempArray = Split(oTextBox.Text, vbCrLf, -1, vbTextCompare)
GetTextBoxRowCount = UBound(TempArray) – LBound(TempArray) + 1
On Error GoTo 0
End Function

Public Function GetTextBoxColumnCount(ByVal oTextBox As TextBox) As Integer ‘获取 TextBox 文字最大列数
On Error Resume Next
Dim I As Integer, J As Integer
GetTextBoxColumnCount = 0
Dim TempArray As Variant
TempArray = Split(oTextBox.Text, vbCrLf, -1, vbTextCompare)
For I = LBound(TempArray) To UBound(TempArray)
‘Debug.Print Len(TempArray(I)); I
If GetTextBoxColumnCount < Len(TempArray(I)) Then GetTextBoxColumnCount = Len(TempArray(I))
Next I
On Error GoTo 0
End Function

Public Function GetTextBoxColumnCountAtRow(ByVal oTextBox As TextBox, ByVal iRow As Integer) As Integer ‘获取 TextBox 某行文字最大列数
On Error Resume Next
Dim I As Integer, J As Integer
GetTextBoxColumnCountAtRow = 0
Dim TempArray As Variant
TempArray = Split(oTextBox.Text, vbCrLf, -1, vbTextCompare)
Dim iCount As Integer
For I = LBound(TempArray) To UBound(TempArray)
‘Debug.Print Len(TempArray(I)); I
iCount = iCount + 1
If iCount = iRow Then
GetTextBoxColumnCountAtRow = Len(TempArray(I))
Exit For
End If
Next I
On Error GoTo 0
End Function

Public Function GetTextBoxCharCount(ByVal oTextBox As TextBox) As Long’获取 TextBox 文字数
On Error Resume Next
GetTextBoxCharCount = 0
Dim lCount As Long, lRow As Long, lCol As Long
Dim lParam As Long, wParam As Long
‘首先向文本框传递EM_GETSEL消息以获取从起始位置到光标所在位置的字符数
lRet = SendMessage(oTextBox.hwnd, EM_GETSEL, wParam, lParam)
lCount = lRet / 2 ^ 16
‘再向文本框传递EM_LINEFROMCHAR消息根据获得的字符数确定光标以获取所在行数
lRow = SendMessage(oTextBox.hwnd, EM_LINEFROMCHAR, lCount, 0)
lRow = lRow + 1
‘扣除 VbCrlf
GetTextBoxCharCount = lCount – (lRow – 1) * 2
‘向文本框传递EM_LINEINDEX消息以获取所在列数
‘lRet = SendMessage(oTextBox.hWnd, EM_LINEINDEX, -1, 0)
‘lCol = lCount – lRet + 1
On Error GoTo 0
End Function

Public Function GetTextBoxCursorRow(ByVal oTextBox As TextBox) As Long’获取 TextBox 光标所在行
On Error Resume Next
GetTextBoxCursorRow = 0
Dim lCount As Long, lRow As Long, lCol As Long
Dim lParam As Long, wParam As Long
‘首先向文本框传递EM_GETSEL消息以获取从起始位置到光标所在位置的字符数
lRet = SendMessage(oTextBox.hwnd, EM_GETSEL, wParam, lParam)
lCount = lRet / 2 ^ 16
‘再向文本框传递EM_LINEFROMCHAR消息根据获得的字符数确定光标以获取所在行数
lRow = SendMessage(oTextBox.hwnd, EM_LINEFROMCHAR, lCount, 0)
lRow = lRow + 1
GetTextBoxCursorRow = lRow
‘向文本框传递EM_LINEINDEX消息以获取所在列数
‘lRet = SendMessage(oTextBox.hWnd, EM_LINEINDEX, -1, 0)
‘lCol = lCount – lRet + 1
On Error GoTo 0
End Function

Public Function GetTextBoxCursorColumn(ByVal oTextBox As TextBox) As Long’获取 TextBox 光标所在列
On Error Resume Next
GetTextBoxCursorColumn = 0
Dim lCount As Long, lRow As Long, lCol As Long
Dim lParam As Long, wParam As Long
‘首先向文本框传递EM_GETSEL消息以获取从起始位置到光标所在位置的字符数
lRet = SendMessage(oTextBox.hwnd, EM_GETSEL, wParam, lParam)
lCount = lRet / 2 ^ 16
‘再向文本框传递EM_LINEFROMCHAR消息根据获得的字符数确定光标以获取所在行数
lRow = SendMessage(oTextBox.hwnd, EM_LINEFROMCHAR, lCount, 0)
lRow = lRow + 1
‘向文本框传递EM_LINEINDEX消息以获取所在列数
lRet = SendMessage(oTextBox.hwnd, EM_LINEINDEX, -1, 0)
lCol = lCount – lRet + 1
GetTextBoxCursorColumn = lCol
On Error GoTo 0
End Function

Public Sub TurnTextBoxCursor(ByVal oTextBox As TextBox, ByVal iRow As Integer, Optional ByVal iColumn As Integer = 1) ‘把文本文件光标移到某行某列
On Error Resume Next
Dim I As Integer, J As Integer
Dim oShell As Object
Set oShell = CreateObject(“WScript.Shell”)
oTextBox.SetFocus
Dim iCurRow As Integer, iCurColumn As Integer
iCurRow = GetTextBoxCursorRow(oTextBox) ‘当前行
iCurColumn = GetTextBoxCursorColumn(oTextBox) ‘当前列
‘Debug.Print iCurRow; iCurColumn
If iCurRow < iRow Then
For I = iCurRow To iRow – 1
oShell.SendKeys “{DOWN}”
Next I
Else
For I = iRow To iCurRow – 1
oShell.SendKeys “{UP}”
Next I
End If
Wait 50
iCurRow = GetTextBoxCursorRow(oTextBox) ‘当前行
iCurColumn = GetTextBoxCursorColumn(oTextBox) ‘目标行的当前列
‘Debug.Print iCurRow; iCurColumn
If iCurColumn < iColumn Then
For J = iCurColumn To iColumn – 1
oShell.SendKeys “{RIGHT}”
Next J
Else
For J = iColumn To iCurColumn – 1
oShell.SendKeys “{LEFT}”
Next J
End If
Wait 50
iCurRow = GetTextBoxCursorRow(oTextBox) ‘当前行
iCurColumn = GetTextBoxCursorColumn(oTextBox) ‘目标行的当前列
‘Debug.Print iCurRow; iCurColumn
ERR_NORUNNING:
On Error GoTo 0
End Sub

南亚种姓

严格意义上讲,只有印度和斯里兰卡存在种姓制度,这是因为印度地区的人信仰印度教,而周边的巴基斯坦、孟加拉国都信仰伊斯兰教,种姓制度存在的情况比较少。

印度的种姓制度的形成过程

种姓制度的起因要从公元前1500年的一次入侵开始说起。

在公元前2500年,印度地区的印度河流域诞生了古印度文明,古印度文明的主体种群是达罗毗荼人,达罗毗荼人和现在散布在东南亚到澳大利亚的矮黑人关系最为亲密,两者是一个族群。达罗毗荼人建立一个古代文明,就是有名的哈拉巴文化,这个文明就有一个著名的城市摩亨佐达罗,也就是网络传言中被“核弹炸掉”的城市。

但达罗毗荼人没有能力保护自己的文明。在公元前2000年上半叶,居住在里海以及中亚草原的一些游牧民族开始移民,其中一支游牧民族经过伊朗、阿富汗、兴都库什山来到印度河,大约在公元前1500年,他们攻占了达罗毗荼人的城市,征服了北方印度地区,这就是印度的雅利安人,属于普拉克里特人,和欧洲的雅利安人不一样。

雅利安人征服印度河流域以后,一部分达罗毗荼人逃到了印度南部。而留下的大部分幸存的达罗毗荼人成为了奴隶,被雅利安人称为蛮子,而且雅利安人还规定,还禁止两个族群的通婚,并且用颜色区分两个种族,这就是种姓制度最初的来源。

随着社会的发展,雅利安人的社会也发生了社会分化。上层社会和下层社会也泾渭分明,比如祭祀家族专门从事祭祀的宗教人士,部落首领逐渐变成掌握军政的武力集团。四大种姓也在这个时候形成,也就是把人人分为4个等级,即婆罗门、刹帝利、吠舍、首陀罗,以及达利特,即贱民。

主要根据是《梨俱吠陀·原人歌》,书里说道:婆罗门是原人的嘴、刹帝利是原人的双臂、吠舍是原人的大腿、首陀罗是原人的脚。至于贱民,则被排除在原人的身体之外。四个等级的作用如下:

婆罗门就是专门祭祀阶级刹帝利则是武士阶级吠舍是雅利安人平民首陀罗是被征服的达罗毗荼人。这四个等级在印度奴隶制社会时期得到了强化,这一时期出现了《摩奴法典》。

《摩奴法典》是对于各个种姓在职业、婚姻、宗教、法律地位等都有严格的规定,雅利安人通过《摩奴法典》强化了自己的权利和利益。

按照《摩奴法典》的规定:

四大等级的人只能从事自己等级的职业,比如刹帝利就只能做武士贵族。当然刹帝利因为贫困可以从事首陀罗的事,但是首陀罗想做武士贵族,那就要被放逐。四大等级的人只能等级内部通婚,这是为了保证血统的纯正性,但是社会发展,肯定会有混血儿的出现。为了预防这种情况,法典规定,高种姓可以娶低种姓的女子,但是低种姓要是向高种姓女子求婚,就得遭受体罚。但是高种姓的混血儿依旧受到社会的歧视。四大等级的生活上也有很大区别,在古印度只有婆罗门、刹帝利、吠舍有权利进行宗教活动,首陀罗是不配听圣典吠陀。此外在法律上也歧视首陀罗,首陀罗属于法律地位最为卑下者。《摩奴法典》规定的制度成为了日常生活的准则,在印度从奴隶制走向封建制度的时候更加细致化,每个等级开始内部分化,产生了各个不同的小种姓,也就是我们现在看到的印度种姓的常态。

印度和巴基斯坦的分裂,造就了两种不同的社会结构

印度的历史可以简化为这样的过程:北方游牧民族入侵印度建立帝国,之后又有一群南下的游牧民族大败之前的帝国,再建立新的帝国。

而北方的游牧民族,大多来自中亚地区。在八世纪之后,中亚地区的人信仰伊斯兰教,所以入侵印度的北方游牧民族都信仰伊斯兰教。这些游牧民族在一轮一轮入侵印度后,控制了印度大部分地区,他们迫使大量印度人改宗伊斯兰教。这也是印度伊斯兰教得以扩大的原因所在。

根据1941年的调查,印度教信徒约有2亿5千4百万,占总人口的65.63%;伊斯兰教信徒有九千二百万,占总人口的23.81%。伊斯兰教主张人人平等,印度教主张不平等;伊斯兰教要吃牛,印度教崇拜牛,于是两个教派大打出手,发生了很多冲突。

这种冲突被近代征服印度的英国所利用,本来印度最后一个帝国莫卧儿帝国就是信仰伊斯兰教的中亚人建立的,所以帝国的上层都是伊斯兰教信徒,英国在统治印度时大力打击伊斯兰教,以巩固自己的统治。但是1870年之后,印度民族主义运动兴起,英国害怕失去印度,于是就开始扶持伊斯兰教信徒,挑唆印度教和伊斯兰教发生冲突,以稳固统治。

在二十世纪初期,伊斯兰教徒成立了全印度穆斯林联盟,印度教徒则是成立了国大党。英国实际上在两个党派之间平衡,不过两次世界大战后,英国国家势力一落千丈,为了维护自己在战后在印度地区的利益,英国制定了分裂印度地区的方案。即印巴分治。

其实印巴分治最初是穆斯林联盟提出来的,本意是和国大党争夺国家控制权,但是被英国人利用,英国人搞出了《蒙巴顿方案》,把印度地区分为三块,两个国家。三块分别是西北伊斯兰教区,即现在的巴基斯坦;中间的印度教教区,即现在的印度;东北的伊斯兰教区,即现在的孟加拉国。本来孟加拉国和巴基斯坦是一个国家,只是后来在印度战争分裂为两个国家。

由于巴基斯坦和孟加拉国以伊斯兰教为信仰,种姓制度被弱化,没有印度那么强烈,而印度之所以种姓制度盛行至今,就是因为印度教的信仰依旧存在。

结语 印度和斯里兰卡由于印度教传承几千年,信仰的民众较多,这使得培养种姓制度的土壤依旧存在,知道今天还见到踪影。而巴基斯坦和孟加拉国由于伊斯兰信仰,使得种姓制度比较弱化,没有印度那么严重。

婆罗门教

  婆罗门教(Brahmanism),是起源于古印度的宗教,也是现在的印度国教印度教的古代形式,以《吠陀经》为主要经典,以把种姓制度作为核心教义,崇拜三大主神而得名。它拥有10.5亿信徒(1993年统计数),仅次于拥有15亿信徒的基督教、11亿信徒的伊斯兰教,远超拥有3亿信徒的佛教。

  婆罗门教起源于公元前2000年的吠陀教,等级森严,把人分为4种姓氏:婆罗门,刹帝利,吠舍,首陀罗。

  婆罗门:教士和学者。

  刹帝利:贵族和战士。

  吠舍:农夫和客商。

  首陀罗:农奴和奴隶。

  公元前6世纪至公元4世纪是婆罗门教的鼎盛时期,公元4世纪以后,由于佛教和耆那教的发展,婆罗门教开始衰弱。公元8、9世纪,婆罗门教吸收了佛教和耆那教的一些教义,结合印度民间的信仰,经商羯罗改革,逐渐发展成为印度教。印度教与婆罗门教没有本质上的区别,其教义基本相同,都信奉梵天、毗湿奴、湿婆三大神,主张善恶有报,人生轮回,轮回的形态取决于现世的行为,只有达到“梵我同一”方可获得解脱,修成正果。因此,印度教也称为“新婆罗门教”,前期婆罗门教则称为“古婆罗门教”。一张根据《梨俱吠陀·原人歌》所绘的瓦尔那等级:婆罗门是原人的嘴、刹帝利是原人的双臂、吠舍是原人的大腿、首陀罗是原人的脚。至于贱民,则被排除在原人的身体之外。

等额本金与等额本息

等额本金方式本金归还快,利息支付少,但前期还款额度大,适合当前收入较高者,或预计不久将来收入大幅度增长,准备提前还款人群,则较为有利。如果购房属于经济实力较强的,业主追求利润最大化,或者说手上资金充足,贷款无压力。

等额本息方式还款压力均衡但支付利息多,适合有一定存款,但收入可能持平或下降,生活负担日益加重,并且无打算提前还款的人群。如果购房者手头资金不足,考虑到经济压力和准备提前还款,或者所能承受到的月供不是很多,等额本息是个不错的选择。

等额本金与等额本息是什么

1、等额本金是指借款人每月偿还的本金是相等的,随着每月偿还贷款,剩余未还款本金减少,从而每月偿还的利息会减少,因此等额本金还款方式下,借款人每月偿还月更是递减的。

每个月还款本金一样,利息递减,也就是第一个月月还款总额最高,以后依次递减。计算公式为:每月还款金额=(贷款本金/还款月数)+(本金—已归还本金累计额)×每月利率。

2、等额本息是指每月偿还金额相同的一种还款方式,将贷款本金和贷款总利息相加,然后平均分摊到每个还款月,借款人选择等额本息还款方式,每月偿还的金额是相同的。

每月还款总额一样,每个月还款的本金依次递增,利息递减。计算公式为:每月还款金额=〔贷款本金×月利率×(1+月利率)^还款月数〕÷[(1+月利率)^还款月数-1]。

常见佛教手印

佛教的手势被称为“印相”或“印契”,又称“手印”。在象征佛说的思想意念时,和世俗生活中的手势绝不可同日而语。“手印”在开始出现佛像时就是和佛像的造型融汇在一起的。在佛教造像中,必不可少的手印造型,历来以释迦牟尼五印为典型。
佛教的各种手势代表佛像的不同身份,表示佛教的各种教义,是具有印度特点的人体语言,表达的含义极为丰富。常见的有说法印、无畏印、与愿印、降魔印、禅定印五种,即“释迦五印”。手印形式可有多种变化,尤其是密教手印多达几百种,变化莫测。

说法印

以拇指与中指(或食指、无名指)相捻,其余各指自然舒散。这一手印象征佛说法之意,表现佛陀于鹿野苑初转法轮时的状态,所以称为说法印,也称转法轮印。
象征空满的智慧和立誓育人。也是“施无畏印”的一种变形,是诠释的手势。

施无畏印

屈臂上举于胸前,手指自然舒展,手掌向外。这一手印表示佛为救济众生的大慈心愿,能使众生心安,无所畏怖,所以称无畏印。
代表无畏、平安和抚慰。相当于佛陀给予信众清静及护佑的标志。这一手印专属于释迦牟尼。

与愿印

以手自然下伸,指端下垂,手掌向外,表示佛菩萨能给与众生愿望满足,使众生所祈求之愿都能实现之意。此印相具有慈悲之意,所以往往和施无畏印配合。

降魔印

以右手覆于右膝,指头触地,以示降伏魔众。相传释迦在修行成道时,有魔王不断前来扰乱,以期阻止释迦的清修。后来释迦即以右手指触地,令大地为证,于是地神出来证明释迦已经修成佛道,终使魔王惧伏,因此称为降魔印。又因以手指触地,所以又称触地印。

禅定印

这是佛陀入於禅定时所结的手印,以双手仰放下腹前膝上,右手置于左手上,两拇指的指端相接。这一手印表示禅思,使内心安定之意。据说释迦佛在菩提树下禅思入定修习成道时就是采用这种姿势。在密教中,这种手印是胎藏界大日如来所用,称为“法界定印”。