04140010.txt 14-Apr-00


Browser in DialogWindow

I'm trying to put a DataBrowser on a DialogWindow without
success. It's just a little higher then what I know. Can
someone help me because I can't get it showing. Supposed I
have everything wrong.

--
Jean-Marie Berthiaume

To add to this:

Even if the Help file says:
"The DataListView control uses internally a virtual list
view, which means that its speed is independent of the total
number of records in your database."
I find that untrue. An incremental search from an SLE is
dependant of the size of the database or is it because I'm
using an indexed database. With a browser the result is
instantaneous, with a datalistview it's eternity.

Jean-Marie Berthiaume

Use a DataDialog - that's your only option with databrowsers
really.

Nope, this won't give me some special features I'm trying to
get.

Jean-Marie Berthiaume

Jean-Marie,

Stephane offered a good summary a while back of how to do
this. See below.
The trick is simply to offer the browser the same messages
and resources it relies on from a datawindow. I must admit,
though, fine tuning it is a little difficult without the SDK
because you can just look up a particular message to see
what the datawindow does with it and then copy that into the
dialogwindow. Anyway, this works, although it is a long time
since I played with this.

Geoff

---------------------------------------------------

Richard,

No I'm not using GridPro <g>

Ok, here's how:

First, subclass the DataBrowser:
--------------------
Class DB inherit DataBrowser

Method Init(oOwner,nID,oPoint) class DB
    Super:Init(oOwner,nID,oPoint,oOwner:Size)
Method Validate() class DB
   Return true
---------------------

Then, in a DialogWindow:-----------------------

class BrowseContDLG inherit DIALOGWINDOW
protect oDB as DB
protect oServer as DBServer

Method Notify(kNotifyName) class BrowseContDLG
return kNotifyName

Method Dispatch(oEvent) class BrowseContDLG
 do case
    case oEvent:Message=WM_CLOSE
         self:oServer:UnRegisterClient(self:oDB,false)
         self:oDB:Destroy()
         self:oServer:=null_object
 endcase
Return super:Dispatch(oEvent)

Method PostInit() class BrowseContDLG

    sefl:oServer:=MyServer{}
    self:oDB:=DB{self,-1,Point{0,0}}
    self:oDB:Use(self:oServer)
    self:oDB:Show()
-------------------------------------

That's a simple way of doing it.

Stephane


Thank you Geoff.

With your help and Stephane's suggestion you mention I
finally create what I wanted: a SingleLineEdit in a window
creates a floating ToolWindow containing a browsed field in
which the SLE:Value is searched. The ToolWindow is always on
top of the app. With a MouseDoubleClick you can hide/show
the ToolWindow or if in a cell of the ToolWindow update de
SLE:Value. If someone want to take a look at it I will be
happy to get some feedback and improvements. I find it quite
faster then a DataListView but I don't have a big database
maybe that's make a difference.

Jean-Marie Berthiaume

Jean-Marie,

I would be very interested to see what you have done. And if
it is of any use I can plug a 300,000 record DBF into it for
you. Depending on how it works (ie your comments on speed)
it may be yet another alternate for pop-up lists where combo
boxes are just too slow.

Geoff


Jean-Marie,

I have recieved your demo and tested it out. I have sent you
a private reply on this but the guts of the matter is that
it works just as fast with 100,000 or more records. Its
speed is independent of DBF size.

Geoff