- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I often write a single callback routine that handles all the callback events for windows dialog box. The net result is that in the dialog initialisation code I need to have multiple calls to DLGSETSUB for each control (or define an integer array or all the control ID's and loop over it doing dlgsetsub). It would be a nice feature that would save coding that as well as DLGSETSUB we had DLGSETDEFAULTSUB (or another suitable name) that defined a defualt callback for ALL control ID's for the dialog that were not otherwise defined.
I think this would be quite easy to do as the private dlg structure of IFLOGM has a list of all the valid ID's for the dialog after DLGINIT.
If it is possible to do this already by some means it would be useful helpful if someone could advise.
Thanks
Andrew
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
You could write your own subroutine to do this and pass any array of control IDs defining those that are to be assigned call back. There are several "user defined" extensions that you might want to add to the standard iflogm module features. I have created a wrapper module which contains dozens of additional routines relating to dialog boxes. e.g.
module MyIflogm
use iflogm
contains
subroutine dlg_MultiSetSub(dlg,n,idc,callback)
! Arguments
type(DIALOG) :: dlg
integer,intent(in) :: n
integer,intent(in) :: idcs(n)
external :: callback
! Add code here
end subroutine
end module
Instead of passing the control ids via an argument the ids could be retrieved from the Dlg%list(..)%id if you wanted all controls assigned to the callback.
Simply add "use MyIflogm" in place of "use iflogm" in your programs.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Thanks for the reply Stephen. Looking at it further you should be able to do something like the quick test I made below:
[fortran]subroutine test_set_all_dlg_controls(dlg)
use iflogm, only : dialog, dlgsetsub
implicit none
TYPE (DIALOG) :: dlg
logical(4) :: retl4
integer :: l1
external :: FRIC_CB
do l1=1,dlg%NumControls
retl4=dlgsetsub (dlg,dlg%list(l1)%id,FRIC_CB)
enddo
end subroutine test_set_all_dlg_controls[/fortran]
However, it 'works' but it shoudn't work as the dialog%list should be private I thought? I think I will leave well alone until I fully understand all the ramifications and 'unforseen consequences'.
I also noticed when browsing IFLOGM a few minutes back that when dlginit is called the control callbacks are all initialised to a couple of default do nothing routines one for button conrols and one for other controls.....

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page