Ring Documentation, Release 1.2
Sorry, We can't use x!
Now we will talk about NULL and ISNULL()
Since we get error message when we deal with uninitialized variables
We can check these errors using Try/Catch/Done, So we uses NULL and ISNULL() for dealing with Strings.
NULL is a variable contains an empty string
ISNULL() is a function that returns true (1) if the input is an empty string or just a string contains “NULL”
This because we need to test these values (empty strings) and strings contains “NULL” that sometimes come from
external resource like DBMS.
Example
See IsNull(5) + nl + # print 0
IsNull("hello") + nl + # print 0
IsNull([1,3,5]) + nl + # print 0
IsNull("") + nl + # print 1
IsNull("NULL") # print 1
63.34 How to print lists that contains objects?
In this example we will see how we can print a list contains objects.
aList = [[1,2,3] , new point(1,2,3), new point(1,2,3)]
see "print the list" + nl
see alist
see "print the item (object)" + nl
see alist[2]
class point x y z
func init p1,p2,p3 x=p1 y=p2 z=p3
Output
print the list
1
2
3
x: 1.000000
y: 2.000000
z: 3.000000
x: 1.000000
y: 2.000000
z: 3.000000
print the item (object)
x: 1.000000
y: 2.000000
z: 3.000000
63.35 How to insert an item to the first position in the list?
To insert an item we can use the insert(aList,nIndex,Value) function.
63.34. How to print lists that contains objects? 760
Ring Documentation, Release 1.2
aList = 1:5
insert(aList,0,0)
See aList # print numbers from 0 to 5
63.36 How to print new lines and other characters?
To print new line we can use the nl variable.
See "Hello" + nl
or we can use multi-line literal as in the next example
See "Hello
"
if we want to print other characters we can use the char(nASCII) function
See char(109) + nl + # print m
char(77) # print M
63.37 Why we don’t use () after the qApp class name?
When we use RingQt to create GUI application, we uses () after the class name when we create new objects for
example.
new qWidget() { setWindowTitle("Hello World") resize(400,400) show() }
but before doing that we create an object from the qApp class and we don’t use () after that
Load "guilib.ring"
app = new qApp
{
win=new qWidget()
{
setwindowtitle(:test)
show()
}
exec()
}
Using () after the class name means calling the init() method in the class and passing parameters to this method.
If we used () while no init() method in the class we get the expected error message.
The class qApp don’t have this method while the other classes have it because they need it to create an object using
a function that return a pointer to that object and this pointer will be stored in an attribute called pObject, for more
information see ring_qt.ring file which contains the classes.
63.38 Why the window title bar is going outside the screen?
When we write the next code
63.36. How to print new lines and other characters? 761
Ring Documentation, Release 1.2
Load "guilib.ring"
app = new qApp
{
win=new qWidget()
{
setwindowtitle(:test)
setGeometry(0,0,200,200)
show()
}
exec()
}
I would expect that the window will run at the point (0,0) with (200,200) size but the actual result is that the window
title bar is going outside the screen.
This is related to the behavior of Qt framework.
The next code will avoid the problem
load "guilib.ring"
new qApp {
new qWidget() {
move(0,0)
resize(200,200)
show()
}
exec()
}
63.39 How to create an array of buttons in GUI applications?
Check the next example:
Load "guilib.ring"
App1 = new qApp {
win1 = new qWidget() {
move(0,0)
resize(500,500)
new qPushButton(win1)
{
settext("OK")
setclickevent("click()")
}
btn1 = new qPushButton(win1)
{
setgeometry(100,100,100,30)
settext("Button1")
}
btn2 = new qPushButton(win1)
{
setgeometry(200,100,100,30)
settext("Button2")
}
63.39. How to create an array of buttons in GUI applications? 762
Ring Documentation, Release 1.2
button = [btn1, btn2]
show()
}
exec()
}
func click
button[1] { settext ("Button3") }
button[2] { settext ("Button4") }
63.40 How to Close a window then displaying another one?
This example demonstrates how to close a window and show another one
Load "guilib.ring"
app=new qApp
{
frmBefore=new Qwidget()
{
setWindowTitle("before!")
resize(300,320)
move(200,200)
button=new qPushButton(frmBefore)
{
setText("Close")
setClickEvent("frmBefore.close() frmMain.show()")
}
show()
}
frmMain=new Qwidget()
{
setWindowTitle("After!")
resize(300,320)
move(200,200)
}
exec()
}
63.41 How to create a Modal Window?
This example demonstrates how to create a modal window
load "guilib.ring"
app=new qApp
{
63.40. How to Close a window then displaying another one? 763
Ring Documentation, Release 1.2
frmStart=new Qwidget()
{
setWindowTitle("The First Window")
resize(300,320)
move(200,200)
button=new qPushButton(frmStart)
{
setText("Show Modal Window")
resize(200,30)
setClickEvent("frmModal.show()")
}
new qPushButton(frmStart)
{
setText("Close Window")
move(0,50)
resize(200,30)
setClickEvent("frmStart.Close()")
}
show()
}
frmModal =new Qwidget()
{
setWindowTitle("Modal Window")
resize(300,320)
move(200,200)
setparent(frmStart)
setwindowmodality(true)
setwindowflags(Qt_Dialog)
}
exec()
}
Related Documents
• http://doc.qt.io/qt-5/qtwidgets-widgets-windowflags-example.html
• http://doc.qt.io/qt-5/qt.html#WindowType-enum
• http://doc.qt.io/qt-5/qwindow.html#setParent
• http://doc.qt.io/qt-5/qt.html#WindowModality-enum
63.42 How can I disable maximize button and resize window?
Use the method setWindowFlags()
Load "guilib.ring"
app1 = new qapp {
win1 = new qwidget() {
setwindowtitle("First")
setgeometry(100,100,500,500)
63.42. How can I disable maximize button and resize window? 764
Ring Documentation, Release 1.2
new qpushbutton(win1) {
setgeometry(100,100,100,30)
settext("close")
setclickevent("app1.quit()")
}
new qpushbutton(win1) {
setgeometry(250,100,100,30)
settext("Second")
setclickevent("second()")
}
showmaximized()
}
exec()
}
func second
win2 = new qwidget() {
setwindowtitle("Second")
setgeometry(100,100,500,500)
setwindowflags(Qt_dialog)
show()
}
63.43 How to use SQLite using ODBC?
In Ring 1.1 we have native support for SQLite, so you don’t need to use it through ODBC.
Also we can access SQLite through RingQt.
The answer to your question
pODBC = odbc_init()
odbc_connect(pODBC,"DRIVER=SQLite3 ODBC Driver;Database=mydb.db;LongNames=0;"+
"Timeout=1000;NoTXN=0;SyncPragma=NORMAL;StepAPI=0;")
odbc_execute(pODBC,"create table 'tel' ('ID','NAME','PHONE');")
odbc_execute(pODBC,"insert into 'tel' values ('1','Mahmoud','123456');")
odbc_execute(pODBC,"insert into 'tel' values ('2','Ahmed','123456');")
odbc_execute(pODBC,"insert into 'tel' values ('3','Ibrahim','123456');")
odbc_execute(pODBC,"select * from tel") + nl
nMax = odbc_colcount(pODBC)
See "Columns Count : " + nMax + nl
while odbc_fetch(pODBC)
See nl
for x = 1 to nMax
see odbc_getdata(pODBC,x)
if x != nMax see " - " ok
next
end
odbc_disconnect(pODBC)
odbc_close(pODBC)
Output:
Columns Count : 3
63.43. How to use SQLite using ODBC? 765
Ring Documentation, Release 1.2
1 - Mahmoud - 123456
2 - Ahmed - 123456
3 - Ibrahim - 123456
The program will create the file : mydb.db
Note : when I print the odbc drivers I see the long list that includes
SQLite3 ODBC Driver - UsageCount=1
SQLite ODBC Driver - UsageCount=1
SQLite ODBC (UTF-8) Driver - UsageCount=1
And I’m using “SQLite3 ODBC Driver”.
63.44 Can I connect to dbase/harbour database?
You can connect to any database using ODBC
To connect to xbase files (*.DBF)
See "Using DBF Files using ODBC" + nl
pODBC = odbc_init()
See "Connect to database" + nl
odbc_connect(pODBC,"Driver={Microsoft dBase Driver (*.dbf)};"+
"datasource=dBase Files;DriverID=277")
See "Select data" + nl
odbc_execute(pODBC,"select * from tel.dbf")
nMax = odbc_colcount(pODBC)
See "Columns Count : " + nMax + nl
while odbc_fetch(pODBC)
See "Row data:" + nl
for x = 1 to nMax
see odbc_getdata(pODBC,x) + " - "
next
end
See "Close database..." + nl
odbc_disconnect(pODBC)
odbc_close(pODBC)
Output
Using DBF Files using ODBC
Connect to database
Select data
Columns Count : 3
Row data:
Ahmad - Egypt - 234567 - Row data:
Fady - Egypt - 345678 - Row data:
Shady - Egypt - 456789 - Row data:
Mahmoud - Egypt - 123456 - Close database...
Also you can connect to a Visual FoxPro database (requires installing Visual FoxPro driver)
See "ODBC test 6" + nl
pODBC = odbc_init()
See "Connect to database" + nl
odbc_connect(pODBC,"Driver={Microsoft Visual FoxPro Driver};"+
"SourceType=DBC;SourceDB=C:PWCT19ssbuildPWCTDATACH1Datamydata.dbc;")
63.44. Can I connect to dbase/harbour database? 766
Ring Documentation, Release 1.2
See "Select data" + nl
see odbc_execute(pODBC,"select * from t38") + nl
nMax = odbc_colcount(pODBC)
See "Columns Count : " + nMax + nl
while odbc_fetch(pODBC)
See "Row data:" + nl
for x = 1 to nMax
see odbc_getdata(pODBC,x) + " - "
next
end
See "Close database..." + nl
odbc_disconnect(pODBC)
odbc_close(pODBC)
63.45 Why setClickEvent() doesn’t see the object methods directly?
setClickEvent(cCode) take a string contains code. The code will be executed when the event happens.
Ring support Many Programming Paradigms like Procedural, OOP, Functional and others.
But when you support many paradigms at the language level you can’t know which paradigm will be used so you have
two options
1. Provide General Solutions that works with many programming paradigms.
2. Provide Many Specific solutions where each one match a specific paradigm.
setClickEvent() and others belong to (General Solutions that works with many programming paradigms).
You just pass a string of code that will be executed without any care about classes and objects.
This code could be anything like calling a function, calling a method and setting variable value.
Some other languages force you to use OOP and call methods for events. Also some other languages uses anonymous
functions that may get parameters like the current object.
Now we have the general solution (not restricted with any paradigm), In the future we may add specific solutions that
match specific paradigms (OOP, Functional, Declarative and Natural).
63.46 Why I get Calling Function without definition Error?
Each program follow the next order
1 - Loading Files 2 - Global Variables and Statements 3 - Functions 4 - Packages, Classes and Methods
So what does that mean ?
1. **** No Functions comes After Classes ****
2. **** No command is required to end functions/methods/classes/packages ****
Look at this example
See "Hello"
test()
func test
see "message from the test function!" + nl
class test
63.45. Why setClickEvent() doesn’t see the object methods directly? 767
Ring Documentation, Release 1.2
In the previous example we have a function called test() so we can call it directly using test()
In the next example, test() will become a method
See"Hello"
test() # runtime error message
class test
func test # Test() now is a method (not a function)
see "message from the test method!" + nl
The errors comes when you define a method then try calling it directly as a function.
The previous program must be
See"Hello"
new test { test() } # now will call the method
class test
func test # Test() now is a method (not a function)
see "message from the test method!" + nl
63.47 Can Ring work on Windows XP?
Ring can work on Windows XP and load extensions without problems.
Just be sure that the extension can work on Windows XP and your compiler version support that (modern compilers
requires some flags to support XP)
Check this topic https://blogs.msdn.microsoft.com/vcblog/2012/10/08/windows-xp-targeting-with-c-in-visual-studio-
2012/
For example, We added
/link /SUBSYSTEM:CONSOLE,"5.01"
To the batch file to support Windows XP
See : https://github.com/ring-lang/ring/blob/master/src/buildvccomplete.bat
63.48 How to extend RingQt and add more classes?
You have many options
In general you can extend Ring using C or C++ code
Ring from Ring code you can call C Functions or use C++ Classes & Methods
This chapter in the documentation explains this part in the language http://ring-
lang.sourceforge.net/doc/extension.html
For example the next code in .c file can be compiled to a DLL file using the Ring library (.lib)
#include "ring.h"
RING_FUNC(ring_ringlib_dlfunc)
{
printf("Message from dlfunc");
}
63.47. Can Ring work on Windows XP? 768
Ring Documentation, Release 1.2
RING_API void ringlib_init(RingState *pRingState)
{
ring_vm_funcregister("dlfunc",ring_ringlib_dlfunc);
}
Then from Ring you can load the DLL file using LoadLib() function then call the C function that called dlfunc() as
any Ring function.
See "Dynamic DLL" + NL
LoadLib("ringlib.dll")
dlfunc()
Output
Dynamic DLL
Message from dlfunc
When you read the documentation you will know about how to get parameters like (strings, numbers, lists and objects)
And how to return a value (any type) from you function.
From experience, when we support a C library or C++ Library
We discovered that a lot of functions share a lot of code
To save our time, and to quickly generate wrappers for C/C++ Libraries to be used in Ring
We have this code generator
https://github.com/ring-lang/ring/blob/master/extensions/codegen/parsec.ring
The code generator is just a Ring program < 1200 lines of Ring code
The generator take as input a configuration file contains the C/C++ library information
like Functions Prototype, Classes and Methods, Constants, Enum, Structures and members , etc.
Then the generator will generate
*.C File for C libraries (to be able to use the library functions)
*.CPP File for C++ libraries (to be able to use C++ classes and methods)
*.Ring File (to be able to use C++ classes as Ring classes)
*.RH file (Constants)
To understand how the generator work check this extension for the Allegro game programming library
https://github.com/ring-lang/ring/tree/master/extensions/ringallegro
At first we have the configuration file
https://github.com/ring-lang/ring/blob/master/extensions/ringallegro/allegro.cf
To write this file, i just used the Allegro documentation + the Ring code generator rules
Then after executing the generator using this batch file
https://github.com/ring-lang/ring/blob/master/extensions/ringallegro/gencode.bat
or using this script
https://github.com/ring-lang/ring/blob/master/extensions/ringallegro/gencode.sh
I get the generated source code file
https://github.com/ring-lang/ring/blob/master/extensions/ringallegro/ring_allegro.c
63.48. How to extend RingQt and add more classes? 769

