Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

CA-VO and bBrowser

250 views
Skip to first unread message

Valery N.

unread,
May 23, 2012, 3:56:40 AM5/23/12
to
I wrote small article that I suggest to change or correct in bBrowser:
http://www.mustang-soft.com/en/node/70
or
http://www.mustang-soft.com/ru/node/69

Your opinion is interesting to me.
P.S.: In advance I apologize for my bad English.

D.J.W. van Kooten

unread,
May 24, 2012, 7:19:00 AM5/24/12
to
On Wed, 23 May 2012 00:56:40 -0700 (PDT), "Valery N."
<mustang...@gmail.com> wrote:

Hello Valery,
Very interesting and reasonably understandable in English. You may
well have to rewrite parts soon, as bBrowser 4 is expected within
weeks now.

I've scanned a few things quickly. On ClearOrder you write (I changed
the wording a bit) :

Moreover, if number of the order is outside the existing range ... My
judgement that in this case it is necessary to return TRUE:

I don't agree with you on that. If the task isn't done as you expect,
either because an error occured, or you have passed incorrect
arguments as you mean here, your program should, if wel designed, take
some action. When it returns true it doesn't take that action (assumed
that an order is cleared, most likely another one as expected) so the
programmer's error remains unnoticed.

Dick

Valery N.

unread,
May 24, 2012, 8:54:33 AM5/24/12
to
Thanks for your response! If I am not mistaken, I marked that an
approach of the developer of bBrowser library in case of
bArrayServer:ClearOrder implementation ideologically correct. But, I
marked, in certain cases it is inconvenient.

Yes, I hurried, having called it is an error. Forgive.

Once again thanks for your criticism!

Valery.

Valery N.

unread,
May 24, 2012, 9:43:14 AM5/24/12
to
Allow, nevertheless to offer the decision which can arrange. Let
ClearOrder will return not TRUE/FALSE, and a certain value.
For example:
BAS_OK - if everything is correct
BAS_WARNING - if the warrant quitted for the range of the existing.
BAS-ERROR - if arose an error

And to add one more editing (I forgot to tell about it):

METHOD ClearOrder(iOrderNo) CLASS bArrayServer
// angegebene Sortierung lцschen
IF SELF:iOrderCount=0

// Valery
// RETURN FALSE
RETURN BAS_WARNING
ELSEIF IsNumeric(iOrderNo)
IF iOrderNo=0
iOrderNo := SELF:iOrderNo
ENDIF
IF !Between(iOrderNo, 1, SELF:iOrderCount)

// Valery
// RETURN FALSE
RETURN BAS_WARNING
ENDIF

// Valery
ELSE
RETURN BAS_ERROR
ENDIF

// Satzbewegung erlaubt?
IF !SELF:Notify(NOTIFYINTENTTOMOVE)

// Valery
// RETURN FALSE
RETURN BAS_ERROR
ENDIF
SELF:Commit()

// eine oder alle Sortierungen lцschen
IF IsNil(iOrderNo)
// alle Sortierungen lцschen
SELF:iOrderCount := 0
SELF:iOrderNo := 0
SELF:auOrder := {}
ELSE
// angegebene Sortierung lцschen
SELF:iOrderCount -= 1
ADel(SELF:auOrder, iOrderNo)
ASize(SELF:auOrder, SELF:iOrderCount)
IF SELF:iOrderCount=0
SELF:iOrderNo := 0
ELSE
SELF:iOrderNo := 1
SELF:auOrder[SELF:iOrderNo, BASOI_KEYNO] :=
SELF:OrderKeyNoToRecord(SELF:iOrderNo, SELF:iRecNo)
ENDIF
IF SELF:iOrderNo=0 .OR. SELF:auOrder[SELF:iOrderNo, BASOI_KEYNO]=0
SELF:SuspendNotification()
SELF:GoTop()
SELF:ResetNotification()
ENDIF
ENDIF

// alle Clients benachrichtigen
SELF:Notify(NOTIFYFILECHANGE)

// Status zurьckgeben
// Valery
// RETURN TRUE
RETURN BAS_OK


It seems to me that so it will be more convenient :))

Marc Verkade [Marti]

unread,
May 24, 2012, 2:50:01 PM5/24/12
to
Thanx for the info, very interesting and the english reasds fine!
Grtz, Marc

"Valery N." schreef in bericht
news:3e10a032-2b71-4922...@3g2000vbx.googlegroups.com...

Stephen Quinn

unread,
May 24, 2012, 9:39:17 PM5/24/12
to
Valery

