Discussion:
tags
(too old to reply)
Jean-Yves F. Barbier
2009-11-14 01:41:57 UTC
Permalink
Hi,

Is it possible to recover any kind of widget's value only from
its tag (as far as tags are all numerics 0,1,2...) from into a loop?
--
Debian Hint #6: There is no hint #6. Submit a hint today !
Doriano Blengino
2009-11-14 07:27:22 UTC
Permalink
Post by Jean-Yves F. Barbier
Hi,
Is it possible to recover any kind of widget's value only from
its tag (as far as tags are all numerics 0,1,2...) from into a loop?
I am not sure about what you want... anyway...

It seems to me that the TAG property is a variant, so you can assign any
kind of value to it (at least in code); using the GUI designer seems to
let you only use strings.

When you later access the TAG property, its value will retain the type
of data you assigned to it. For example, I just tried this:

PUBLIC SUB Form_Open()
TextArea1.Tag = listview1
TextBox1.Text = TextArea1.Tag.name
TextBox1.Text = TextArea1.Tag
END

The first line shows that you can assign an arbitrary object to the TAG
field.
The second line shows that you can read what is stored in TAG; having
you stored a ListView, then you can read its Name property, The text of
TextBox1 now gets assigned to the string "Listview1".
The third line fires an error, but only at runtime; during compilation
gambas can not know what the content of Textarea1.Tag is, so it can not
decide if this content is compatible to a string (to be stored in
TextBox1.text). At runtime, instead, gambas reads the content of
TextArea1.tag and it finds it is an object: the object ListView1; now,
it can not assign an object to a string, so it rises an errore (expected
string, got ListView instead...).