More Related Content

PDF
The Ring programming language version 1.2 book - Part 80 of 84
PDF
The Ring programming language version 1.2 book - Part 82 of 84
PDF
The Ring programming language version 1.2 book - Part 84 of 84
PDF
The Ring programming language version 1.2 book - Part 83 of 84
PDF
The Ring programming language version 1.10 book - Part 102 of 212
PPTX
Down to Stack Traces, up from Heap Dumps
PDF
Concurrency Concepts in Java
PDF
sizeof(Object): how much memory objects take on JVMs and when this may matter
The Ring programming language version 1.2 book - Part 80 of 84
The Ring programming language version 1.2 book - Part 82 of 84
The Ring programming language version 1.2 book - Part 84 of 84
The Ring programming language version 1.2 book - Part 83 of 84
The Ring programming language version 1.10 book - Part 102 of 212
Down to Stack Traces, up from Heap Dumps
Concurrency Concepts in Java
sizeof(Object): how much memory objects take on JVMs and when this may matter

What's hot (20)

PDF
Virtual machine and javascript engine
PDF
java sockets
PDF
The Ring programming language version 1.5.1 book - Part 12 of 180
PDF
The Ring programming language version 1.5.2 book - Part 13 of 181
PDF
The Ring programming language version 1.5.2 book - Part 10 of 181
PDF
The Ring programming language version 1.7 book - Part 93 of 196
PDF
The Ring programming language version 1.5.3 book - Part 15 of 184
PDF
The Ring programming language version 1.3 book - Part 85 of 88
PDF
Clojure for Java developers - Stockholm
PPTX
JPoint 2016 - Валеев Тагир - Странности Stream API
PDF
Java Performance Puzzlers
PDF
.NET Multithreading and File I/O
PDF
The Ring programming language version 1.3 book - Part 7 of 88
PPTX
The uniform interface is 42
PDF
The Ring programming language version 1.9 book - Part 208 of 210
PDF
PVS-Studio in 2021 - Error Examples
PPTX
How Data Flow analysis works in a static code analyzer
PDF
Wprowadzenie do technologii Big Data / Intro to Big Data Ecosystem
PDF
Wprowadzenie do technologi Big Data i Apache Hadoop
KEY
Clojure Intro
Virtual machine and javascript engine
java sockets
The Ring programming language version 1.5.1 book - Part 12 of 180
The Ring programming language version 1.5.2 book - Part 13 of 181
The Ring programming language version 1.5.2 book - Part 10 of 181
The Ring programming language version 1.7 book - Part 93 of 196
The Ring programming language version 1.5.3 book - Part 15 of 184
The Ring programming language version 1.3 book - Part 85 of 88
Clojure for Java developers - Stockholm
JPoint 2016 - Валеев Тагир - Странности Stream API
Java Performance Puzzlers
.NET Multithreading and File I/O
The Ring programming language version 1.3 book - Part 7 of 88
The uniform interface is 42
The Ring programming language version 1.9 book - Part 208 of 210
PVS-Studio in 2021 - Error Examples
How Data Flow analysis works in a static code analyzer
Wprowadzenie do technologii Big Data / Intro to Big Data Ecosystem
Wprowadzenie do technologi Big Data i Apache Hadoop
Clojure Intro