> BAS_OK - if everything is correct
> BAS_WARNING - if the warrant quitted for the range of the existing.
> BAS-ERROR - if arose an error

What values do you propose to use though?
Numerics or a mixture of numerics and logics?

To indicate an ERROR condtion then put your own error handler in place.

The idea behind the ArrayServer is to handle the array data using the same
methods as in DBServer, with the change you propose you lose the
compatability with the RDD
ie you can't simply write
IF ! SELF:oServer:ClearOrder()
// Would ERROR out if the Server is an ArrayServer and returned
anything other than TRUE/FALSE

> It seems to me that so it will be more convenient :))

Convenient would also mean that you'd need to write extra verification code
(if you really wanted to catch/fix any bugs in the code)
Eg
IF ( xResult := SELF:oServer:ClearOrder( 21 ) ) != BAS_OK
// What are you going to do here, what is the exact error condition that
raised the warning??
IF InList( xResult, BAS_WARNING, BAS_WARNING_TYPE_1, BAS_WARNING_TYPE_2,
BAS_WARNING_TYPE_3)
/*Eg
DO CASE
CASE xResult = BAS_WARNING_TYPE_1
CASE xResult = BAS_WARNING_TYPE_2
CASE xResult = BAS_WARNING_TYPE_3
OTHERWISE
// Notify the user - will they want/need to know??
ENDCASE
*/
ELSE
// We have an ERROR - What to do??
BREAK
ENDIF
ENDIF

CYA
Steve


Valery N.

unread,
May 25, 2012, 3:06:42 AM5/25/12
to
Hello, Steve!

1. There is no DbServer:ClearOrder method (see SDK CA-Vo28).
2. On syntax some bArrayServer methods differ from the DbServer
methods. I showed it in the article.

=> There is no complete compatibility. The ClearOrder method in the
class DbServer is absent. Means, we can make it how it is convenient
to us.

The most similar method – DbServer:ClearIndex. Most likely, it also is
taken as a basis by bArrayServer:ClearOrder development. Besides,
DbServer:ClearIndex is similar to the old DBClearIndex function.

Question: whether to read attempt to clear to (close) the warrant with
nonexistent number an error?

I agree with Dick that ideologically it is correct, but it is
inconvenient. Why? At least because doesn't match on operation
DBClearIndex (see Help CA-Vo 28):

DBClearIndex() Function

Purpose: Remove orders from the order list in a work area and close
associated index files.

Syntax: DBClearIndex ([<cOrder> | <nPosition>], [<cIndexFile>]) --->
lSuccess

Arguments:
<cOrder> | <nPosition>
The name of the order to clear or a number representing its position
in the order list. Using the order name is the preferred method since
the position may be difficult to determine using multiple-order index
files. If not specified, all orders in the specified index file (or
the entire work area, if no index file is specified) are cleared.
Invalid values are ignored.

We check:

Use Test
Test->DBCLEARINDEX( 5 ) => TRUE :))

Dick insists on ideology. I offered a compromise.
In this case, Dick will make so:
IF .NOT. oServer:ClearOrder() <> BAS_OK
=> Error

I will make so:
IF oServer:ClearOrder() == BAS_ERROR
=> Error

It doesn't mean that I am right. I do how it is convenient to me.
Today I made one more editing and at me it looks so:
METHOD ClearOrder( iOrderNo ) CLASS msArrayServer // Valery
IF SELF:iOrderCount = 0
RETURN TRUE // BAS_WARNING
ELSEIF IsNil( iOrderNo )
iOrderNo := 0
ELSEIF IsNumeric( iOrderNo )
IF iOrderNo > 0 .AND. .NOT. Between( iOrderNo, 1, SELF:iOrderCount )
RETURN TRUE // BAS_WARNING
ENDIF
ELSE
RETURN FALSE // BAS_ERROR
ENDIF

IF !SELF:Notify( NOTIFYINTENTTOMOVE )
RETURN FALSE // BAS_ERROR
ENDIF
SELF:Commit()

IF iOrderNo = 0
SELF:iOrderCount := 0
SELF:iOrderNo := 0
SELF:auOrder := {}
ELSE
SELF:iOrderCount -= 1
ADel( SELF:auOrder, iOrderNo )
ASize( SELF:auOrder, SELF:iOrderCount )
IF SELF:iOrderCount=0
SELF:iOrderNo := 0
ELSE
SELF:iOrderNo := 1
SELF:auOrder[ SELF:iOrderNo, BASOI_KEYNO ] :=
SELF:OrderKeyNoToRecord( SELF:iOrderNo, SELF:iRecNo )
ENDIF
IF SELF:iOrderNo = 0 .OR. SELF:auOrder[ SELF:iOrderNo, BASOI_KEYNO ]
= 0
SELF:SuspendNotification()
SELF:GoTop()
SELF:ResetNotification()
ENDIF
ENDIF

