Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.databases.filemaker > #3224

Re: Scripting: Putting the Cursor into a Specific Field

Path csiph.com!aioe.org!.POSTED!not-for-mail
From Helpful Harry <HelpfulHarry@BusyWorking.com>
Newsgroups comp.databases.filemaker
Subject Re: Scripting: Putting the Cursor into a Specific Field
Date Tue, 23 Oct 2018 19:17:00 +1300
Organization Aioe.org NNTP Server
Lines 128
Message-ID <pqmecr$d8a$1@gioia.aioe.org> (permalink)
References <1nx0y5j.3xtd161uvtfy1N%csampson@inetworld.net> <1nx2zwi.11xzs38gew5uwN%csampson@inetworld.net>
NNTP-Posting-Host 0VkIv9z21kQaJDuvT3d2RA.user.gioia.aioe.org
Mime-Version 1.0
Content-Type text/plain; charset=iso-8859-1; format=flowed
Content-Transfer-Encoding 8bit
X-Complaints-To abuse@aioe.org
User-Agent Unison/2.2
X-Notice Filtered by postfilter v. 0.8.3
Xref csiph.com comp.databases.filemaker:3224

Show key headers only | View raw


On 2018-10-23 00:23:14 +0000, Charles H. Sampson said:
> Helpful Harry <HelpfulHarry@BusyWorking.com> wrote:
>> On 2018-10-21 21:20:36 +0000, Charles H. Sampson said:
>>> 
>>> In a script, how do I remember a field and later put the cursor into
>>> that field and make it the active field? I've experimented with Go To
>>> Object and Set Field by Name (in this case setting it to its saved
>>> initial contents). In spite of what the online documentation seems to
>>> say, neither of these leaves the cursor in the field/object, instead
>>> putting it into the next field in tab order.
>>> 
>>> Am I misreading? Am I doing something else wrong?
>>> 
>>> FMP 16.
>> 
>> Each new re-worked version of FileMaker Pro just gets messier and
>> messier. Even the Script "Workspace" (the stupid name for the Script
>> Editor) is unnecessarily over-complicated.   :o(
>> 
>> This function used to be very easy, but now it seems to be somewhat
>> more complicated. I managed to get it to work using this technique ...
>> 
>> 1.  In Layout Mode, click in each Field on the Layout one at a time
>> and give each a unique Object Name in the silly Inspector palette
>> (for the sake of ease of use and understanding, it's probably best
>> to simply use an Object Name which is the as the Field's name in
>> the Define Fields window).
>> 
>> 2.  Create a new Global Text Field called g_ActiveField which the Scripts
>> can use to store the currently active Field's Object Name (you can
>> probably use a Variable if you prefer).
>> 
>> 3.  Now you can use two commands in your Scripts:
>> - to store the Object Name of the currently active field use
>> Set Field [g_ActiveField; Get(ActiveLayoutObjectName)]
>> 
>> - to go to the Field stored in g_ActiveField
>> Go To Object [Object Name: g_ActiveField]
> 
> I've tried this, using both the global field and the variable, and I
> can't get it to work. Here's what I've discovered: My script is
> triggered by exit the field (the field object). I hoped that this would
> activate as I tried to exit the field but before the field is actually
> left. That seems to be the case. I begin by capturing three pieces of
> data: the field's name, using both techniques, and the contents of the
> field. Much later I use a custom dialog to display these data and they
> are what they should be.
> 
> I exit the field in question by clicking in another field, including
> another field of a different record. After the script executes the Go To
> Object or Set Field by Name step, that field is where the cursor is
> placed.
> 
> I've tried all four combinations of Set Variable/Set Field and Go To
> Object/Set Field by Name.
> 
> And here's the latest word: I've just discovered that Set Field By Name
> isn't working at all. Instead of setting the field to its previously
> saved initial value, I tried to set it to a different value. The initial
> value is what showed up.