Viewers also liked (20)

PDF
Diario Resumen 20170217
PDF
Diario Resumen 20170218
DOCX
Rocky fernandes resume
PPTX
Diapo laboral
PDF
Example vocabulary exam 5.1.
PDF
План роботи школи 2016-2017
PPTX
Tema 5 - Presentación de Jorge
DOCX
Esto de aquí te lo voy a contar
PDF
Creating HTML Pages
ODP
New Amazing Things about AngularJS 2.0
PDF
The Future of Real-Time in Spark
PDF
Test Automation - Principles and Practices
PDF
Top Insights from SaaStr by Leading Enterprise Software Experts
PDF
iOS Scroll Performance
PDF
CSS Grid Layout for Topconf, Linz
PDF
Testing at Spotify
PDF
Launching a Rocketship Off Someone Else's Back
PDF
Node.js and The Internet of Things
PPT
Introduction to Go programming
PPTX
Data made out of functions
Diario Resumen 20170217
Diario Resumen 20170218
Rocky fernandes resume
Diapo laboral
Example vocabulary exam 5.1.
План роботи школи 2016-2017
Tema 5 - Presentación de Jorge
Esto de aquí te lo voy a contar
Creating HTML Pages
New Amazing Things about AngularJS 2.0
The Future of Real-Time in Spark
Test Automation - Principles and Practices
Top Insights from SaaStr by Leading Enterprise Software Experts
iOS Scroll Performance
CSS Grid Layout for Topconf, Linz
Testing at Spotify
Launching a Rocketship Off Someone Else's Back
Node.js and The Internet of Things
Introduction to Go programming
Data made out of functions

