AW: Re: Position of field on screen

Udo Sonnabend U.Sonnabend at wigasoft.ch
Thu Aug 28 08:18:56 EDT 2014


Hi 

Some modified code, originating from Master Object Framework (Marc Smit)...

$windowLeftForObject:
==================
While prObject
Calculate left as left+prObject.$left
If prObject.$gridsection=kGridRow
If prObject.$gridcolumn>1
Calculate left as left+prObject.$container().$dividers.[prObject.$gridcolumn-1].$posn
End If
Calculate left as left+prObject.$gridcolumn     ;; Korrektur, pro Spalte ein Pixel dazu
End If
Set reference prObject to prObject.$container
If prObject
If prObject.$objtype<>kComplexGrid     ;; Korrektur, nicht im Grid
Calculate left as left+prObject.$hwnd.$ref().$left-prObject.$framehwnd.$ref().$left
End If
If prObject.$objtype=kTabPane
Calculate left as left+3    
End If
End If
End While
Quit method left


$windowTopForObject:
==================
While prObject
Calculate top as top+prObject.$top

If prObject.$gridsection=kGridRow
Calculate top as top+((prObject.$container().$firstsel-1)*prObject.$container().$rowheight)

If prObject.$container().$showheader
Calculate top as top+prObject.$container().$headerheight+2     ;; (nicht getestet mit showheader)
End If
If prObject.$container().$showhorzheader
Calculate top as top+prObject.$container().$horzheaderheight+2
End If
End If

Set reference prObject to prObject.$container
If prObject
If prObject.$objtype<>kComplexGrid     ;; Korrektur
Calculate top as top+prObject.$hwnd.$ref().$top-prObject.$framehwnd.$ref().$top
End If
If prObject.$objtype=kTabPane
Calculate top as top+27     ;; in Tests andere Masse ermittelt 
End If
End If
End While
Quit method top

Hope that helps, may be offsets have to be changed..
Regards, Udo.

-----Ursprüngliche Nachricht-----
Von: omnisdev-en-bounces at lists.omnis-dev.com [mailto:omnisdev-en-bounces at lists.omnis-dev.com] Im Auftrag von brian.os at verizon.net
Gesendet: Donnerstag, 28. August 2014 14:02
An: omnisdev-en at lists.omnis-dev.com
Betreff: Re: Re: Position of field on screen


   Hi Bas,

   I guess  you don't have the option of using mouseo=r() to help...?

   I've used this in the past to open special wind=s at the

   current mouse position, but I gather that in your

   case the mouse is not necessarily over your field...

    




   brian o'sullivan; bear, DE



   O=8/28/14, Michael Monschau<michael at brainydata.co.uk> w=te:



   Hi Bas,
   You  may  be  able  to  calculate  it  via=f.$framehwnd.$left  and
   ref.$framehwnd.$top. But again these are the co-o=inates local to the
   parent container. So you will need to use ref.$contai=r to traverse to
   the window and add the windows $framehwnd.$left or $fram=wnd.$top. This
   should give you a more accurate screen position, but I don= remember how
   accurate. On the mac I remember complications with the menu�r height and
   desktop, and on Windows there is the application window. 
   In the end, you may have to resort to writing an external functio= But
   have a go using $framehwnd first, it may give you what you need.
   Regards,
   Michael
   Michael Monschau (Director)
   B=iny Data Limited
   Reply To: [1]michael at brainydata.co.uk
   Phone: +44 (0)870 474 0708
   Web: [2]www.brainydata.co.uk=e home of Omnis Components and Developer
   Services
   On 28 Aug 2014, at 05:07, Bastiaan Olij wrote:
   > Hi Kim,
   >
   > Nope, those only give me the position o=he field within its current
   > container, so if I want the positi= on screen I would have to add the
   > left and top position of its=ntainer, and its container, and possibly
   > traverse further down=nd then the window, and add any top/left
   > toolbars, take into a�ount scrollbar positions of the various
   > containers, take into a�ount any container that is a tabpane, take into
   > account the siz=f borders of all the containers, not to mention that
   > those siz= change depending on the OS and that certain things have a
   > size=at can change depending on content without Omnis providing me
   > =th that info (tab panes with a double row of headers for instance).
   =
   > I've written such logic before but it is a dog to maintain =enever a
   > new OS comes out. It would be so neat to just have a f=ction that gives
   > me the screen coordinates of a field. I was ho=ng that someone found a
   > way to do so. I know there is a functio=n the XCOMP SDK that allows me
   > to get to this info if I provid=t with the HWND of the field (I may
   > add such a function to my =ternal if all else fails) but I find it hard
   > to believe it is n= part of Omnis somewhere.
   >
   > Cheers,
   >
   &g= Bas
   >
   > On 28/08/14 1:32 PM, Kim Sumner wrote:
   >= Hi Bas
   >>
   >> $cfield.$top & $cfield.$left =ll give you coordinates location within
   >> $cwind
   >>=
   >>
   >> Regards
   >>
   >> Kim Su=er
   >> Corporate Windows Pty Ltd, AUSTRALIA
   >>
   >> Tel: + 61-3-5338-8232
   >> Mobile: 0419-561-496
   = Skype: corpwin
   >> Web: [3]http://www.corporat=windows.com
   >> -------------------------------------------=----------------------
   >> WebPublisher Studio - Share your dat=ith the World
   >> [4]http://www.webpublisherstudio.com<=>
   >> ---------------------------------------------------------=--------
   >
   > ___________________________________________=________________
   > Manage your list subscriptions at [5]http://li=s.omnis-dev.com
   __________________________________________=_________________
   Manage your list subscriptions at [6]http://lists.=nis-dev.com
   

References

   1. file://localhost/tmp/3D"ma   2. ="http://www.brainydata.co.uk"/
   3. ="http://www.corporate-windows.com"/
   4. 3D"http://www.w=
   5. 3D"http://lists.omnis-dev.com"/
   6. 3D"http://lists.omnis-dev.com"/
_____________________________________________________________
Manage your list subscriptions at http://lists.omnis-dev.com


More information about the omnisdev-en mailing list