Monday, March 17, 2014


அறிவிப்பு

அன்புடையீர்,

இன்று முதல் இந்த வலைப்பதிவின் உள்ளடக்கம் அனைத்தையும் Creative Commons Attribution-ShareAlike 3.0 Unported உரிமத்தின் அடிப்படையில் வழங்குகிறேன். இதன் மூலம்,

இந்த வலைப்பதிவின் உள்ளடக்கத்தை நீங்கள் எப்படி வேண்டுமானாலும் பயன்படுத்தலாம். திருத்தி மேம்படுத்தலாம். விற்கலாம்.

முழுக்கட்டுரையாக இன்னொரு தளத்தில் இடலாம். அச்சிட்டோ, ஒலிப்பதிவாகவோ, EPUB, PDF, MOBI போன்ற வடிவங்களிலோ பகிரலாம்

இவற்றைச் செய்ய என்னுடைய முன் ஒப்புதல் தேவையில்லை. ஆனால், அவ்வாறு பயன்படுத்தும் போது, நீங்கள் வெளியிடும் உள்ளடக்கமும் மேற்கண்ட அனைத்து உரிமங்களையும் அதனைப் பயன்படுத்துபவருக்குத் தர வேண்டும். உள்ளடக்கத்தின் மூலமாக இந்த இணையத்தளத்தின் முகவரியையும் கட்டுரையையும் குறிப்பிட வேண்டும். இணையத்தை அணுகவல்ல ஊடகமாக இருப்பின், சொடுக்கவல்ல இணைப்பு ஒன்றைத் தருவதும் வரவேற்கப்படுகிறது.

அன்புடன்,

ச.குப்பன்

ஓப்பன் ஆஃபிஸ் பேஸிக்- 108


ஓப்பன் ஆஃபிஸ் பேஸிக்கின் குறிமுறை வாயிலாக ஒரு ஆவணத்தை திறப்பதற்கு பின்வரும் செயலிகள் பயன்படுகின்றன

function

fnOpenDoc(sFile)

sURL = ConvertToURL(sFile)

fnOpenDoc = StarDesktop.loadComponentFromURL(sURL, "_blank", 0, Array())

end function

அதற்கு பதிலாக இதே ஓப்பன் ஆஃபிஸ் பேஸிக்கின் பின்வரும் குறிமுறை வாயிலாக நடப்பிலுள்ள வார்ப்புருவிலிருக்கும் கோப்பு ஒன்றினை அது எந்தஇடத்திலிருக்கின்றதுஎன்ற வழியைமட்டும் குறிப்பிட்டு திறக்கமுடியும். அவ்வாறு திறப்பதற்கு முடியவில்லை என்றால் அதற்கான செய்தியை திரையில் காண்பித்துவிடும்.

Dim PathService as Object

Dim TemplatePath as String ' The path list

Dim SCPos as Integer ' The position of the next semi-colon

Dim MyTemplatePath as String ' The URL for the user template

' substitute your template name here

const TemplateName = "MyTemplate.ott"

' This seems to be the place in which OO stores user templates

const UserTemplateDirectory="/user/template"

PathService=CreateUNOService("com.sun.star.util.PathSettings")

TemplatePath=PathService.Template

MyTemplatePath=""

do while len(TemplatePath) >0

SCPos=InStr (TemplatePath,";")

if SCPos>0 then

MyTemplatePath=Left(TemplatePath, SCPos-1)

else

MyTemplatePath=TemplatePath

end if

' NOTE: as well as file URLs there are some others which should be ignored

if InStr(myTemplatePath,"file:///")=1 And _

Right(myTemplatePath,14) = UserTemplateDirectory then

exit do

end if

TemplatePath=mid(TemplatePath, SCPos+1, len(TemplatePath)-SCPos)

MyTemplatePath=""

loop

if MyTemplatePath<>"" then

TemplatePath=ConverttoURL(TemplateName)

MyTemplatePath=MyTemplatePath & "/" & TemplateName

InvoiceDoc=StarDesktop.LoadComponentfromURL(MytemplatePath, "_blank", 0, Array())

else

MsgBox "Cannot find the template directory"

end if

இவ்வாறு தெரிவுசெய்து வெவ்வேறு கோப்புகளை திறக்கும்போது நடப்பிலுள்ள தெரிவுசெய்யபட்ட கோப்பு மட்டும் எது என அறிந்துகொள்ள பின்வரும் குறிமுறைகள் உதவுகின்றன