SELF:Notify( NOTIFYFILECHANGE )
RETURN TRUE // BAS_OK

Good luck!

Forgive, if the message was duplicated...
Message has been deleted

Valery N.

unread,
May 25, 2012, 3:44:29 AM5/25/12
to
Excuse me again :)) in a hurry, mistaken. Right way:

METHOD ClearOrder( iOrderNo ) CLASS msArrayServer // Valery

// angegebene Sortierung lцschen
IF SELF:iOrderCount = 0
// Valery
// RETURN FALSE
RETURN TRUE // BAS_WARNING

// Valery
***
ELSEIF IsNil( iOrderNo )
//
***
ELSEIF IsNumeric( iOrderNo )

IF iOrderNo = 0
iOrderNo := SELF:iOrderNo
ENDIF

IF !Between( iOrderNo, 1, SELF:iOrderCount )
// Valery
// RETURN FALSE
RETURN TRUE // BAS_WARNING
ENDIF

// Valery
***
ELSE

RETURN FALSE // BAS_ERROR
***
ENDIF

// Satzbewegung erlaubt?
IF !SELF:Notify( NOTIFYINTENTTOMOVE )
RETURN FALSE // BAS_ERROR
ENDIF
SELF:Commit()

// eine oder alle Sortierungen lцschen

IF IsNil( iOrderNo )

// alle Sortierungen lцschen
SELF:iOrderCount := 0
SELF:iOrderNo := 0
SELF:auOrder := {}

ELSE
// angegebene Sortierung lцschen
SELF:iOrderCount -= 1
ADel( SELF:auOrder, iOrderNo )
ASize( SELF:auOrder, SELF:iOrderCount )
IF SELF:iOrderCount=0
SELF:iOrderNo := 0
ELSE
SELF:iOrderNo := 1
SELF:auOrder[ SELF:iOrderNo, BASOI_KEYNO ] :=
SELF:OrderKeyNoToRecord( SELF:iOrderNo, SELF:iRecNo )
ENDIF
IF SELF:iOrderNo = 0 .OR. SELF:auOrder[ SELF:iOrderNo, BASOI_KEYNO ]
= 0
SELF:SuspendNotification()
SELF:GoTop()
SELF:ResetNotification()
ENDIF
ENDIF

// alle Clients benachrichtigen
SELF:Notify( NOTIFYFILECHANGE )

// Status zurьckgeben
RETURN TRUE // BAS_OK

Dirk (Belgium)

unread,
May 25, 2012, 3:55:18 AM5/25/12
to
Hi Valery,

Thanks for your big note.
I do not use bBrowser a lot, and if I use bBrowser, then it is in
ReadOnly mode. So, just to lookup something.

But, I use a lot of colorcontitions. And I have the same experience as
you have. The solution of using the method "Fieldget" does not solve
the problem completely! (I use fieldget already for years). I think it
has something to do with deleted brushes... I'm testing it now, but it
happens only by customers who calls this lookup table 100times a day...

If I have more results, I let you know...
--

Valery N.

unread,
May 25, 2012, 4:04:59 AM5/25/12
to
Thanks, Dirk!
Good luck to you!

Stephen Quinn

unread,
May 25, 2012, 4:46:59 AM5/25/12
to
Valery

> 1. There is no DbServer:ClearOrder method (see SDK CA-Vo28).
I didn't check, sorry - probably thinking of ClearScope()

> Question: whether to read attempt to clear to (close) the warrant with
nonexistent number an error?

I'd just ignore it - if you pass the wrong info and nothing happens then
what harm is done?
To tell you the truth I wouldn't bother clearing any orders on an
arrayserver
- I'd just close the server and they'd all go away.

> Besides, DbServer:ClearIndex is similar to the old DBClearIndex function.
That's because DBClearIndex() is a compatability function which you
shouldn't use with objects
AFAIK it only works for the DBFNTX RDD (things may have changed since I used
it last though<g>)

CYA
Steve


Stephen Quinn

unread,
May 25, 2012, 4:56:37 AM5/25/12
to
Dirk

> I think it has something to do with deleted brushes...

