View previous topic :: View next topic |
Author |
Message |
WidgetCoder Contributor
Joined: 28 May 2002 Posts: 126 Location: CO, USA
|
Posted: Thu Apr 20, 2006 8:25 pm Post subject: DynPos.DSU |
|
|
DynPos.dsu v0.99 Freeware Beta
Requirements: VDS v5.*
This unit will dynamically position and/or re-size dialog elements while the window is being sized manually via mouse. Unlike VDS's "Resize" event which waits until the mouse button has been release this DSU will automatically manage elements while the window is changing size.
The work of positioning/re-sizing elements is carried out on a separate thread which runs independently from your main program. This is done for two reasons: 1. VDS's v5.x runtime halts script execution while a dialog is being re-sized, which could theoretically be overridden with the "Option MsgEvent" using the "Handled" parameter however that could yield some unexpected results. 2. By using a separate process the work is divided allowing the main script to focus on its intended purpose.
This beta is being released for the purpose of testing and as such the pos/resize refresh rate has been fixed to a very conservative rate. Future releases will offer the option of changing the refresh rate at runtime to allow further performance or appearance optimization.
Please report any bugs here.. Enjoy
V4 Download Link as of 9/3/2014:
https://eckles.net:5001/fbsharing/vtB1EBYp
Last edited by WidgetCoder on Wed Sep 03, 2014 9:26 pm; edited 4 times in total |
|
Back to top |
|
|
Aslan Valued Contributor
Joined: 31 May 2001 Posts: 589 Location: Memphis, TN USA
|
Posted: Fri Apr 21, 2006 11:12 pm Post subject: |
|
|
Nice DSU WidgetCoder
I was wondering if you can add the capability based on percentage of the window metrics or can have an arithmetic based option.
For example, I have an app that has two tables stacked one below the other were the bottom table's top attribute is always 20 pixels below the bottom of the of the upper table and the bottom is 20 pixels above the bottom of the window and the upper table's height is 1/2 window height minus 20 pixels.
Here's another example:
Code: |
:RESIZE
%w = @dlgpos(,W)
%h = @dlgpos(,H)
DIALOG SETPOS,QUERY,103,130,@sum(%W,-136),@sum(%H,-357)
DIALOG SETPOS,SubQUERY,@sum(%H,-250),130,@sum(%W,-136),200
|
I hope that made sense
|
|
Back to top |
|
|
WidgetCoder Contributor
Joined: 28 May 2002 Posts: 126 Location: CO, USA
|
Posted: Sat Apr 22, 2006 12:19 am Post subject: |
|
|
Aslan wrote: |
Code: |
:RESIZE
%w = @dlgpos(,W)
%h = @dlgpos(,H)
DIALOG SETPOS,QUERY,103,130,@sum(%W,-136),@sum(%H,-357)
DIALOG SETPOS,SubQUERY,@sum(%H,-250),130,@sum(%W,-136),200
|
|
The corresponding DynPos code would be:
Code: |
Dynpos Add,QUERY,WH
DynPos Add,SubQUERY,TW
|
|
|
Back to top |
|
|
WidgetCoder Contributor
Joined: 28 May 2002 Posts: 126 Location: CO, USA
|
Posted: Sat Apr 22, 2006 2:17 am Post subject: Updated DynPos.DSU + Source Code |
|
|
v1.1 w/source
Changes:
1. Addressed a major bug which would allow more than one instance of the helper process for a given window to be launched causing the CPU usage to jump. The process now checks to see if the window is already being managed and if so quits.
2. The helper process now runs from a hidden file
3. Increased the resize refresh rate with no measurable impact on the CPU’s usage.
I’ve included the source code incase anyone would like to tinker with it. The readme file in the source folder explains an alternate method of using this code which will drastically reduce your final EXE’s file size. If you make any improvements to code please post it for the rest of us. Thank you..
V4 Download Link as of 9/3/2014:
https://eckles.net:5001/fbsharing/vtB1EBYp
Last edited by WidgetCoder on Wed Sep 03, 2014 9:27 pm; edited 3 times in total |
|
Back to top |
|
|
LiquidCode Moderator Team
Joined: 05 Dec 2000 Posts: 1751 Location: Space and Time
|
Posted: Sun Apr 23, 2006 4:35 am Post subject: |
|
|
This is great!!! Love it!!! Great Job..
_________________ Chris
Http://theblindhouse.com |
|
Back to top |
|
|
Skit3000 Admin Team
Joined: 11 May 2002 Posts: 2166 Location: The Netherlands
|
|
Back to top |
|
|
WidgetCoder Contributor
Joined: 28 May 2002 Posts: 126 Location: CO, USA
|
Posted: Sun Apr 23, 2006 6:27 pm Post subject: |
|
|
Thanks guys
|
|
Back to top |
|
|
uvedese Contributor
Joined: 21 Jan 2006 Posts: 169 Location: Spain
|
Posted: Sun Apr 23, 2006 6:42 pm Post subject: |
|
|
Great Job and an excellent idea.
I'm working that using a different structure of data entry that it allows to place elements in positions relative to others and percentage to width and height.
When this ready one I upload code.
very good work
|
|
Back to top |
|
|
WidgetCoder Contributor
Joined: 28 May 2002 Posts: 126 Location: CO, USA
|
Posted: Mon Apr 24, 2006 7:10 pm Post subject: |
|
|
uvedese wrote: |
When this ready one I upload code.
|
Please do I'll look forward it..
Hopefully VDS v6 will offer some form of dynamic element resizing. Although I fear I'll be too old to care by the time it's finally released.
|
|
Back to top |
|
|
uvedese Contributor
Joined: 21 Jan 2006 Posts: 169 Location: Spain
|
Posted: Sun Apr 30, 2006 12:20 pm Post subject: |
|
|
Hello WidgetCoder
Here it presents/displays my solution to the problem: ResizeDSU.dsu.
It does not have the advantages of your version but it implements possibilities such as: position relative to two elements in vertical and horizontal and percentage horizontal and vertical position.
With your permission I will raise ResizeDSU.dsu in my Web. I thank for your shining idea. Good work again
__________________
uVeDeSe
visit: http://www.uvedese.es
Last edited by uvedese on Wed Apr 02, 2008 8:51 pm; edited 1 time in total |
|
Back to top |
|
|
uvedese Contributor
Joined: 21 Jan 2006 Posts: 169 Location: Spain
|
|
Back to top |
|
|
WidgetCoder Contributor
Joined: 28 May 2002 Posts: 126 Location: CO, USA
|
Posted: Mon May 01, 2006 5:28 am Post subject: |
|
|
uVeDeSe – That’s an interesting approach, nice code.
I experimented with a fairly similar approach in the DLL version of DynPos that I’ve been playing with. However I found that when you resize an element by its relational proportions to another element a dependency is created that prohibits the removal one element without the other. Not a big deal but you never know what someone will do with it.
The method I’m working on now would only require the user to identify how many stacked or side/side elements are being resized together in the same direction. This will allow two or more elements to be resized and/or positioned without creating any dependencies within the controlling list. The syntax will be very similar to DynPos.dsu’s “Add’ command but with the following differences: 1. The flags “TLWH” could be followed by a number indicating the number of elements being positioned in relation i.e.: “W2H” (2 side/side) “WH3” (3 stacked). 2. T-H or L-W will no longer be mutually exclusive so any flag combination could be used. Hopefully I'll get some free time this week to complete and post it.
|
|
Back to top |
|
|
uvedese Contributor
Joined: 21 Jan 2006 Posts: 169 Location: Spain
|
Posted: Mon May 01, 2006 5:08 pm Post subject: |
|
|
Hi WidgetCoder:
I understand the limitations that you comment to me.
I will add some new possibilities to my version to replace the problems: to modify parameters and to clear elements.
I wait for your new version of DynPos.dsu
|
|
Back to top |
|
|
jwfv Valued Contributor
Joined: 19 Mar 2002 Posts: 422 Location: Beaufort, SC
|
Posted: Fri Dec 01, 2006 6:20 pm Post subject: |
|
|
Does DynPos work with the Browser element in VDS? I have tested it but did not have any luck getting it to resize the browser element on my dialog. It resized other elements fine.
_________________ Joe Floyd |
|
Back to top |
|
|
WidgetCoder Contributor
Joined: 28 May 2002 Posts: 126 Location: CO, USA
|
Posted: Fri Dec 22, 2006 6:53 pm Post subject: |
|
|
jwfv wrote: | Does DynPos work with the Browser element in VDS? I have tested it but did not have any luck getting it to resize the browser element on my dialog. It resized other elements fine. |
I apologize for my slow response, the old version posted here will not control the browser element. This version uses "@winexists(~ElementName)" to obtain the window IDs which doesn't work for the browser window. The browser element actually places three nested windows on the dialog (CLASS: #Shell Embedding, .#Shell DocObject View, ..#Internet Explorer_Server). In order for the "Window Position" command to work on the browser you need to use the outer window's ID. The best way I have found to accurately obtain its ID is quite complex: 1. Compare @dlgpos and @winpos of the main dialog to obtain the Non-Client window border size. 2. Obtain the browser's position on the form with @dlgpos add the window offset and NC window size. 3. Use @WinAtPoint which will obtain an ID from one of the browser's child windows. 4. Create a list of the main form's child windows using @window(MainWin,Child)...NEXT... repeat on each returned window on the list until you find the window ID that matches your @winatpoint result. 5. Back down the tree from there until you find a window class that matches "#Shell Embedding" and use its ID for positioning. It can be done in VDS it's just a pain in the arsh...
I'm waiting for VDS6 to be published before I update the code in case the new version has a similar feature built-in. The updated DynPos will have the ability to control the browser and other external elements. Also it will be a DLL/DSU combination to avoid any Vista security concerns of using drop-files.
|
|
Back to top |
|
|
|