sub main

BasicLibraries.loadLibrary("XrayTool")

if fnWhichComponent(thisComponent) = "Text" then

oCurSelection = thisComponent.getCurrentSelection()

'xray oCurSelection

if oCurSelection.supportsService("com.sun.star.text.TextRanges") then

msgbox "There are " & oCurSelection.getCount() & _

" selections in the current text document."

end if

end if

end sub

இந்த குறிமுறைவரிகளை கொண்டுநடப்பிலுள்ள கோப்புகளை ஓப்பன் ஆஃபிஸ் இல்லாது வேறுவகையில் திறக்க முயற்சிக்கும்போது முடியாமல் கணினியின் இயக்கம் தடுமாறும் அவ்வாறு தடுமாறாமல் வேறு மொழிகளின் மூலமாகவும் இதே குறிமுறைவரிகளை கொண்டு நடப்பிலுள்ள கோப்புகளை திறப்பதற்கு அதற்கான பண்பியல்புகளை மட்டும் பின்வருமாறு மாற்றியமைத்துகொள்க

sub main

BasicLibraries.loadLibrary("XrayTool")

if fnWhichComponent(thisComponent) = "Text" then

oCurSelection = thisComponent.getCurrentSelection()

if oCurSelection.supportsService("com.sun.star.text.TextRanges") then

nCount = oCurSelection.Count

'xray oCurSelection.getByIndex(0)

'Warning: The insertion point will have the same action applied twice

'in this case it doesn't matter, but in others it might.

for i = 0 to nCount - 1

oCurSelection.getByIndex(i).setPropertyValue("CharStyleName", "Strong Emphasis")

next

end if

end if

end sub

இவ்வாறு நம்மால் தெரிவுசெய்யப்பட்ட ஓப்பன் ஆஃபிஸினுடைய ரைட்டர் ஆவணம் ஒன்றை திறந்தபின் அதிலுள்ள குறிப்பிட்ட பத்தியை அனுகி திறப்பதற்கு பின்வரும் குறிமுறைவரிகள் பயன்படுகின்றன

' Create enumeration object

oTextElementEnum = thisComponent.getText().createEnumeration()

'or thisComponent.getCurrentSelection().getByIndex(i).createEnumeration()

' loop over all text elements

while oTextElementEnum.hasMoreElements()

oTextElement = oTextElementEnum.nextElement

if oTextElement.supportsService("com.sun.star.text.TextTable") then

MsgBox "The current block contains a table."

end if

if oTextElement.supportsService("com.sun.star.text.Paragraph") then

MsgBox "The current block contains a paragraph."

end if

wend

அவ்வாறு திறந்து அந்த கோப்பின் ஆவணத்தை அனுகிடும்போது அதில் குறிப்பிட்ட பெயரை அனுகிட பின்வரும் குறிமுறைவரிகள் பயன்படுகின்றன

mNames = thisComponent.getSheets.getElementnames

for i = lbound(mNames) to ubound(mNames)

msgbox mNames(i)


பின்வரும்குறிமுறைகள் ஒரு ஆவணத்தில் புதிய உரைசுட்டியை உருவாக்கி நாம் அனுகிய அதே பகுதியில் சுட்டிகாட்டிடுமாறும் அதனை எங்கு வேண்டுமானாலும் நகர்த்த தயாராக இருக்குமாறும் செய்யபட்டுள்ளது

oVC = thisComponent.getCurrentController.getViewCursor

oCursor = oVC.getText.createTextCursorByRange(oVC)

oCursor.gotoStartOfSentence(false)

oCursor.gotoEndOfSentence(true)

msgbox oCursor.getString

பின்வரும்குறிமுறைகள் அதே ஆவணத்தில் புதிய உரைசுட்டிக்கு பதிலாக செவ்வக பெட்டியை நாம் அனுகிய அதே பகுதியில் உருவாக்கிட பயன்படுகின்றன

dim aPoint as new com.sun.star.awt.Point

dim aSize as new com.sun.star.awt.Size

aPoint.x = 1000

aPoint.y = 1000

aSize.Width = 10000

aSize.Height = 10000