Why are you deleting brushes when you know they're in use??

CYA
Steve


Valery N.

unread,
May 25, 2012, 5:36:00 AM5/25/12
to
Hi, Steve!

> I'd just ignore it - if you pass the wrong info and nothing happens then
> what harm is done?

I also offered it. :)) my example ignores similar errors. But, Dick
disagreed...

> To tell you the truth I wouldn't bother clearing any orders on an
> arrayserver
>     - I'd just close the server and they'd all go away.

If I need to replace the data server (bArrayServer) - I use the method
bArrayServer:Use. So quickly. But after that, we must re-create the
order.
Also, I use other tricks. Therefore, bArrayServer: ClearOrder I need.
As the poet said: "If the stars are lit, it means that someone needs!"

richard.townsendrose

unread,
May 25, 2012, 6:03:56 AM5/25/12
to
Valery

I am sure that Joachim will have read your comments with interest.

It is one excellent product and you can do so much with it.

bBrowser 4 is even more fantastic

see http://www.tdocplus.co.uk/tdoc_manual/
select using TDOC, The TDOC Browse ...

Richard

Valery N.

unread,
May 25, 2012, 6:46:33 AM5/25/12
to
Good afternoon, Richard!

Thanks, Richard! I looked... If I am not mistaken, you use RightSLE?
I refused it a few years ago. Also wrote the class on the basis of
MathiasSLE. If it will be interesting, can, I will write about it
article.

Yes, all of us wait the new bBrowser version. I like this library. It
is a pity, just for an upgrade on the new version it is necessary to
pay. :)

richard.townsendrose

unread,
May 25, 2012, 6:55:09 AM5/25/12
to
Valery

its a major upgrade ... search here for posts to see

and joachim has to earn a wee crust !

Richard

ps its only me that now gives his software away for free - cannot be
bothered selling any more - make money on support and training, and
may be ads sales.

Valery N.

unread,
May 25, 2012, 7:05:15 AM5/25/12
to
Yes, Richard.

That's right. Everyone earns as is able. I wish successes to it and
its IT products!

Dirk (Belgium)

unread,
May 29, 2012, 3:33:38 AM5/29/12
to
Steve,

I do not delete brushes.

I have a global array where I add all brushes I need in bBrowser.
Everytime I show a bBrouwser, I have to create colorconditions. So, I
use always the same brushes. After a while, the elements of the global
array does not contain brushes anymore, but a NIL (null object).

The resulting problem is always 5333...

But it takes a lot to solve this problem.
It happens only once on 250 times.
So, every new release of my program has some new changes on this
problem, but I only release a new version every 2 months...

Dirk
====================================================================
--

Stephen Quinn

unread,
May 29, 2012, 4:57:28 AM5/29/12
to
Dirk

> I have a global array where I add all brushes

You just identified where your problem is - when you wrote GLOBAL!

You'd be a lot better off just creating them as needed and not storing them
in memory at all

CYA
Steve


Paul D B

unread,
May 29, 2012, 8:44:15 AM5/29/12
to

Hi Valery,
about your Private Investigations:
interesting reading (a bit Shakespearish style :-) ) but what I don't
understand is this: have you discussed these issues with Joachim?
I have always known him to be very responsive and willing to fix bugs and
make his product better. In fact I have never had any bad experience with
him like "I acknowledge it is a bug but I will not fix it". (IOW: the
Microsoft style).

PS: when it comes to complex coloring of cells, check out bCompoundvalue. It
is very powerful. You can use it to set colorconditions for *individual
cells* (so not on a row or recordlevel). You can show multiple field values
in 1 cell and color them independently (so you ar in fact coloring parts of
a cell).
See example:
http://dl.dropbox.com/u/1068395/Bestanden%20niet%20weblinked/example.jpg

Never had any buggy behaviour whatsoever with this approach. But, very
demanding in GDI resources when using big grids. Because each individual
celll will have its own colorcondition...

Paul

Valery N.

unread,
May 29, 2012, 10:10:17 AM5/29/12
to
Good afternoon, Paul!

For me it was unexpected that the subject of our communication has
continuation. I was going to write today on the site (in the blog)
some totals.

To me told that Joachim, probably, already read my notes. If you think
that I should write the letter personally Joachim, I will make it.

The sense of my post consisted in paying attention to "old" problems
which me interested. I decided that will be correct to carry out it
for discussion that it became clear that these problems are not only
at me. After all, I can and be mistaken.