Similar to The Ring programming language version 1.2 book - Part 79 of 84 (20)

PDF
The Ring programming language version 1.9 book - Part 99 of 210
PDF
The Ring programming language version 1.3 book - Part 83 of 88
PDF
The Ring programming language version 1.5.1 book - Part 175 of 180
PDF
The Ring programming language version 1.5.2 book - Part 29 of 181
PDF
The Ring programming language version 1.6 book - Part 183 of 189
PDF
The Ring programming language version 1.4 book - Part 29 of 30
PDF
The Ring programming language version 1.4 book - Part 8 of 30
PDF
The Ring programming language version 1.5 book - Part 3 of 31
PDF
The Ring programming language version 1.10 book - Part 22 of 212
PDF
The Ring programming language version 1.7 book - Part 48 of 196
PDF
The Ring programming language version 1.5.2 book - Part 14 of 181
PDF
The Ring programming language version 1.10 book - Part 47 of 212
PDF
The Ring programming language version 1.5 book - Part 8 of 31
PDF
The Ring programming language version 1.4.1 book - Part 8 of 31
PDF
The Ring programming language version 1.8 book - Part 94 of 202
PDF
The Ring programming language version 1.2 book - Part 19 of 84
PDF
The Ring programming language version 1.10 book - Part 54 of 212
PDF
The Ring programming language version 1.5.3 book - Part 54 of 184
PDF
The Ring programming language version 1.5.3 book - Part 44 of 184
PDF
The Ring programming language version 1.6 book - Part 184 of 189
The Ring programming language version 1.9 book - Part 99 of 210
The Ring programming language version 1.3 book - Part 83 of 88
The Ring programming language version 1.5.1 book - Part 175 of 180
The Ring programming language version 1.5.2 book - Part 29 of 181
The Ring programming language version 1.6 book - Part 183 of 189
The Ring programming language version 1.4 book - Part 29 of 30
The Ring programming language version 1.4 book - Part 8 of 30
The Ring programming language version 1.5 book - Part 3 of 31
The Ring programming language version 1.10 book - Part 22 of 212
The Ring programming language version 1.7 book - Part 48 of 196
The Ring programming language version 1.5.2 book - Part 14 of 181
The Ring programming language version 1.10 book - Part 47 of 212
The Ring programming language version 1.5 book - Part 8 of 31
The Ring programming language version 1.4.1 book - Part 8 of 31
The Ring programming language version 1.8 book - Part 94 of 202
The Ring programming language version 1.2 book - Part 19 of 84
The Ring programming language version 1.10 book - Part 54 of 212
The Ring programming language version 1.5.3 book - Part 54 of 184
The Ring programming language version 1.5.3 book - Part 44 of 184
The Ring programming language version 1.6 book - Part 184 of 189