About "recover any kind [...] from into a loop", I don't understand.
Perhaps you want to scan all the controls residing on a form - there is
the Controls[] property for that. Or you want to stream out all the
properties of an object, perhaps to a file? This is possible too, I
think - look at the Object class (or the Class class, can't remember),
which has method to inspect... objects.

Regards,
--
Doriano Blengino

"Listen twice before you speak.
This is why we have two ears, but only one mouth."
Jean-Yves F. Barbier
2009-11-14 15:22:39 UTC
Permalink
Doriano Blengino a écrit :
....
Post by Doriano Blengino
About "recover any kind [...] from into a loop", I don't understand.
Perhaps you want to scan all the controls residing on a form - there is
the Controls[] property for that. Or you want to stream out all the
Yes you got it Doriano! :D
Post by Doriano Blengino
properties of an object, perhaps to a file? This is possible too, I
think - look at the Object class (or the Class class, can't remember),
which has method to inspect... objects.
Thanks
--
You will gain money by a fattening action.
Doriano Blengino
2009-11-14 16:15:37 UTC
Permalink
....=20
=20
About "recover any kind [...] from into a loop", I don't understand.=20
Perhaps you want to scan all the controls residing on a form - there i=
s=20
the Controls[] property for that. Or you want to stream out all the=20
=20
=20
I am suspecting you are transferring data from and to a database...=20
don't know why I suspect...

May be the following routines can act as a base, if this is your duty.

The first one, load_record(), takes a container and a Result as=20
parameters, and fills every control in the container with the=20
corresponding data from the current record of Result. In the container,=20
relevant controls must be named "edDBxxxx", where "xxxx" is the name of=20
the field from database; other controls are ignored.

For every kind of control different code is used, so you can use=20
specialized controls, as I did with TDbCalcBox, which is a special=20
control of mines.


' transfers a record from a result to a page; TRUE if error
PUBLIC SUB load_record(hCont AS Container, res AS Result) AS Boolean
DIM obj AS Object

FOR EACH obj IN hCont.Children
IF obj.name LIKE "edDB*" THEN
SELECT Lower(object.Type(obj))
CASE "textbox", "tdbsimplebox"
TRY obj.text =3D res[Mid(obj.name, 5)]

CASE "tdbcalcbox"
obj.text =3D "0"
TRY obj.text =3D utils.formatdecimal(res[Mid(obj.name, 5)],
"#,0", obj.decimals)
=20
CASE "tdbdatebox"
IF dateformat =3D "" THEN calculate_dateseparator
obj.text =3D ""
' TRY obj.text =3D Format(res[Mid(obj.name, 5)], dateformat)
TRY obj.text =3D canonicaldate(Format(res[Mid(obj.name, 5)],
gb.GeneralDate))

CASE "checkbox"
obj.value =3D FALSE
IF res[Mid(obj.name, 5)] THEN obj.value =3D TRUE

CASE "label"
obj.text =3D "?"
TRY obj.text =3D res[Mid(obj.name, 5)]

END SELECT
ENDIF
NEXT
RETURN FALSE

CATCH
Message.Error("Errore " & error.Text & " in " & error.Where)
RETURN TRUE
END

This is the counterpart of the previous, to write a record out to a=20
database.


' transfers a record from page to database; TRUE if error
PUBLIC SUB save_record(hCont AS Container, recmod AS Result) AS Boole=
an
DIM obj AS Object
DIM st AS String

FOR EACH obj IN hCont.Children
IF obj.name LIKE "edDB*" THEN
SELECT Lower(object.Type(obj))
CASE "textbox", "tdbsimplebox"
recmod[Mid(obj.name, 5)] =3D obj.text

CASE "tdbcalcbox"
recmod[Mid(obj.name, 5)] =3D utils.formatted2float(obj.text)

CASE "tdbdatebox"
st =3D canonicaldate(obj.text)
IF st <> "" THEN recmod[Mid(obj.name, 5)] =3D Val(st)
=20
CASE "checkbox"
recmod[Mid(obj.name, 5)] =3D obj.value

END SELECT
ENDIF
NEXT
recmod.Update
RETURN FALSE

CATCH
Message.Error("Errore " & error.Text & " in " & error.Where)
RETURN TRUE
END

This last one fills a grid, displaying a Result in tabular form.

' prepare and fill a grid with data from a result
' columns are defined as "dbfield/title!width"
' dbfield is the field name in recordset
' title is the column title; if absent, same as dbfield
' width is the column width. If absent, equally spaced columns are us=
ed
' example: "id/Unique code!120
' columns are modified only if col[0].text is empty
PUBLIC SUB fill_rec_grid(gvDB AS GridView, Columns AS String, res AS
result)
DIM i, k, width AS Integer
DIM fields AS String[]
DIM st, title AS String
DIM managecols AS Boolean

managecols =3D TRUE
IF gvdb.Columns.Count THEN managecols =3D gvdb.Columns[0].Text =3D =
""

fields =3D Split(columns, ",", "", FALSE)
gvDB.Columns.Count =3D fields.Count

FOR i =3D 0 TO fields.count - 1
st =3D fields[i]
k =3D InStr(st, "!")
width =3D gvdb.Width \ fields.Count ' default
IF k THEN
width =3D Val(Mid(st, k + 1))
st =3D Left(st, k - 1)
ENDIF
IF managecols THEN gvdb.Columns[i].Width =3D width
k =3D InStr(st, "/")
IF k THEN
title =3D Mid(st, k + 1)
st =3D Left(st, k - 1)
ELSE
title =3D st
ENDIF
IF managecols THEN
gvdb.Columns[i].text =3D title
title =3D Upper(Left(title, 1)) & Mid(title, 2)
ENDIF
fields[i] =3D st
NEXT
gvDB.Rows.Count =3D res.Count

FOR i =3D 0 TO res.Count - 1
res.MoveTo(i)
FOR k =3D 0 TO fields.Count - 1
title =3D fields[k]
TRY st =3D res[title]
IF NOT ERROR THEN
width =3D res.Fields[title].Type
' find correct formatting
SELECT width
CASE 8
' date field
st =3D Format(res[title], gb.GeneralDate)
gvDB[i, k].Text =3D " " & st

CASE 7
' float - align right
st =3D " " & res[title]
WHILE gvdb.font.Width(st) + 8 < gvdb.Columns[k].Width
st =3D " " & st
WEND
gvDB[i, k].Text =3D Mid(st, 2)

DEFAULT
' normal field
' do NOT format! Sometimes text is used as database key
TRY gvDB[i, k].Text =3D res[title]
END SELECT
ENDIF
NEXT
NEXT
END

If this is not what you needed, simply ignore it - but may be you can=20
see something useful.

Regards,

--=20
Doriano Blengino

"Listen twice before you speak.
This is why we have two ears, but only one mouth."
Fabien Bodard
2009-11-14 16:19:38 UTC
Permalink
the same but with a collection to share the result
Post by Doriano Blengino
....
Post by Doriano Blengino
About "recover any kind [...] from into a loop", I don't understand.
Perhaps you want to scan all the controls residing on a form - there is
the Controls[] property for that. Or you want to stream out all the
I am suspecting you are transferring data from and to a database...
don't know why  I suspect...
May be the following routines can act as a base, if this is your duty.
The first one, load_record(), takes a container and a Result as
parameters, and fills every control in the container with the
corresponding data from the current record of Result. In the container,
relevant controls must be named "edDBxxxx", where "xxxx" is the name of
the field from database; other controls are ignored.
For every kind of control different code is used, so you can use
specialized controls, as I did with TDbCalcBox, which is a special
control of mines.
   ' transfers a record from a result to a page; TRUE if error
   PUBLIC SUB load_record(hCont AS Container, res AS Result) AS Boolean
     DIM obj AS Object
     FOR EACH obj IN hCont.Children
       IF obj.name LIKE "edDB*" THEN
         SELECT Lower(object.Type(obj))
           CASE "textbox", "tdbsimplebox"
           TRY obj.text = res[Mid(obj.name, 5)]
           CASE "tdbcalcbox"
           obj.text = "0"
           TRY obj.text = utils.formatdecimal(res[Mid(obj.name, 5)],
   "#,0", obj.decimals)
           CASE "tdbdatebox"
           IF dateformat = "" THEN calculate_dateseparator
           obj.text = ""
           ' TRY obj.text = Format(res[Mid(obj.name, 5)], dateformat)
           TRY obj.text = canonicaldate(Format(res[Mid(obj.name, 5)],
   gb.GeneralDate))
           CASE "checkbox"
           obj.value = FALSE
           IF res[Mid(obj.name, 5)] THEN obj.value = TRUE
           CASE "label"
           obj.text = "?"
           TRY obj.text = res[Mid(obj.name, 5)]
         END SELECT
       ENDIF
     NEXT
     RETURN FALSE
     CATCH
     Message.Error("Errore " & error.Text & " in " & error.Where)
     RETURN TRUE
   END
This is the counterpart of the previous, to write a record out to a
database.
   ' transfers a record from page to database; TRUE if error
   PUBLIC SUB save_record(hCont AS Container, recmod AS Result) AS Boolean
     DIM obj AS Object
     DIM st AS String
     FOR EACH obj IN hCont.Children
       IF obj.name LIKE "edDB*" THEN
         SELECT Lower(object.Type(obj))
           CASE "textbox", "tdbsimplebox"
           recmod[Mid(obj.name, 5)] = obj.text
           CASE "tdbcalcbox"
           recmod[Mid(obj.name, 5)] = utils.formatted2float(obj.text)
           CASE "tdbdatebox"
           st = canonicaldate(obj.text)
           IF st <> "" THEN recmod[Mid(obj.name, 5)] = Val(st)
           CASE "checkbox"
           recmod[Mid(obj.name, 5)] = obj.value
         END SELECT
       ENDIF
     NEXT
     recmod.Update
     RETURN FALSE
     CATCH
     Message.Error("Errore " & error.Text & " in " & error.Where)
     RETURN TRUE
   END
This last one fills a grid, displaying a Result in tabular form.
   ' prepare and fill a grid with data from a result
   ' columns are defined as "dbfield/title!width"
   ' dbfield is the field name in recordset
   ' title is the column title; if absent, same as dbfield
   ' width is the column width. If absent, equally spaced columns are used
   ' example: "id/Unique code!120
   ' columns are modified only if col[0].text is empty
   PUBLIC SUB fill_rec_grid(gvDB AS GridView, Columns AS String, res AS
   result)
     DIM i, k, width AS Integer
     DIM fields AS String[]
     DIM st, title AS String
     DIM managecols AS Boolean
     managecols = TRUE
     IF gvdb.Columns.Count THEN managecols = gvdb.Columns[0].Text = ""
     fields = Split(columns, ",", "", FALSE)
     gvDB.Columns.Count = fields.Count
     FOR i = 0 TO fields.count - 1
       st = fields[i]
       k = InStr(st, "!")
       width = gvdb.Width \ fields.Count   ' default
       IF k THEN
         width = Val(Mid(st, k + 1))
         st = Left(st, k - 1)
       ENDIF
       IF managecols THEN gvdb.Columns[i].Width = width
       k = InStr(st, "/")
       IF k THEN
         title = Mid(st, k + 1)
         st = Left(st, k - 1)
       ELSE
         title = st
       ENDIF
       IF managecols THEN
         gvdb.Columns[i].text = title
         title = Upper(Left(title, 1)) & Mid(title, 2)
       ENDIF
       fields[i] = st
     NEXT
     gvDB.Rows.Count = res.Count
     FOR i = 0 TO res.Count - 1
       res.MoveTo(i)
       FOR k = 0 TO fields.Count - 1
         title = fields[k]
         TRY st = res[title]
         IF NOT ERROR THEN
           width = res.Fields[title].Type
           ' find correct formatting
           SELECT width
             CASE 8
               ' date field
               st = Format(res[title], gb.GeneralDate)
               gvDB[i, k].Text = " " & st
             CASE 7
               ' float - align right
               st = " " & res[title]
               WHILE gvdb.font.Width(st) + 8 < gvdb.Columns[k].Width
                 st = " " & st
               WEND
               gvDB[i, k].Text = Mid(st, 2)
             DEFAULT
               ' normal field
               ' do NOT format! Sometimes text is used as database key
               TRY gvDB[i, k].Text = res[title]
           END SELECT
         ENDIF
       NEXT
     NEXT
   END
If this is not what you needed, simply ignore it - but may be you can
see something useful.
Regards,
--
Doriano Blengino
"Listen twice before you speak.
This is why we have two ears, but only one mouth."
------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day
trial. Simplify your report design, integration and deployment - and focus on
what you do best, core application coding. Discover what's new with
Crystal Reports now.  http://p.sf.net/sfu/bobj-july
_______________________________________________
Gambas-user mailing list
https://lists.sourceforge.net/lists/listinfo/gambas-user
Jean-Yves F. Barbier
2009-11-14 16:31:05 UTC
Permalink
Post by Fabien Bodard
the same but with a collection to share the result
yes that is my (new) question
Post by Fabien Bodard
Post by Doriano Blengino
....
Post by Doriano Blengino
About "recover any kind [...] from into a loop", I don't understand.
Perhaps you want to scan all the controls residing on a form - there is
the Controls[] property for that. Or you want to stream out all the
I am suspecting you are transferring data from and to a database...
don't know why I suspect...
you're right :)


under python, I used a very usefull class: storage; it gives some'
like that:
jytest1g = Storage(view="jytest1g", ovldim=(900,400), fld=[])
jytest1g.fld.append(Storage(type='ST', name='name', lenmax=65, lensup=1, nn=True))
jytest1g.fld.append(Storage(type='ST', name='note', lenmax=128, lensup=1, nn=True))

I wanna make the same thing to recover DB user's rights (per schemas, tables
and per fields), but I don't see how to make it under gambas
--
Q: What do you do if an Irishman throws a pin at you?
A: Run like hell, he's got a grenade in his mouth!!
Jean-Yves F. Barbier
2009-11-14 16:35:09 UTC
Permalink
Post by Fabien Bodard
the same but with a collection to share the result
o = Storage(a=1)
o.a
1
Post by Fabien Bodard
o['a']
1
Post by Fabien Bodard
o.a = 2
o['a']
2
Post by Fabien Bodard
del o.a
o.a
None
--
Sensible and responsible women do not want to vote.
-- Grover Cleveland, 1905
Doriano Blengino
2009-11-14 19:25:38 UTC
Permalink
=20
Post by Fabien Bodard
the same but with a collection to share the result
=20
=09
Post by Fabien Bodard
o =3D Storage(a=3D1)
o.a
1
Post by Fabien Bodard
o['a']
1
Post by Fabien Bodard
o.a =3D 2
o['a']
2
Post by Fabien Bodard
del o.a
o.a
None
=20
You can do the same in gambas, using Object[] or Collection, and=20
creating a class for every kind of record.
Unfortunately I don't know them enough to explain to you. But I can=20
spend two words about python and ruby, and in general these "agile"=20
languages. They are very handy, but also two problems arise. The first=20
is that, in your example, if you write "o.a", where "o" and "a" are two=20
identifiers (because they are not surrounded by apices or quotes), they=20
don't resolve to two fixed address in memory - so they are no more=20
identifiers. This wastes a lot of CPU cycles, because the interpreter=20
must scan all pool of objects to find them. In other words, python is=20
*slow*. Good to explain concepts, but in practical, heavy applications=20
it is a pain. We can compare two programming IDEs: gambas and some other=20
written in python (Boa? or others I can't remember...). On my machine,=20
they simply suck - when gambas is quick and responsive. And think that=20
an IDE is not a particulary heavy application.

The second problem is that, I think, they don't check enough at compile=20
time (because they can't). For me, coming from pascal, this is a big=20
issue. Most of the time the compiler (pascal, or C) catches all my=20
typing errors, and the rest is ok. But if the compiler does not catch=20
errors, you are never sure that your code is ok. I am already critic=20
with some constructs that gambas does not check enough (for me) - so I=20
really can't stand with less rigid languages.

Just a simple opinion. I think that if you investigate well your needs,=20
you will find a clean and effective way to solve with gambas.

Regards,

--=20
Doriano Blengino

"Listen twice before you speak.
This is why we have two ears, but only one mouth."
Jean-Yves F. Barbier
2009-11-14 19:42:04 UTC
Permalink
Doriano Blengino a écrit :
...
Post by Doriano Blengino
You can do the same in gambas, using Object[] or Collection, and
creating a class for every kind of record.
I found coll["key"]=value and I think that could do the trick,
I'm gonna test this tonite
Post by Doriano Blengino
Unfortunately I don't know them enough to explain to you. But I can
spend two words about python and ruby, and in general these "agile"
languages. They are very handy, but also two problems arise. The first
is that, in your example, if you write "o.a", where "o" and "a" are two
identifiers (because they are not surrounded by apices or quotes), they
don't resolve to two fixed address in memory - so they are no more
identifiers. This wastes a lot of CPU cycles, because the interpreter
must scan all pool of objects to find them. In other words, python is
*slow*. Good to explain concepts, but in practical, heavy applications
Yeah, I agree; it is easy to see that on my old C2.4GHz
Post by Doriano Blengino
it is a pain. We can compare two programming IDEs: gambas and some other
written in python (Boa? or others I can't remember...). On my machine,
they simply suck - when gambas is quick and responsive. And think that
an IDE is not a particulary heavy application.
The second problem is that, I think, they don't check enough at compile
time (because they can't). For me, coming from pascal, this is a big
issue. Most of the time the compiler (pascal, or C) catches all my
typing errors, and the rest is ok. But if the compiler does not catch
well, that doesn't prevent mallocs missing...
Post by Doriano Blengino
errors, you are never sure that your code is ok. I am already critic
with some constructs that gambas does not check enough (for me) - so I
really can't stand with less rigid languages.
there should be 2 modes: regular (work as of now, useful when you just have
one proc to test, even if syntax doesn't match for similar things) and strict
(check every detail).
Post by Doriano Blengino
Just a simple opinion. I think that if you investigate well your needs,
you will find a clean and effective way to solve with gambas.
this is the "problem": I learn it while making my pgm.
--
Good news. Ten weeks from Friday will be a pretty good day.
Doriano Blengino
2009-11-14 20:18:07 UTC
Permalink
Post by Jean-Yves F. Barbier
=20
Post by Doriano Blengino
identifiers. This wastes a lot of CPU cycles, because the interpreter=20
must scan all pool of objects to find them. In other words, python is=20
*slow*. Good to explain concepts, but in practical, heavy applications=
=20
Post by Jean-Yves F. Barbier
Post by Doriano Blengino
=20
Yeah, I agree; it is easy to see that on my old C2.4GHz
=20
Your old blah blah 4Ghz? I am using a Duron 900... :-))
Post by Jean-Yves F. Barbier
Post by Doriano Blengino
issue. Most of the time the compiler (pascal, or C) catches all my=20
typing errors, and the rest is ok. But if the compiler does not catch=20
=20
well, that doesn't prevent mallocs missing...
=20
Nobody wants the impossible... but at least what *is* possible...
Anyway, the majority of my code is for small CPUs (with 128 bytes of ram=20
there is not so much malloc() you can do...).
And on PCs, gambas manages memory perfectly (or so it seems), without=20
having to pay for source inconsistencies. True, there is no malloc() in=20
gambas: who needs it?
Post by Jean-Yves F. Barbier
Post by Doriano Blengino
errors, you are never sure that your code is ok. I am already critic=20
with some constructs that gambas does not check enough (for me) - so I=
=20
Post by Jean-Yves F. Barbier
Post by Doriano Blengino
really can't stand with less rigid languages.
=20
there should be 2 modes: regular (work as of now, useful when you just =
have
Post by Jean-Yves F. Barbier
one proc to test, even if syntax doesn't match for similar things) and =
strict
Post by Jean-Yves F. Barbier
(check every detail).
=20
I can't see two modes for this. My best thought about compilers is the=20
Borland Delphi 3 pascal compiler. It compiled something 4000 lines per=20
second on pentium II, which means that for an average project you didn't=20
even notice the compiling time. And I never found a bug in the compiler,=20
or language. Up to now, I didn't find something so fast, solid,=20
reliable. But I leaved the windows world, so I must adapt myself to=20
something else.
Post by Jean-Yves F. Barbier
=20
Post by Doriano Blengino
Just a simple opinion. I think that if you investigate well your needs=
,=20
Post by Jean-Yves F. Barbier
Post by Doriano Blengino
you will find a clean and effective way to solve with gambas.
=20
this is the "problem": I learn it while making my pgm.
=20
And this is the best way to learn - when you have a problem to solve.

But back to your problem: why you talked about the Tag property? It=20
seems to me that that does not gets in so much?

Regards,

--=20
Doriano Blengino

"Listen twice before you speak.
This is why we have two ears, but only one mouth."
Jean-Yves F. Barbier
2009-11-14 20:32:30 UTC
Permalink
Doriano Blengino a écrit :
...
Post by Doriano Blengino
But back to your problem: why you talked about the Tag property? It
seems to me that that does not gets in so much?
because I've got some forms that display data coming from multiple tables,
so using Tag property looks like the easiest solution to store schema.table.field

--
Jean-Yves F. Barbier
2009-11-14 20:36:32 UTC
Permalink
Doriano Blengino a écrit :
...
Post by Doriano Blengino
I can't see two modes for this. My best thought about compilers is the
Borland Delphi 3 pascal compiler. It compiled something 4000 lines per
second on pentium II, which means that for an average project you didn't
even notice the compiling time. And I never found a bug in the compiler,
or language. Up to now, I didn't find something so fast, solid,
reliable. But I leaved the windows world, so I must adapt myself to
something else.
This is because Benoît is not working hard enough.
We could go in together for a pot and buy him ball and chain, also tie him
to his desk, send him pizzas and have a webcam survey with a buzzer to
awake him.
--
Love is not enough, but it sure helps.
Fabien Bodard
2009-11-14 22:06:32 UTC
Permalink
Post by Jean-Yves F. Barbier
...
Post by Doriano Blengino
I can't see two modes for this. My best thought about compilers is the
Borland Delphi 3 pascal compiler. It compiled something 4000 lines per
i've not done the test but gambas compile quickly !


with gbs :

gbs make a virtual project in tmp, compile it, execute the byte
code... and take less time than python for just execute the script
Post by Jean-Yves F. Barbier
Post by Doriano Blengino
second on pentium II, which means that for an average project you didn't
even notice the compiling time. And I never found a bug in the compiler,
or language. Up to now, I didn't find something so fast, solid,
reliable. But I leaved the windows world, so I must adapt myself to
something else.
yes delphi was a great experience !... wath about freepascal and lazarus ?
Post by Jean-Yves F. Barbier
This is because Benoît is not working hard enough.
We could go in together for a pot and buy him ball and chain, also tie him
to his desk, send him pizzas and have a webcam survey with a buzzer to
awake him.
arf... scarry !
Jean-Yves F. Barbier
2009-11-14 22:21:13 UTC
Permalink
Fabien Bodard a écrit :
...
Post by Fabien Bodard
Post by Jean-Yves F. Barbier
This is because Benoît is not working hard enough.
We could go in together for a pot and buy him ball and chain, also tie him
to his desk, send him pizzas and have a webcam survey with a buzzer to
awake him.
arf... scarry !
I also saw a transparent poo chair on a Japaneese site, so we could check
if everything's alright for him, and at the same time earn money for his
pizzas by selling connexions to scat perverts; nice doubleshot ain't it?

--
Doriano Blengino
2009-11-14 22:20:46 UTC
Permalink
Post by Fabien Bodard
Post by Doriano Blengino
second on pentium II, which means that for an average project you didn't
even notice the compiling time. And I never found a bug in the compiler,
or language. Up to now, I didn't find something so fast, solid,
reliable. But I leaved the windows world, so I must adapt myself to
something else.
yes delphi was a great experience !... wath about freepascal and lazarus ?
I tried both. Freepascal is not too bad and I am using it right now to
make an IDE. A little slow. Lazarus is too slow for me, ugly and
unstable; the debugger is almost unexistent. May be I didn't used the
right version - I stick with Debian stable.

Regards,
--
Doriano Blengino

"Listen twice before you speak.
This is why we have two ears, but only one mouth."
Continue reading on narkive:
Loading...