When you run the 'Go To' Script it causes the database to exit the 
second field (even though it doesn't deactivate) causing the 'Exit' 
Script to be run first, which of course changes the data for the Field 
it will return to.

It's a clumsy approach, but what you can do is capture the Previous 
Field's Object Name separately:

   - Create another Global Text Field (or variable) called
     g_PreviousActiveField
     (You will also need another Field to similarly capture
      the field data)

   - Create a new Script with the command:
        Set Field [g_PreviousActiveField; g_ActiveField]

   - In Layout Mode, set all the necessary Fields to also
     have an OnObjectEnter trigger using the above Script

   - Change the 'Go To' Script to use the g_PreviousActiveField
     Field:
        Go To Object [Object Name: g_PreviousActiveField]


What now happens is:
  - Exiting a Field triggers the Exit Script, so stores that Field's
    Object Name in the g_ActiveField.

  - If you have clicked in another Field, it will trigger the
    Enter Script, which copies the current contents of g_ActiveField
    to g_PreviousActiveField.

  - When you run the 'Go To' Script, it goes to the correct field
    because it's ignoring the change to g_ActiveField occuring due to
    the 'Go To' Script first triggering the Exit Script from the
    second Field.

All clear as mud??  :o)


This works in some quick tests, but there are three problems though.

1.  If you exit the first Field by clicking anywhere that isn't another
    Field (i.e. a blank space on the layout, a button, etc.), then the
    Enter Script won't be run. You might be able to workaround this by
    including a test in the 'Go To' Script, but it would depend on how
    the second problem can be solved ...

2.  You'll need some way to clear the data from both g_ActiveField and
    g_PreviousActiveField.

3.  If you're using a Layout in List View, then you will also need to
    capture the Record Number when exiting the Field and alter the
    'Go To' Script to go back to the original Record as well as the
    original Field - otherwise when you click on another record to exit
    the Field, the 'Go To' will go to the correct Field, but incorrectly
    in the current Record.


Perhaps it would help if you explain why you're trying to achieve this. 
There might be a better approach to doing what you want.


Helpful Harry   :o)


Back to comp.databases.filemaker | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

Scripting: Putting the Cursor into a Specific Field csampson@inetworld.net (Charles H. Sampson) - 2018-10-21 14:20 -0700
  Re: Scripting: Putting the Cursor into a Specific Field Helpful Harry <HelpfulHarry@BusyWorking.com> - 2018-10-22 13:39 +1300
    Re: Scripting: Putting the Cursor into a Specific Field csampson@inetworld.net (Charles H. Sampson) - 2018-10-22 17:23 -0700
      Re: Scripting: Putting the Cursor into a Specific Field Helpful Harry <HelpfulHarry@BusyWorking.com> - 2018-10-23 19:17 +1300
        Re: Scripting: Putting the Cursor into a Specific Field csampson@inetworld.net (Charles H. Sampson) - 2018-10-26 19:02 -0700
          Re: Scripting: Putting the Cursor into a Specific Field none@gmail.com - 2018-10-27 16:38 +0200
            Re: Scripting: Putting the Cursor into a Specific Field Helpful Harry <HelpfulHarry@BusyWorking.com> - 2018-10-28 18:13 +1300
              Re: Scripting: Putting the Cursor into a Specific Field csampson@inetworld.net (Charles H. Sampson) - 2018-11-07 20:09 -0800
            Re: Scripting: Putting the Cursor into a Specific Field csampson@inetworld.net (Charles H. Sampson) - 2018-11-07 19:32 -0800
          Re: Scripting: Putting the Cursor into a Specific Field Helpful Harry <HelpfulHarry@BusyWorking.com> - 2018-10-28 18:15 +1300
            Re: Scripting: Putting the Cursor into a Specific Field csampson@inetworld.net (Charles H. Sampson) - 2018-11-07 20:09 -0800
  Re: Scripting: Putting the Cursor into a Specific Field Howard Schlossberg <howard@nospam.fmprosolutions.com> - 2018-10-21 18:15 -0700
    Re: Scripting: Putting the Cursor into a Specific Field csampson@inetworld.net (Charles H. Sampson) - 2018-10-22 17:23 -0700

csiph-web