oRectangleShape = thisComponent.createInstance("com.sun.star.drawing.RectangleShape")

oRectangleShape.Size = aSize

oRectangleShape.Position = aPoint

thisComponent.getDrawPages.getByIndex(0).add(oRectangleShape)


மேற்கண்டவாறு நாம் உருவாக்கும் புதிய ஆவணத்தினை கையாளுபவரையும் கவணித்தல் செய்பவரையும் கொண்டுவருவதற்கு பின்வரும்குறிமுறைவரிகள் பயன்படுகின்றன.

global IannzExampleKeyHandler

sub SetupKeyHandler

oController = thisComponent.currentController

IannzExampleKeyHandler = CreateUnoListener("KeyHandler_","com.sun.star.awt.XKeyHandler")

oController.addKeyHandler(IannzExampleKeyHandler) ' Register the listener

end sub

sub RemoveKeyHandler

thisComponent.currentController.removeKeyHandler(IannzExampleKeyHandler)

end sub

sub KeyHandler_disposing

end sub

function KeyHandler_keyReleased(oKeyEvent as new com.sun.star.awt.KeyHandler) as boolean

KeyHandler_keyReleased = False

end function

function KeyHandler_keyPressed(oKeyEvent as new com.sun.star.awt.KeyHandler) as boolean

KeyHandler_keyPressed = false 'Let other listeners handle the event

if oKeyEvent.modifiers = com.sun.star.awt.KeyModifier.MOD2 then 'Control key was pressed

if oKeyEvent.keyCode = com.sun.star.awt.Key.Q then

msgbox "Alt + Q was pressed"

KeyHandler_keyPressed = true 'Don't let other listeners process this event

end if

end if

end function

இதுவரை நாம் கடந்த 108 தொடரின் வாயிலாக ஓப்பன் ஆஃபிஸ் பற்றி அதில் ஆவணங்களை உருவாக்க பயன்படும் ஓப்பன் ஆஃபிஸ் ரைட்டர், கணக்கீடுகள் செய்வதற்கான ஓப்பன் ஆஃபிஸ் கால்க், படவில்லை காட்சியை பயன்படுத்தி கொள்ள ஓப்பன் ஆஃபிஸ் இம்ப்பிரஸ், ஓவியம் அல்லது படம் வரைவதற்கான ஓப்பன் ஆஃபிஸ் ட்ரா, கணித சூத்திரங்களை கையாள ஓப்பன் ஆஃபிஸ் ஃபார்முலா, தரவுகளை கையாளுவதற்கான ஓப்பன் ஆஃபிஸ் பேஸ், பொதுவான பிடிஎஃப் ஆக கோப்பினை உருமாற்றுவது இணைய பக்கத்தை உருவாக்குவது ஆகிய தேவைகளுக்கான பொதுபயன்பாடு , இந்த பயன்பாடுகளின் தானியங்கி செயலை செய்வதற்கான கட்டளை குறிமுறைவரிகளை உருவாக்கிட ஓப்பன் ஆஃபிஸ் பேஸிக் என தெரிந்துகொண்டோம்.

இந்த தொடர்களை படிப்பவர்கள் தங்களுடைய தேவைகளுக்கு எம்எஸ் ஆஃபிஸ் எனும் கட்டணம் செலுத்தி பெறவேண்டிய தனியுடைமை பயன்பாட்டிற்கு மாற்றாக அல்லது பதிலாக அதே வாய்ப்புகளுடனும் வசதிகளுடனும் கூடுதலான வாய்ப்புகளையும் வசதிகளையும் வழங்க தயாராக உள்ள கட்டணம் எதுவும் செலுத்தவேண்டிய அவசியமே இல்லாத ஓப்பன் ஆஃபிஸை பயன்படுத்தவேண்டும் என்ற பேரவாவே இந்த தொடர்கட்டுரையின் நோக்கமாகும்.

மேலும் இந்த ஓப்பன் ஆஃபிஸானது எந்தவொரு இயக்கமுறைமையிலும் இயங்கும் திறன்கொண்டது. அதுமட்டுமின்றி இது ஒரு திறமூல பயன்பாடாக விளங்குகின்றது அதனால் தேவையெனில் இந்த ஓப்பன் ஆஃபிஸினுடைய மூலக்குறிமுறைகளை பெற்று நாம் விரும்பிய கூடுதல் வசதிகளை வழங்குமாறு நாமே மாற்றியமைத்து கொள்ளமுடியும் அல்லது இதற்கென உள்ள தன்னார்வ குழுவிடம் நம்முடைய தேவையை அறிவித்தால் அடுத்து வெளியிடும் பதிப்பில் அந்த வசதியுடன்சேர்த்து வெளியிடபடும் என்பதையும் கருத்தில் கொள்க.