> In fact I have never had any bad experience with
> him  like "I acknowledge it is a bug but I will not fix it".  (IOW: the
> Microsoft style).

I think, you misunderstood. He so didn't speak. Probably, it was
affected by my bad English. Above, we discussed ClearOrder method
operation. I told that I hurried to call a code in this method an
error. Everything depends on the one who and as represents correctness
of operation of this method. It is a thing disputable. It will be made
how it is represented by the developer. And if I with it am not agrees
- I will make how it is pleasant to me.

> PS: when it comes to complex coloring of cells, check out bCompoundvalue. It
> is very powerful. You can use it to set colorconditions for *individual
> cells* (so not on a row or recordlevel). You can show multiple field values
> in 1 cell and color them independently (so you ar in fact coloring  parts of
> a cell).
> See example:http://dl.dropbox.com/u/1068395/Bestanden%20niet%20weblinked/example.jpg
>
> Never had any buggy behaviour whatsoever with this approach.

Normally indeed. But, there are also exceptions.
Example. I made the server. To spare time, I didn't describe access to
fields. Now, if I make very long condition of a coloring of type:

oColorCondition := bColorCondition{ "Server:FIELD1=Server:FIELD2 .AND.
Server:FIELD3=1 .AND. Server:FIELD4= … ETC.", oBrowser:Server,,
oBrush }
oBrowser:ColorCondition:Add( oColorCondition )

That, it can lead to errors. For the solution of this problem I
recommended to write instead of Server:FIELDxxx
Server:FieldGet(#FIELDxxx).

At me it solved all problems :)

But, Steve complained of bColorCondition work as also. He told that it
has also other problems. Whose there a mistake – I don't know. It is
necessary to look the Steve code, probably there is a mistake. Why I
so think? Except Steve nobody complained of it...

Valery.

P.S.: you can set the questions and on my site (mustang-soft.com). I
with pleasure will answer you. Registration isn't required. :)

Paul D B

unread,
May 29, 2012, 10:38:06 AM5/29/12
to
Hi Valery,

OK you confirm that you didn't speak to Joachim. I would recommend you do it
(you can point him to your blog, eveything is well explained there).
You think it isn't worth it because it concerns "old" problems. But only
Joachim can decide if it is an "old" problem. He might very well reuse
parts of the "problematic" bBrowser 3 code in the new bBrowser4. So your
input and findings might be valuable for him (and finally for all other
bBrowser users, like me).

cheers

Paul


"Valery N." schreef in bericht
news:0a8d23a0-1bd5-4657...@w24g2000vby.googlegroups.com...

Valery N.

unread,
May 29, 2012, 11:23:11 AM5/29/12
to
On 29 май, 17:38, "Paul D B" <poll...@NOMORESPAMhnt.be> wrote:
> Hi Valery,
>
> OK you confirm that you didn't speak to Joachim. I would recommend you do it
> (you can point him to your blog, eveything is well explained there).
> You think it isn't worth it because it concerns "old" problems. But only
> Joachim can decide if it is an "old" problem.  He might very well reuse
> parts of the "problematic" bBrowser 3 code in the new bBrowser4.  So your
> input and findings might be valuable for him (and finally for all other
> bBrowser users, like me).
>
> cheers
>
> Paul

Well, Paul. To confirm my good intentions, I just sent it the letter
to the address bie...@befo.com

Valery.
Message has been deleted

Dirk (Belgium)

unread,
May 30, 2012, 4:05:24 AM5/30/12
to
Stephen,

Can you explain why I can't use a global array of brushes ?
I also have a global array of Icons & bitmaps.
I also have a global array of colors.
I also have a global array of ImageLists.
All these other are working correct.

But indeed, my next try is to create "brushes" when I need them.
Maybe this solve the problem, but then it is just a workaround.
A global array of brushes may not be the reason of this problem...

Dirk
--

Stephen Quinn

unread,
May 30, 2012, 7:23:39 AM5/30/12
to
Dirk

> Can you explain why I can't use a global array of brushes ?
I didn't say you couldn't - my suggestion would be you don't use globals at
all.
You only have to go back though the past messages in this ng to see that
there's a history of *strange* things happening with globals.

> I also have a global array of Icons & bitmaps.
> I also have a global array of colors.
> I also have a global array of ImageLists.
> All these other are working correct.
Until you have more problems with disappearing objects<bg>

> Maybe this solve the problem, but then it is just a workaround.
Good programming practices are never workarounds

IMHO global usage isn't good programming practice, you may choose to believe
otherwise<g>