More from Mahmoud Samir Fayed (20)

PDF
The Ring programming language version 1.10 book - Part 212 of 212
PDF
The Ring programming language version 1.10 book - Part 211 of 212
PDF
The Ring programming language version 1.10 book - Part 210 of 212
PDF
The Ring programming language version 1.10 book - Part 208 of 212
PDF
The Ring programming language version 1.10 book - Part 207 of 212
PDF
The Ring programming language version 1.10 book - Part 205 of 212
PDF
The Ring programming language version 1.10 book - Part 206 of 212
PDF
The Ring programming language version 1.10 book - Part 204 of 212
PDF
The Ring programming language version 1.10 book - Part 203 of 212
PDF
The Ring programming language version 1.10 book - Part 202 of 212
PDF
The Ring programming language version 1.10 book - Part 201 of 212
PDF
The Ring programming language version 1.10 book - Part 200 of 212
PDF
The Ring programming language version 1.10 book - Part 199 of 212
PDF
The Ring programming language version 1.10 book - Part 198 of 212
PDF
The Ring programming language version 1.10 book - Part 197 of 212
PDF
The Ring programming language version 1.10 book - Part 196 of 212
PDF
The Ring programming language version 1.10 book - Part 195 of 212
PDF
The Ring programming language version 1.10 book - Part 194 of 212
PDF
The Ring programming language version 1.10 book - Part 193 of 212
PDF
The Ring programming language version 1.10 book - Part 192 of 212
The Ring programming language version 1.10 book - Part 212 of 212
The Ring programming language version 1.10 book - Part 211 of 212
The Ring programming language version 1.10 book - Part 210 of 212
The Ring programming language version 1.10 book - Part 208 of 212
The Ring programming language version 1.10 book - Part 207 of 212
The Ring programming language version 1.10 book - Part 205 of 212
The Ring programming language version 1.10 book - Part 206 of 212
The Ring programming language version 1.10 book - Part 204 of 212
The Ring programming language version 1.10 book - Part 203 of 212
The Ring programming language version 1.10 book - Part 202 of 212
The Ring programming language version 1.10 book - Part 201 of 212
The Ring programming language version 1.10 book - Part 200 of 212
The Ring programming language version 1.10 book - Part 199 of 212
The Ring programming language version 1.10 book - Part 198 of 212
The Ring programming language version 1.10 book - Part 197 of 212
The Ring programming language version 1.10 book - Part 196 of 212
The Ring programming language version 1.10 book - Part 195 of 212
The Ring programming language version 1.10 book - Part 194 of 212
The Ring programming language version 1.10 book - Part 193 of 212
The Ring programming language version 1.10 book - Part 192 of 212

Recently uploaded (20)