. இந்த தொடரை படித்திடும் அனைவரும் இந்த ஓப்பன்ஆஃபிஸ் பயன்பாட்டினை தத்தமது தேவைகளுக்கு ஏற்ப பயன்படுத்தி பயனடையுங்கள் என கூறி விடைபெறும்

ச.குப்பன்

ஓப்பன் ஆஃபிஸ் –பேஸிக்-107


ஓப்பன் ஆஃபிஸின் பேஸிக் குறிமுறைவரிகளானது நூலகங்களுக்குள் தகவமைப்பு கூறாக(module) தேக்கிவைக்க படுகின்றது.இவ்வாறான ஒரு நூலகமானது மற்றவர்களுடன் பங்கிட்டு கொள்ளுமாறும், நடப்பு பயனாளர் பயன்படுத்தி கொள்ளுமாறும், நடப்பு ஆவனத்திற்குள் பயன்படுமாறும் இருக்கும் அதனால் இதிலிருந்து நாம் விரும்பிய குறிமுறைவரிகளை நகலெடுத்து கொள்ளவோ வேறு இடத்திற்கு நகர்த்தவோ செய்யலாம் இந்த நூலகங்கள் எந்த கோப்பகத்திற்குள் உள்ளது என Tools => Options=> OpenOffice.org => Paths => BASIC.=> என்றவாறு கட்டளைகளை செயற்படுத்துவதன் வாயிலாக அறிந்து கொள்ளமுடியும் இந்த நூலகங்களுக்குள் ஒரு தகவமைப்புகூறின்(module) அதிகபட்ச எண்ணிக்கை16000 (modules)உம் அதன் கொள்ளளவானது 64kb ஆகும்.

முதன் முதல் இந்த ஒருங்கிணைந்த குறிமுறை சூழலை நாம் அனுகிட Tools => Macros => Organize macros => OpenOffice.org Basic=> என்றவாறு கட்டளைகளை செயற்படுத்துக. பின்னர் தோன்றிடும் திரையில்புதிய குறிமுறைவரிகளின் பெயராக வழக்கமானHelloWorld என்றவாறு அமைத்துகொண்டும் Standard என்றவாறு தெரிவுசெய்து அமைத்து கொண்டும் New என்றவாறு பெயரிட்டுகொள்க பொதுவாக இந்த குறிமுறைவரிகளானது பின்வருமாறு இருக்கும்

REM*****BASIC*****

Sub Main

End Sub

Sub HelloWorld

End Sub

இந்நிலையில் இடம்சுட்டியானது Sub HelloWorldஎன்ற வரியின் தொடக்கத்தில் இருக்கும் அடுத்தகாலியான வரிக்கு இடம்சுட்டியை நகர்த்திசென்று msgbox "Hello World!" என்றவாறு தட்டச்சு செய்திடுக பின்னர் மேக்ரோவினுடைய கருவிகளின்பட்டையிலுள்ள Run என்ற பொத்தானை தெரிவுசெய்து சொடுக்குக அல்லது கட்டளை பட்டையில் Tools => Macro => Run Macro=> என்றவாறு கட்டளைகளை தெரிவுசெய்து சொடுக்குக உடன் ஒரு சிறிய செய்திபெட்டியில் Hello World! என்றவாறான செய்தி திரையில் பிரதிபலிக்கும்.

இந்த குறிமுறைவரிகளாது மிகச்சரியாக செயல்படுகின்றது என அறிந்தவுடன் மேலே செந்தரசெயல்பட்டையிலுள்ள save என்ற பொத்தானை தெரிவுசெய்து சொடுக்கி சேமித்துகொள்க அல்லது OpenO ffice.org இலிருந்து வெளியேறினால் தானாகவே இந்த குறிமுறைவரிகளானதுசேமித்துகொள்ளும்.