> A global array of brushes may not be the reason of this problem...
No idea - I don't use globals so can't carry out any tests<g>

Do you close ALL windows that use these brushes anywhere in your app?
Do you issue CollectForced() anywhere in the app?
Ever thought that GC sees that they're no longer in use and clears them from
memory.

CYA
Steve


Dirk (Belgium)

unread,
May 31, 2012, 3:34:24 AM5/31/12
to
Steve,

Thanks for your reaction. If I read it correctly, you write that it has
to be possible to use a global, but it is better not to do it. So, here
a few of my thought:

a) In dotNet, they use quit a lot a singleton, which is almost
everytime a global object.
b) All open DBF tables are saved in a (hidden) global array by VO
c) I do not use collectforced() and I do not destroy brushes by myself
(I just make the local var := null_object), but I do not known if RP2
do not destroy brushes (We do not have sources...)
d) a global array of brushes is a good idea. If any app use a lot of
times the same brushes, it is a good idea to create them once and use
them multiple times. In my situation, I speak about 20 brushes each
minutes. So, using local brushes is a workaround. Your statement of
good programming practices is not correct. It depends of the situation.

But the hint to use (only for test) local brushes is good.
So next version, i will have an app with local brushes and I will see
the result after a few days.

Thanks, Dirk

==============================

Stephen Quinn wrote:

> Dirk
>
> > Can you explain why I can't use a global array of brushes ?
> I didn't say you couldn't - my suggestion would be you don't use
> globals at all. You only have to go back though the past messages in
> this ng to see that there's a history of strange things happening
> with globals.
>
> > I also have a global array of Icons & bitmaps.
> > I also have a global array of colors.
> > I also have a global array of ImageLists.
> > All these other are working correct.
> Until you have more problems with disappearing objects<bg>
>
> > Maybe this solve the problem, but then it is just a workaround.
> Good programming practices are never workarounds
>
> IMHO global usage isn't good programming practice, you may choose to
> believe otherwise<g>
>
> > A global array of brushes may not be the reason of this problem...
> No idea - I don't use globals so can't carry out any tests<g>
>
> Do you close ALL windows that use these brushes anywhere in your app?
> Do you issue CollectForced() anywhere in the app?
> Ever thought that GC sees that they're no longer in use and clears
> them from memory.
>
> CYA
> Steve



--

Paul D B

unread,
May 31, 2012, 4:39:29 AM5/31/12
to
Dirk,

I don't think it is bad programming (on the contrary: IMO it is good
programming) to "globalize" objects that you need everywhere in your
application. There is no sense in creating objects, that should have
application-wide visibility, over and over again. E.g. the INI file object
that I need in each and every window (it would be stupid to close and open
it 25 times in a row).
I agree that - in theory! - Global vars should work. Hell, VO itself uses
*hundreds* of globals (sort the SDK per Type and select the Globals..
impressive, how many Globals they use in the GUI Classes)!
But anyway, I don't use GLOBALS - they have a bad reputation. Instead I use
"application objects". So they are variables of my App class and since the
App Class lives just as long as your application will run, they will never
be touched by the garbage collector.
I access them through a function like this:
PDBAppObj():GLOoINIFile:WriteValue("Default","RunConvertDBF","0")

Never had any problem at all like that, and in fact it is quite easy to
transform your existing GLOBALS to application variables.

On the other hand... when you check the SDK, you'll see this:
GLOBAL oApp AS App

so even the App itself is a Global! <BG> So is it worth going through the
trouble to change all your Globals into application variables... I don't
know!

But you first said your problem with the disappearing brushes was with
bBrowser? But now you say RP2?
If it is with bBrowser, then personally I would not globalize stuff like
brushes. So you have 20 different bBrowsers open in different datawindows
and they all use the same brushes? Humm..
I would make the bBrowsers and the brushes etc.. variables of the
datawindow.

PS: you said you only use bBrowser for lookup-windows? Well I really don't
understand that, if you have bBrowser, that you still use the crappy and
limited VO Databrowser. If you got bBrowser and the source, then the sky is
the limit...

Paul


"Dirk (Belgium)" schreef in bericht news:jq76tv$ok8$1...@dont-email.me...

Valery N.

unread,
Jun 30, 2012, 3:05:54 AM6/30/12
to
Some readers are interested about my cooperation with Joachim Biler.
I made the decision and wrote here:

ENG: http://mustang-soft.com/en/node/77
RUS: http://mustang-soft.com/ru/node/76
0 new messages