Many thanks for that.  It sounds exactly what my problem is.  I had an inkling something like that maybe required after finding something vaguely similar on another forum, but it was dealing with Delphi DLL's.  It said to call Application.HandleMessage for the DLL from within the main EXE's Application.OnIdle.
 
Carl on this list gave me the code to do selective message queue processing a couple of weeks ago, for a different problem, which I didn't need to use in the end, but perhaps it will come in handy.
 
Just to fill you in a bit, the DLL's are 3rd party Winamp compatible DSP plugins.  Not written by Nullsoft (the makers of Winamp).  All functions and structures are publically published and standard for all the DSP DLL's.  I'm loading them in my player for processing audio.  The processing works fine, but not the tab key on non-modal forms.  Some DSP's use modal configuration forms and the tab key works fine for those.
 
After a couple of hours of trying various methods to process messages, it's not working.  There must be something fundamental that Winamp is doing that I need to do but don't know what.
 
There is no easy way to get the window handle of the form!  I had to do a FindWindow to find it based on the visible window title, which I have done for one DLL.  But Winamp doesn't know the name of the DLL form, so it can't be doing a findwindow, so I'm not sure I'm on the right track.
 
But if Winamp is doing it then it must be possible!
 
I get some messages processing for this window if I stop Windows doing it automatically, so it has found the correct window, but Windows appears to be processing all the messages that are in the queue anyway.
 
The fact that the Windows default beep occurs when pressing the key would suggest that no message is going anywhere, doesn't it?
 
I've used PeekMessage along with IsDialogMessage which I think is correct.  I've also tried TranslateMessage/DispatchMessage with no luck.
 
I don't suppose anyone else has any further ideas before I give my blind users the bad news.
 
Thanks,
Ross.
----- Original Message -----
Sent: Thursday, August 03, 2006 5:33 PM
Subject: Re: [DUG] DLL Forms

Dear Ross,
 
Here is an answer that Peter Below made years ago to a simillar question.
Not exactly the same as your description but may help.
 
Paul
-------
 
> I have a dll that shows a form. When I show the form using ShowModal, tab > works fine (to go through all the controls). When I just use show (instead > of showmodal), I lose the ability to use the tab key (I can press tab but it > never moves to the next control). Am I doing something wrong? Well, you use a non-modal window in a DLL <g>. The major problem with non-modal windows is that they depend on the applications message loop for sustenance. Things like navigation between controls on a modal dialog are implemented in a typical Windows app by calling the IsDialogMessage API function as part of the message loop code. But this function requires the handle of the non-modal dialog, so the apps usually have to make sure that the message loop code can always get at the window handle of the currently active nonmodal dialog (this can get grossly complex and always requires active participation of the dialog). This scheme has no chance of working if the dialog in question is not even part of the application and even less if it's not even a dialog but a Delphi form. Peter Below (TeamB) [EMAIL PROTECTED]) No replies in private e-mail, please, unless explicitly requested!


On 30/07/06, Ross Levis <[EMAIL PROTECTED]> wrote:
I've got a more serious problem I hope someone can help me with.

I'm loading some 3rd party C++ DLL's from my Delphi app.  Most of these
DLL's have a configuration form.

Some blind users have just pointed out that the tab key is not working
in the DLL forms.  This is a major problem for blind users who reply on
it for navigation.  All other keys including the arrow keys appear to
work fine.

Other applications that load the same DLL's do not have this problem.

I'm assuming my app is taking over the tab key even when the DLL form
has the focus.  Is there a simple method to allow get around this?

Many thanks,
Ross.

_______________________________________________
Delphi mailing list
Delphi@ns3.123.co.nz
http://ns3.123.co.nz/mailman/listinfo/delphi


_______________________________________________
Delphi mailing list
Delphi@ns3.123.co.nz
http://ns3.123.co.nz/mailman/listinfo/delphi
_______________________________________________
Delphi mailing list
Delphi@ns3.123.co.nz
http://ns3.123.co.nz/mailman/listinfo/delphi

Reply via email to