மேலும் இந்த குறிமுறைவரிகளில் String,Boolean,Float,Double,Long,Currency Integer,Array,என்பன போன்ற மாறிகளை பயன்படுத்தி நாம் விரும்பும் விளைவுகளை பெற்றிடமுடியும் அதனை தொடர்ந்து

sub HelloWorld

dim i as integer 'This line is optional

for i = 0 to 2

next i

end sub

என்றவாறு மேலே கூறிய மாறிகளில் ஒன்றை பயன்படுத்தி அந்த HelloWorld என்பதன் குறிமுறைவரிகளை மாற்றியமைத்துகொள்ளமுடியும் பொதுவாக ஒருமைக்ரோசாப்ட்டின் ஆஃபிஸ் பயன்பாடு போலல்லாது இந்த ஓப்பன் ஆஃபிஸானது ஒரே பயன்பாட்டிற்குள் பல்வேறு பயன்பாடுகளும் பயன்படுத்த ஏதுவாக தயாராக இருக்கும். அதாவது நாம் வழக்கமாக மைக்ரோசாப்ட் பயன்பாடு போன்று ஒவ்வொரு பயன்பாட்டினையும்

oDoc = StarDesktop.loadComponentFromURL("private:factory/swriter", "_blank", 0, Array())

என்றவாறான கட்டளை வரிகளின் மூலம் புதிய ஆவணத்தை உருவாக்கமுடியும்.

oDoc = StarDesktop.loadComponentFromURL("private:factory/scalc", "_blank", 0, Array())

என்றவாறான கட்டளை வரிகளின் மூலம் புதிய விரிதாளை உருவாக்கமுடியும். இவ்வாறு ஒவ்வொரு பயன்பாட்டினையும் தனித்தனியான குறிமுறைவரிகளின்மூலம் உருவாக்குவதற்கு பதிலாக மிகசுலபமாக,

function fnNewDoc(sDocType as string)

fnNewDoc = StarDesktop.loadComponentFromURL("private:factory/" & sDocType , "_blank", 0, Array())

end function

என்றவாறான சாதாரான செயலிகளின் வரிகளை அமைத்துகொண்டபின்னர்,

oDoc = fnNewDoc("swriter")

oDoc = fnNewDoc("scalc")

oDoc = fnNewDoc("simpress")

oDoc = fnNewDoc("sdraw")

oDoc = fnNewDoc("smath")


என்றவாறு மற்ற பயன்பாடுகளையும் ஒரே பயன்பாட்டின் திரையிலிருந்து மற்ற பயன்பாடுகளை உருவாக்கிடமுடியும். இதனை தொடர்ந்து இதுபற்றி மேலும் அறிந்து கொள்ள விழைபவர்கள் பின்வரும் இணைய முகவரிக்கு சென்று அறிந்துகொள்க

http://api.openoffice.org/docs/common/ref/com/sun/star/frame/XComponentLoader.html .

Sunday, March 9, 2014

ஓப்பன் ஆஃபிஸ் பேஸிக்-106


பொதுவாக ஓப்பன் ஆஃபிஸ் பேஸிக்கின் அனைத்து தரவுகளும் XML –ன் வடிவமைப்பில் தேக்கிவைக்கபடுகின்றன. XML –ன் வெவ்வேறுவகைகளில் உள்ள libraries.dtd, module.dtd., dialog.dtd என்பனபோன்ற DTD என்றபின்னொட்டுடன்கூடிய கோப்புகளுக்குள் இவைகளை வைத்து பயன்படுத்தி கொள்ளபடுகின்றது கூடுதலாக கடவுச்சொற்களுடன் இவை பாதுகாப்பாக தேக்கிவைக்கபடுகின்றன. மேலும் script.xlc , dialog.xlc ஆகிய library container indexஆக இவைகள்தேக்கி வைக்கபடுகின்றன இவைகளின் xlc என்ற பின்னொட்டில் உள்ள lc எனும்இரு எழுத்துகளும் library container என்பதை குறிக்கின்றன. OpenOffice.org ஐ நிறுவுகை செய்திடும்போது கோப்புகளை தேக்கிவைக்கபடும் இடமும் autopilot libraries என்பவை தேக்கி வைக்கபடும் ஒரேநினைவகஇடமாகும் அதனால் இதனுடைய மூலக்குறிமுறைவரிகளை யார்வேண்டுமானாலும் படித்துவிடலாம் என பயந்துவிடாதீர்கள் இவைகள் கடவுச்சொற்களுடன் மட்டுமே தேக்கிவைக்க படுகின்றன என்ற செய்தியை மனதில் கொள்க.