PDF
How to Set Realistic Project Milestones and Deadlines
PDF
C language slides for c programming book by ANSI
PDF
Streamlining Project Management in Microsoft Project, Planner, and Teams with...
PPTX
Independent Consultants’ Biggest Challenges in ERP Projects – and How Apagen ...
PDF
Module 1 - Introduction to Generative AI.pdf
PDF
OpenTimelineIO Virtual Town Hall - August 2025
PDF
MaterialX Virtual Town Hall - August 2025
PPTX
Empowering Asian Contributions: The Rise of Regional User Groups in Open Sour...
PPTX
FLIGHT TICKET API | API INTEGRATION PLATFORM
PDF
solman-7.0-ehp1-sp21-incident-management
PPTX
ESDS_SAP Application Cloud Offerings.pptx
PPTX
SAP Business AI_L1 Overview_EXTERNAL.pptx
PDF
Enscape 3D Crack + With 2025 Activation Key free
PDF
IObit Driver Booster Pro Crack Latest Version Download
PDF
Mobile App for Guard Tour and Reporting.pdf
PDF
How to Write Automated Test Scripts Using Selenium.pdf
PDF
Difference Between Website and Web Application.pdf
PDF
SBOM Document Quality Guide - OpenChain SBOM Study Group
PDF
DOWNLOAD—IOBit Uninstaller Pro Crack Download Free
PDF
IDM Crack Activation Key 2025 Free Download
How to Set Realistic Project Milestones and Deadlines
C language slides for c programming book by ANSI
Streamlining Project Management in Microsoft Project, Planner, and Teams with...
Independent Consultants’ Biggest Challenges in ERP Projects – and How Apagen ...
Module 1 - Introduction to Generative AI.pdf
OpenTimelineIO Virtual Town Hall - August 2025
MaterialX Virtual Town Hall - August 2025
Empowering Asian Contributions: The Rise of Regional User Groups in Open Sour...
FLIGHT TICKET API | API INTEGRATION PLATFORM
solman-7.0-ehp1-sp21-incident-management
ESDS_SAP Application Cloud Offerings.pptx
SAP Business AI_L1 Overview_EXTERNAL.pptx
Enscape 3D Crack + With 2025 Activation Key free
IObit Driver Booster Pro Crack Latest Version Download
Mobile App for Guard Tour and Reporting.pdf
How to Write Automated Test Scripts Using Selenium.pdf
Difference Between Website and Web Application.pdf
SBOM Document Quality Guide - OpenChain SBOM Study Group
DOWNLOAD—IOBit Uninstaller Pro Crack Download Free
IDM Crack Activation Key 2025 Free Download

