View previous topic :: View next topic |
Author |
Message |
jwfv Valued Contributor
Joined: 19 Mar 2002 Posts: 422 Location: Beaufort, SC
|
Posted: Fri Feb 25, 2005 1:47 pm Post subject: True MDI |
|
|
Is it possible to add true MDI capability into VDS? I have read the threads that attempt to accomplish it with workarounds.
MDI - for those that aren't familiar:
http://en.wikipedia.org/wiki/Multiple_Document_Interface _________________ Joe Floyd |
|
Back to top |
|
|
Skit3000 Admin Team
Joined: 11 May 2002 Posts: 2166 Location: The Netherlands
|
Posted: Fri Feb 25, 2005 3:57 pm Post subject: |
|
|
I know this isn't a real MDI window, but it comes close...
Code: | #define command,mdi-dialog
#define function,mdi-dialog
option decimalsep,.
DIALOG CREATE,MyEditorWindow,-1,0,554,413
REM *** Gewijzigd door de Dialoog Ontwerper op 25-2-2005 - 16:30 ***
DIALOG ADD,MENU,File
DIALOG ADD,MENU,Edit
DIALOG ADD,MENU,Help
DIALOG ADD,STATUS,STATUS1,STATUS1
DIALOG ADD,LINE,LINE1,0,0,554,40
DIALOG ADD,COMBO,COMBO1,10,7,180,21,,,LIST
DIALOG ADD,BUTTON,bMAX,11,191,64,20,Max
DIALOG ADD,BUTTON,bMIN,11,259,64,20,Min
DIALOG ADD,BUTTON,bNORMAL,11,327,64,20,Normal
DIALOG ADD,BUTTON,bACTIVATE,11,395,64,20,Activate
DIALOG ADD,BUTTON,bDETACH,11,395,64,20,Detach
DIALOG SHOW
# Create the MDI parent window by specifying the x and y positions. The second
# parameter is the name of the window in which it should create the MDI window.
# By using the @dlgtext() function to get the name of the last created window.
%%MdiParent = @mdi-dialog(create,@dlgtext(),40,0,554,354,COLOR 80FF00)
# Create a list to keep track of all windows added.
list create,1
# Just create a window.
DIALOG CREATE,Unnamed1.txt,0,0,240,160,RESIZABLE,COLOR FF8000
# With the @mdi-dialog() function you can add the window to the MDI
# parent window. Be sure to save the output to a list, so you can
# keep track on it...
list add,1,@dlgtext()|@mdi-dialog(attach,%%MdiParent,@dlgtext())
DIALOG SHOW
DIALOG CREATE,Unnamed2.txt,20,20,240,160,RESIZABLE,COLOR F8F000
list add,1,@dlgtext()|@mdi-dialog(attach,%%MdiParent,@dlgtext())
DIALOG SHOW
DIALOG CREATE,Unnamed3.txt,40,40,240,160,RESIZABLE,COLOR 8800FF
list add,1,@dlgtext()|@mdi-dialog(attach,%%MdiParent,@dlgtext())
DIALOG SHOW
# Select the first dialog again and put the names/ID's of the child
# windows into COMBO1.
dialog select,0
list assign,COMBO1,1
list seek,COMBO1,0
:Evloop
wait event,0.1
parse "%%Event;%%EventDialog",@event(d)
goto %%Event
:Timer
# Look if the current window is a child of the main window. If so,
# update the COMBO1 element.
if @greater(@pos(@winactive(),@text(COMBO1)),0)
list seek,COMBO1,0
%%Temp = @match(COMBO1,@winactive())
end
goto Evloop
:Resize
goto Evloop
:bMaxBUTTON
# Maximize the selected window.
parse "%%DialogName;%%DialogID",@dlgtext(combo1)
window maximize,%%DialogID
goto Evloop
:bMinBUTTON
# Minimize (iconize) the selected window.
parse "%%DialogName;%%DialogID",@dlgtext(combo1)
window iconize,%%DialogID
goto Evloop
:bNormalBUTTON
# Restore the selected window.
parse "%%DialogName;%%DialogID",@dlgtext(combo1)
window normal,%%DialogID
goto Evloop
:bActivateBUTTON
# Put the selected window on top.
parse "%%DialogName;%%DialogID",@dlgtext(combo1)
window activate,%%DialogID
goto Evloop
:bDetachBUTTON
parse "%%DialogName;%%DialogID",@dlgtext(combo1)
loadlib user32
%3 = @strdel(@winexists(%%DialogID),1,1)
%z = @lib(user32,SetParent,INT:,INT:%3,0)
freelib user32
goto Evloop
:Close
if @greater(%%EventDialog,0)
# Only close this child window.
dialog select,%%EventDialog
dialog close
# Filter out all unwanted CLOSE events.
while @event()
wend
goto Evloop
else
# Close the whole program.
stop
end
:mdi-dialog
if @equal(%1,CREATE)
# @mdi-dialog(create, <parentname>, <top>, <left>, <width>, <height>, <styles>, <...>)
dialog create,%2CLIENTAREA,%3,%4,%5,%6,NOTITLE,%7,%8,%9
%9 = @strdel(@winexists(%2CLIENTAREA),1,1)
loadlib user32
%z = @lib(user32,SetParent,INT:,INT:@strdel(@winexists(%2CLIENTAREA),1,1),INT:@strdel(@winexists(%2),1,1))
freelib user32
dialog show
exit %9
end
if @equal(%1,ATTACH)
# @mdi-dialog(attach, <parentname>, <childname>)
loadlib user32
%3 = @strdel(@winexists(%3),1,1)
%z = @lib(user32,SetParent,INT:,INT:%3,INT:%2)
freelib user32
exit "%"%3
end
if @equal(%1,DETACH)
# @mdi-dialog(detach, <windowname>)
loadlib user32
%z = @lib(user32,SetParent,INT:,INT:@strdel(%2,1,1),0)
freelib user32
end
exit |
_________________ [ Add autocomplete functionality to your VDS IDE windows! ]
Voor Nederlandse beginners met VDS: bekijk ook eens deze tutorial! |
|
Back to top |
|
|
jules Professional Member
Joined: 14 Sep 2001 Posts: 1043 Location: Cumbria, UK
|
Posted: Fri Feb 25, 2005 4:25 pm Post subject: |
|
|
I thought MDI was deprecated by Microsoft a long time ago in favour of separate windows. Personally I loathe it.
I don't think the structure of the VDS language itself would be capable of handling the complexity of an MDI application. But the real killer is that MDI in Delphi starts from a different base from the plain window/dialog that VDS uses. The only way it could be done would be to develop a completely new MDI runtime. _________________ The Tech Pro
www.tech-pro.net |
|
Back to top |
|
|
bbelcher Contributor
Joined: 30 Jul 2002 Posts: 172
|
Posted: Fri Feb 25, 2005 4:30 pm Post subject: |
|
|
Nice, I like the possibilities |
|
Back to top |
|
|
jwfv Valued Contributor
Joined: 19 Mar 2002 Posts: 422 Location: Beaufort, SC
|
Posted: Fri Feb 25, 2005 5:24 pm Post subject: |
|
|
Jules: that's what I was afraid of - that MDI required a different ground-up approach.
Skit: Nice code! It is awfully close to what I was talking about. I plan to study it a little bit to follow what exactly is going on. _________________ Joe Floyd |
|
Back to top |
|
|
ShinobiSoft Professional Member
Joined: 06 Nov 2002 Posts: 790 Location: Knoxville, Tn
|
Posted: Fri Feb 25, 2005 10:46 pm Post subject: |
|
|
jules wrote: | I thought MDI was deprecated by Microsoft a long time ago in favour of separate windows. Personally I loathe it.
I don't think the structure of the VDS language itself would be capable of handling the complexity of an MDI application. But the real killer is that MDI in Delphi starts from a different base from the plain window/dialog that VDS uses. The only way it could be done would be to develop a completely new MDI runtime. |
I've tinkered around with writing an extension for adding MDI support to
VDS and found, as Jules mentioned, that the way that VDS handles
messages is not appropriate for the MDI. I did come up with a work
around that I use personally, but I must also create a normal window
and manually process the appropriate messages myself, along with also
providing code for for dealing with menus, capturing events, etc. We then
venture into another small problem, adding controls to a mdi child window.
And then there's debugging the script. VDS will debug the script, but some
of the messages that the MDI frame window is supposed to reveive are
sent to the VDS IDE instead. Mostly WM_SYSCOMMAND messages I've
noticed. _________________ Bill Weckel
ShinobiSoft Software
"The way is known to all, but not all know it." |
|
Back to top |
|
|
jwfv Valued Contributor
Joined: 19 Mar 2002 Posts: 422 Location: Beaufort, SC
|
Posted: Mon Feb 28, 2005 5:01 pm Post subject: |
|
|
Skit - is it possible, using your example, to place an outside program's window into the VDS dialog? I tried a couple of things to change which open window your example "attached" to the dialog, but had no luck. For instance, if I am running a program with a window that is called "test.exe", is it possible to attach it to the dialog like you did with the VDS-created windows? _________________ Joe Floyd |
|
Back to top |
|
|
Skit3000 Admin Team
Joined: 11 May 2002 Posts: 2166 Location: The Netherlands
|
|
Back to top |
|
|
jwfv Valued Contributor
Joined: 19 Mar 2002 Posts: 422 Location: Beaufort, SC
|
Posted: Mon Feb 28, 2005 7:35 pm Post subject: |
|
|
It worked! Really Cool! _________________ Joe Floyd |
|
Back to top |
|
|
bbelcher Contributor
Joined: 30 Jul 2002 Posts: 172
|
Posted: Mon Feb 28, 2005 8:36 pm Post subject: |
|
|
jwfv, could you post where you added the new code.
%%Temp = @mdi-dialog(attach,%%MdiParent,"test.exe")
Thanks. |
|
Back to top |
|
|
jwfv Valued Contributor
Joined: 19 Mar 2002 Posts: 422 Location: Beaufort, SC
|
Posted: Tue Mar 01, 2005 12:45 am Post subject: |
|
|
For a quick test, I just replaced the code that created the third dialog window:
Code: | rem DIALOG CREATE,Unnamed3.txt,40,40,240,160,RESIZABLE,COLOR 8800FF
rem list add,1,@dlgtext()|@mdi-dialog(attach,%%MdiParent,@dlgtext())
rem DIALOG SHOW
list add,1,@dlgtext()|@mdi-dialog(attach,%%MdiParent,Test) |
Where
test is what is shown in the window of the program i want to include.
It didn't show up for me until I selected the third window in the combo list and told it to maximize. Then it worked well. _________________ Joe Floyd |
|
Back to top |
|
|
jwfv Valued Contributor
Joined: 19 Mar 2002 Posts: 422 Location: Beaufort, SC
|
Posted: Tue Mar 01, 2005 12:47 am Post subject: |
|
|
Skit - is it possible to resize the MDI parent window? Like in the event of a dialog Resize event. _________________ Joe Floyd |
|
Back to top |
|
|
Skit3000 Admin Team
Joined: 11 May 2002 Posts: 2166 Location: The Netherlands
|
Posted: Tue Mar 01, 2005 8:28 am Post subject: |
|
|
I guess you have to put something like this into the code:
Code: | :Resize
if @equal(%%EventDialog,0)
dialog select,0
window position,"%"%%MdiParent,,,@dlgpos(,w),@dlgpos(,h)
end
goto Evloop |
You should do some maths to calculate the exact width and height of the window... _________________ [ Add autocomplete functionality to your VDS IDE windows! ]
Voor Nederlandse beginners met VDS: bekijk ook eens deze tutorial! |
|
Back to top |
|
|
Estas Contributor
Joined: 31 Jan 2004 Posts: 66 Location: Germany
|
Posted: Sun Apr 30, 2006 8:07 pm Post subject: |
|
|
Hi,
I just came along this post, by accident. Wow - this really comes very close to real MDI. Very good workaround !!! _________________ Greetings to all the folks back home in the States. A friendly "hola -como estas" to all my friends from Spain and Greece. |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum You can attach files in this forum You can download files in this forum
|
|