autopilot .xlb libraries ஆனது user/basic/*.xlc என்ற கோப்பிற்குள் பதிவுசெய்யபடுகின்றன ஆனால் இவை share/basic என்ற இடத்தில் தேக்கிவைக்கபடுகின்றன அதனால் ஒரு network ஐ நிறுவுகையின்போதுகூட இதனை நீக்கம் செய்திடவோ தற்காலிகமாக இதன்செயலை நிறுத்தம் செய்திடவோமுடியும்

அதுமட்டுமின்றி குழப்பமில்லாமல் பாதுகாப்பாக இருப்பதற்காக xlb , xba ஆகிய வெவ்வேறு பின்னொட்டு பெயர்களுடனும் SmallDialog,BigDialog ஆகிய வேவ்வேறு தனித்தனி துனை கோப்பகத்திற்குள்ளும் இவை தேக்கிவைக்கபடுகின்றன. Basic libraries மட்டும் கடவுச்சொற்களுடன் தேக்கிவைக்கபடுகின்றன. நூலகபயன்பாடுகள் நேரடியாக கோப்பு அமைவிற்குள் தேக்கிவைக்கபட்டால் இந்தஆவணநூலகமானது ஆவணத்தின் கட்டுகோப்பிற்குள் தேக்கிவைக்கின்றது. இந்த ஆவணங்களில் Basic library container, dialog library container ஆகிய இரண்டும் தனித்தனியே துனைக்கோப்பகத்திற்குள் தேக்கிவைக்கபடுகின்றன இந்நிலையில் கடவுச்சொற்களுடன் உள்ளகோப்புகள் அதே பெயரில் ஓரேஇடத்தில் தேக்கிவைக்கபட்டாலும் கடவுச்சொற்களுடன் கூடிய கோப்பானது கூடுதலாக code.bin என்ற வகை கோப்புடன் சேர்த்து தேக்கிவைக்கபடுகின்றது பொதுவாக OpenOffice.org ஐ நிறுவுகை செய்திடும்போது Basic libraries ஐ இதனுடன் சேர்த்திட முதலில் *.oxt என்ற பின்னொட்டு கோப்பு கட்டுகளாக ஆக்கிடுக பின்னர் Tools => Extension Manager=> என்றவாறு கட்டளைகளை செயற்படுத்தியபின் தோன்றிடும் Extension Manager என்ற திரையில் Add என்ற பொத்தானை தெரிவுசெய்து சொடுக்குக பிறகு நாம் விரும்பும் extension package ஐ தெரிவுசெய்துகொண்டு Ok என்ற பொத்தானை தெரிவுசெய்து சொடுக்குக

இவ்வாறு நிறுவுகை செயததை நீக்கம் செய்வதற்காக Tools => Extension Manager=> என்றவாறு கட்டளைகளை செயற்படுத்தியபின் தோன்றிடும் Extension Manager என்ற திரையில் நாம் விரும்பும் extension package ஐ தெரிவுசெய்துகொண்டு Remove என்ற பொத்தானை தெரிவுசெய்து சொடுக்குக. ஒரு விரிவாக்க கட்டுகளின் (extension package (*.oxt) )கோப்பானது ஒரு சுருக்கி கட்டபட்ட Basic libraries ஆகியவையடங்கிய சுருக்குகோப்பாகும். இந்த கோப்புகட்டினுடைய கோப்பகமானது uno-packages என இயல்புநிலையில் இருக்கும் இதனை சென்றடைவதற்கான வழியாக /share, அல்லது /user அல்லது /program. என இருக்கும் அவ்வாறே tool logs என்பதனுடைய செயல்களனைத்தும் /log.txt என்பதற்குள் இருக்கும் கோப்புகளை பயன்படுத்திடும்போது பிழைஏதேனும் உருவானால் tool logs ஆனது பின்புலத்தில் பார்த்து கொள்ளும். தற்காலிக நினைவகத்தை கையாளும் போது ஏற்படும் சிரமத்தை unopk ஐ மறுநிறுவுகை செய்து சரிசெய்துகொள்க