The Ring programming language version 1.2 book - Part 79 of 84

  • 1. Ring Documentation, Release 1.2 Sorry, We can't use x! Now we will talk about NULL and ISNULL() Since we get error message when we deal with uninitialized variables We can check these errors using Try/Catch/Done, So we uses NULL and ISNULL() for dealing with Strings. NULL is a variable contains an empty string ISNULL() is a function that returns true (1) if the input is an empty string or just a string contains “NULL” This because we need to test these values (empty strings) and strings contains “NULL” that sometimes come from external resource like DBMS. Example See IsNull(5) + nl + # print 0 IsNull("hello") + nl + # print 0 IsNull([1,3,5]) + nl + # print 0 IsNull("") + nl + # print 1 IsNull("NULL") # print 1 63.34 How to print lists that contains objects? In this example we will see how we can print a list contains objects. aList = [[1,2,3] , new point(1,2,3), new point(1,2,3)] see "print the list" + nl see alist see "print the item (object)" + nl see alist[2] class point x y z func init p1,p2,p3 x=p1 y=p2 z=p3 Output print the list 1 2 3 x: 1.000000 y: 2.000000 z: 3.000000 x: 1.000000 y: 2.000000 z: 3.000000 print the item (object) x: 1.000000 y: 2.000000 z: 3.000000 63.35 How to insert an item to the first position in the list? To insert an item we can use the insert(aList,nIndex,Value) function. 63.34. How to print lists that contains objects? 760
  • 2. Ring Documentation, Release 1.2 aList = 1:5 insert(aList,0,0) See aList # print numbers from 0 to 5 63.36 How to print new lines and other characters? To print new line we can use the nl variable. See "Hello" + nl or we can use multi-line literal as in the next example See "Hello " if we want to print other characters we can use the char(nASCII) function See char(109) + nl + # print m char(77) # print M 63.37 Why we don’t use () after the qApp class name? When we use RingQt to create GUI application, we uses () after the class name when we create new objects for example. new qWidget() { setWindowTitle("Hello World") resize(400,400) show() } but before doing that we create an object from the qApp class and we don’t use () after that Load "guilib.ring" app = new qApp { win=new qWidget() { setwindowtitle(:test) show() } exec() } Using () after the class name means calling the init() method in the class and passing parameters to this method. If we used () while no init() method in the class we get the expected error message. The class qApp don’t have this method while the other classes have it because they need it to create an object using a function that return a pointer to that object and this pointer will be stored in an attribute called pObject, for more information see ring_qt.ring file which contains the classes. 63.38 Why the window title bar is going outside the screen? When we write the next code 63.36. How to print new lines and other characters? 761
  • 3. Ring Documentation, Release 1.2 Load "guilib.ring" app = new qApp { win=new qWidget() { setwindowtitle(:test) setGeometry(0,0,200,200) show() } exec() } I would expect that the window will run at the point (0,0) with (200,200) size but the actual result is that the window title bar is going outside the screen. This is related to the behavior of Qt framework. The next code will avoid the problem load "guilib.ring" new qApp { new qWidget() { move(0,0) resize(200,200) show() } exec() } 63.39 How to create an array of buttons in GUI applications? Check the next example: Load "guilib.ring" App1 = new qApp { win1 = new qWidget() { move(0,0) resize(500,500) new qPushButton(win1) { settext("OK") setclickevent("click()") } btn1 = new qPushButton(win1) { setgeometry(100,100,100,30) settext("Button1") } btn2 = new qPushButton(win1) { setgeometry(200,100,100,30) settext("Button2") } 63.39. How to create an array of buttons in GUI applications? 762
  • 4. Ring Documentation, Release 1.2 button = [btn1, btn2] show() } exec() } func click button[1] { settext ("Button3") } button[2] { settext ("Button4") } 63.40 How to Close a window then displaying another one? This example demonstrates how to close a window and show another one Load "guilib.ring" app=new qApp { frmBefore=new Qwidget() { setWindowTitle("before!") resize(300,320) move(200,200) button=new qPushButton(frmBefore) { setText("Close") setClickEvent("frmBefore.close() frmMain.show()") } show() } frmMain=new Qwidget() { setWindowTitle("After!") resize(300,320) move(200,200) } exec() } 63.41 How to create a Modal Window? This example demonstrates how to create a modal window load "guilib.ring" app=new qApp { 63.40. How to Close a window then displaying another one? 763
  • 5. Ring Documentation, Release 1.2 frmStart=new Qwidget() { setWindowTitle("The First Window") resize(300,320) move(200,200) button=new qPushButton(frmStart) { setText("Show Modal Window") resize(200,30) setClickEvent("frmModal.show()") } new qPushButton(frmStart) { setText("Close Window") move(0,50) resize(200,30) setClickEvent("frmStart.Close()") } show() } frmModal =new Qwidget() { setWindowTitle("Modal Window") resize(300,320) move(200,200) setparent(frmStart) setwindowmodality(true) setwindowflags(Qt_Dialog) } exec() } Related Documents • http://doc.qt.io/qt-5/qtwidgets-widgets-windowflags-example.html • http://doc.qt.io/qt-5/qt.html#WindowType-enum • http://doc.qt.io/qt-5/qwindow.html#setParent • http://doc.qt.io/qt-5/qt.html#WindowModality-enum 63.42 How can I disable maximize button and resize window? Use the method setWindowFlags() Load "guilib.ring" app1 = new qapp { win1 = new qwidget() { setwindowtitle("First") setgeometry(100,100,500,500) 63.42. How can I disable maximize button and resize window? 764
  • 6. Ring Documentation, Release 1.2 new qpushbutton(win1) { setgeometry(100,100,100,30) settext("close") setclickevent("app1.quit()") } new qpushbutton(win1) { setgeometry(250,100,100,30) settext("Second") setclickevent("second()") } showmaximized() } exec() } func second win2 = new qwidget() { setwindowtitle("Second") setgeometry(100,100,500,500) setwindowflags(Qt_dialog) show() } 63.43 How to use SQLite using ODBC? In Ring 1.1 we have native support for SQLite, so you don’t need to use it through ODBC. Also we can access SQLite through RingQt. The answer to your question pODBC = odbc_init() odbc_connect(pODBC,"DRIVER=SQLite3 ODBC Driver;Database=mydb.db;LongNames=0;"+ "Timeout=1000;NoTXN=0;SyncPragma=NORMAL;StepAPI=0;") odbc_execute(pODBC,"create table 'tel' ('ID','NAME','PHONE');") odbc_execute(pODBC,"insert into 'tel' values ('1','Mahmoud','123456');") odbc_execute(pODBC,"insert into 'tel' values ('2','Ahmed','123456');") odbc_execute(pODBC,"insert into 'tel' values ('3','Ibrahim','123456');") odbc_execute(pODBC,"select * from tel") + nl nMax = odbc_colcount(pODBC) See "Columns Count : " + nMax + nl while odbc_fetch(pODBC) See nl for x = 1 to nMax see odbc_getdata(pODBC,x) if x != nMax see " - " ok next end odbc_disconnect(pODBC) odbc_close(pODBC) Output: Columns Count : 3 63.43. How to use SQLite using ODBC? 765
  • 7. Ring Documentation, Release 1.2 1 - Mahmoud - 123456 2 - Ahmed - 123456 3 - Ibrahim - 123456 The program will create the file : mydb.db Note : when I print the odbc drivers I see the long list that includes SQLite3 ODBC Driver - UsageCount=1 SQLite ODBC Driver - UsageCount=1 SQLite ODBC (UTF-8) Driver - UsageCount=1 And I’m using “SQLite3 ODBC Driver”. 63.44 Can I connect to dbase/harbour database? You can connect to any database using ODBC To connect to xbase files (*.DBF) See "Using DBF Files using ODBC" + nl pODBC = odbc_init() See "Connect to database" + nl odbc_connect(pODBC,"Driver={Microsoft dBase Driver (*.dbf)};"+ "datasource=dBase Files;DriverID=277") See "Select data" + nl odbc_execute(pODBC,"select * from tel.dbf") nMax = odbc_colcount(pODBC) See "Columns Count : " + nMax + nl while odbc_fetch(pODBC) See "Row data:" + nl for x = 1 to nMax see odbc_getdata(pODBC,x) + " - " next end See "Close database..." + nl odbc_disconnect(pODBC) odbc_close(pODBC) Output Using DBF Files using ODBC Connect to database Select data Columns Count : 3 Row data: Ahmad - Egypt - 234567 - Row data: Fady - Egypt - 345678 - Row data: Shady - Egypt - 456789 - Row data: Mahmoud - Egypt - 123456 - Close database... Also you can connect to a Visual FoxPro database (requires installing Visual FoxPro driver) See "ODBC test 6" + nl pODBC = odbc_init() See "Connect to database" + nl odbc_connect(pODBC,"Driver={Microsoft Visual FoxPro Driver};"+ "SourceType=DBC;SourceDB=C:PWCT19ssbuildPWCTDATACH1Datamydata.dbc;") 63.44. Can I connect to dbase/harbour database? 766
  • 8. Ring Documentation, Release 1.2 See "Select data" + nl see odbc_execute(pODBC,"select * from t38") + nl nMax = odbc_colcount(pODBC) See "Columns Count : " + nMax + nl while odbc_fetch(pODBC) See "Row data:" + nl for x = 1 to nMax see odbc_getdata(pODBC,x) + " - " next end See "Close database..." + nl odbc_disconnect(pODBC) odbc_close(pODBC) 63.45 Why setClickEvent() doesn’t see the object methods directly? setClickEvent(cCode) take a string contains code. The code will be executed when the event happens. Ring support Many Programming Paradigms like Procedural, OOP, Functional and others. But when you support many paradigms at the language level you can’t know which paradigm will be used so you have two options 1. Provide General Solutions that works with many programming paradigms. 2. Provide Many Specific solutions where each one match a specific paradigm. setClickEvent() and others belong to (General Solutions that works with many programming paradigms). You just pass a string of code that will be executed without any care about classes and objects. This code could be anything like calling a function, calling a method and setting variable value. Some other languages force you to use OOP and call methods for events. Also some other languages uses anonymous functions that may get parameters like the current object. Now we have the general solution (not restricted with any paradigm), In the future we may add specific solutions that match specific paradigms (OOP, Functional, Declarative and Natural). 63.46 Why I get Calling Function without definition Error? Each program follow the next order 1 - Loading Files 2 - Global Variables and Statements 3 - Functions 4 - Packages, Classes and Methods So what does that mean ? 1. **** No Functions comes After Classes **** 2. **** No command is required to end functions/methods/classes/packages **** Look at this example See "Hello" test() func test see "message from the test function!" + nl class test 63.45. Why setClickEvent() doesn’t see the object methods directly? 767
  • 9. Ring Documentation, Release 1.2 In the previous example we have a function called test() so we can call it directly using test() In the next example, test() will become a method See"Hello" test() # runtime error message class test func test # Test() now is a method (not a function) see "message from the test method!" + nl The errors comes when you define a method then try calling it directly as a function. The previous program must be See"Hello" new test { test() } # now will call the method class test func test # Test() now is a method (not a function) see "message from the test method!" + nl 63.47 Can Ring work on Windows XP? Ring can work on Windows XP and load extensions without problems. Just be sure that the extension can work on Windows XP and your compiler version support that (modern compilers requires some flags to support XP) Check this topic https://blogs.msdn.microsoft.com/vcblog/2012/10/08/windows-xp-targeting-with-c-in-visual-studio- 2012/ For example, We added /link /SUBSYSTEM:CONSOLE,"5.01" To the batch file to support Windows XP See : https://github.com/ring-lang/ring/blob/master/src/buildvccomplete.bat 63.48 How to extend RingQt and add more classes? You have many options In general you can extend Ring using C or C++ code Ring from Ring code you can call C Functions or use C++ Classes & Methods This chapter in the documentation explains this part in the language http://ring- lang.sourceforge.net/doc/extension.html For example the next code in .c file can be compiled to a DLL file using the Ring library (.lib) #include "ring.h" RING_FUNC(ring_ringlib_dlfunc) { printf("Message from dlfunc"); } 63.47. Can Ring work on Windows XP? 768
  • 10. Ring Documentation, Release 1.2 RING_API void ringlib_init(RingState *pRingState) { ring_vm_funcregister("dlfunc",ring_ringlib_dlfunc); } Then from Ring you can load the DLL file using LoadLib() function then call the C function that called dlfunc() as any Ring function. See "Dynamic DLL" + NL LoadLib("ringlib.dll") dlfunc() Output Dynamic DLL Message from dlfunc When you read the documentation you will know about how to get parameters like (strings, numbers, lists and objects) And how to return a value (any type) from you function. From experience, when we support a C library or C++ Library We discovered that a lot of functions share a lot of code To save our time, and to quickly generate wrappers for C/C++ Libraries to be used in Ring We have this code generator https://github.com/ring-lang/ring/blob/master/extensions/codegen/parsec.ring The code generator is just a Ring program < 1200 lines of Ring code The generator take as input a configuration file contains the C/C++ library information like Functions Prototype, Classes and Methods, Constants, Enum, Structures and members , etc. Then the generator will generate *.C File for C libraries (to be able to use the library functions) *.CPP File for C++ libraries (to be able to use C++ classes and methods) *.Ring File (to be able to use C++ classes as Ring classes) *.RH file (Constants) To understand how the generator work check this extension for the Allegro game programming library https://github.com/ring-lang/ring/tree/master/extensions/ringallegro At first we have the configuration file https://github.com/ring-lang/ring/blob/master/extensions/ringallegro/allegro.cf To write this file, i just used the Allegro documentation + the Ring code generator rules Then after executing the generator using this batch file https://github.com/ring-lang/ring/blob/master/extensions/ringallegro/gencode.bat or using this script https://github.com/ring-lang/ring/blob/master/extensions/ringallegro/gencode.sh I get the generated source code file https://github.com/ring-lang/ring/blob/master/extensions/ringallegro/ring_allegro.c 63.48. How to extend RingQt and add more classes? 769