Shrimp-freeware simple,but yet powerfull editor for freebasic and more...

Windows specific questions.
nastasa eodor
Posts: 182
Joined: Dec 18, 2018 16:37
Location: Germany, Hessdorf
Contact:

Shrimp-freeware simple,but yet powerfull editor for freebasic and more...

Post by nastasa eodor »

new simple but yet powerfull editor for freebasic. comes with plugin capabilities, writen in different programming languages... try it is freeware you can get it from here http://shrimpide.com/
nastasa eodor
Posts: 182
Joined: Dec 18, 2018 16:37
Location: Germany, Hessdorf
Contact:

Re: Shrimp-freeware simple,but yet powerfull editor for freebasic and more...

Post by nastasa eodor »

some bugs was corrected, like find,replace,activepage,etc
enjoy.
D.J.Peters
Posts: 8586
Joined: May 28, 2005 3:28
Contact:

Re: Shrimp-freeware simple,but yet powerfull editor for freebasic and more...

Post by D.J.Peters »

Your Logo reminds me on GamBAS for Linux :-)
Image
Joshy
nastasa eodor
Posts: 182
Joined: Dec 18, 2018 16:37
Location: Germany, Hessdorf
Contact:

Re: Shrimp-freeware simple,but yet powerfull editor for freebasic and more...

Post by nastasa eodor »

D.J.Peters wrote:Your Logo reminds me on GamBAS for Linux :-)
Image
Joshy
...nice...isin't?
nastasa eodor
Posts: 182
Joined: Dec 18, 2018 16:37
Location: Germany, Hessdorf
Contact:

Re: Shrimp-freeware simple,but yet powerfull editor for freebasic and more...

Post by nastasa eodor »

Shrimp was updated. Go to see the changes. http://shrimpide.com
Imortis
Moderator
Posts: 1926
Joined: Jun 02, 2005 15:10
Location: USA
Contact:

Re: Shrimp-freeware simple,but yet powerfull editor for freebasic and more...

Post by Imortis »

I finally got a chance to look at this. It shows promise. I did notice that the plugins won't compile with FBC 64bit. Also, since the plugins compile every time you launch the IDE, it can be a bit slow to load. Would it be possible to check the plugin code to see if it has changed since the last compile, and only compile as needed?
nastasa eodor
Posts: 182
Joined: Dec 18, 2018 16:37
Location: Germany, Hessdorf
Contact:

Re: Shrimp-freeware simple,but yet powerfull editor for freebasic and more...

Post by nastasa eodor »

Imortis wrote:I finally got a chance to look at this. It shows promise. I did notice that the plugins won't compile with FBC 64bit. Also, since the plugins compile every time you launch the IDE, it can be a bit slow to load. Would it be possible to check the plugin code to see if it has changed since the last compile, and only compile as needed?
Thank you for your feedback.
Okay i will made that modification, it is possible.
Also, please raport any bug you find it and/or any sugesstion to make.
Best Regards
nastasa eodor
Posts: 182
Joined: Dec 18, 2018 16:37
Location: Germany, Hessdorf
Contact:

Re: Shrimp-freeware simple,but yet powerfull editor for freebasic and more...

Post by nastasa eodor »

okay, i work to change designer... for 64bit version of freebasic, the last one. i get this message when i compiled dll.
i use windows 7 and for shrimp i use Delphi 7 (32bit version,in fact is only one...)

Code: Select all

FreeBASIC Compiler - Version 1.07.3 (2020-12-31), built for win64 (64bit)
Copyright (C) 2004-2019 The FreeBASIC development team.
standalone
target:       win64, x86-64, 64bit
compiling:    C:\Users\eodor\Desktop\shrimp_site\shrimp_source\Plugins\designer.fbp -o C:\Users\eodor\Desktop\shrimp_site\shrimp_source\Plugins\designer.c (main module)
C:\Users\eodor\Desktop\shrimp_site\shrimp_source\gui_wrapper\gui\kogaion_gui.bas(1898) warning 13(1): Function result was not explicitly set
C:\Users\eodor\Desktop\shrimp_site\shrimp_source\gui_wrapper\gui\kogaion_gui.bas(1901) warning 13(1): Function result was not explicitly set
C:\Users\eodor\Desktop\shrimp_site\shrimp_source\gui_wrapper\gui\kogaion_gui_standards.bas(999) warning 3(2): Passing different pointer types, at parameter 3 of GETSCROLLRANGE()
C:\Users\eodor\Desktop\shrimp_site\shrimp_source\gui_wrapper\gui\kogaion_gui_standards.bas(999) warning 3(2): Passing different pointer types, at parameter 4 of GETSCROLLRANGE()
C:\Users\eodor\Desktop\shrimp_site\shrimp_source\gui_wrapper\gui\kogaion_gui_standards.bas(1013) warning 3(2): Passing different pointer types, at parameter 3 of GETSCROLLRANGE()
C:\Users\eodor\Desktop\shrimp_site\shrimp_source\gui_wrapper\gui\kogaion_gui_standards.bas(1013) warning 3(2): Passing different pointer types, at parameter 4 of GETSCROLLRANGE()
compiling C:  C:\Program Files\FreeBASIC-1.07.3-win64\bin\win64\gcc.exe -m64 -march=x86-64 -S -nostdlib -nostdinc -Wall -Wno-unused-label -Wno-unused-function -Wno-unused-variable -Wno-unused-but-set-variable -Wno-main -Werror-implicit-function-declaration -O0 -fno-strict-aliasing -frounding-math -fno-math-errno -fwrapv -fno-exceptions -fno-unwind-tables -fno-asynchronous-unwind-tables -Wno-format -masm=intel "C:\Users\eodor\Desktop\shrimp_site\shrimp_source\Plugins\designer.c" -o "C:\Users\eodor\Desktop\shrimp_site\shrimp_source\Plugins\designer.asm"
C:\Users\eodor\Desktop\shrimp_site\shrimp_source\Plugins\designer.c: In function '_ZN7QOBJECT12REMOVEOBJECTEPS_':
C:\Users\eodor\Desktop\shrimp_site\shrimp_source\Plugins\designer.c:4952:8: warning: 'I$3' may be used uninitialized in this function [-Wmaybe-uninitialized]
    I$3 = I$3 + 1ll;
        ^
C:\Users\eodor\Desktop\shrimp_site\shrimp_source\Plugins\designer.c: In function '_ZN6QFRAME13REMOVECONTROLEPS_':
C:\Users\eodor\Desktop\shrimp_site\shrimp_source\Plugins\designer.c:6938:8: warning: 'I$3' may be used uninitialized in this function [-Wmaybe-uninitialized]
    I$3 = I$3 + 1ll;
        ^
assembling:   C:\Program Files\FreeBASIC-1.07.3-win64\bin\win64\as.exe --64 --strip-local-absolute "C:\Users\eodor\Desktop\shrimp_site\shrimp_source\Plugins\designer.asm" -o "C:\Users\eodor\Desktop\shrimp_site\shrimp_source\Plugins\designer.o"
linking:      C:\Program Files\FreeBASIC-1.07.3-win64\bin\win64\ld.exe -m i386pep -o "C:\Users\eodor\Desktop\shrimp_site\shrimp_source\Plugins\designer.dll" -subsystem console --dll --enable-stdcall-fixup -e DllMainCRTStartup "C:\Program Files\FreeBASIC-1.07.3-win64\lib\win64\fbextra.x" --stack 1048576,1048576 --output-def "C:\Users\eodor\Desktop\shrimp_site\shrimp_source\Plugins\designer.def" -s -L "C:\Program Files\FreeBASIC-1.07.3-win64\lib\win64" -L "." "C:\Program Files\FreeBASIC-1.07.3-win64\lib\win64\dllcrt2.o" "C:\Program Files\FreeBASIC-1.07.3-win64\lib\win64\crtbegin.o" "C:\Program Files\FreeBASIC-1.07.3-win64\lib\win64\fbrt0.o" "C:\Users\eodor\Desktop\shrimp_site\shrimp_source\Plugins\designer.o" "-(" -lkernel32 -lgdi32 -lmsimg32 -luser32 -lversion -ladvapi32 -limm32 -lcomctl32 -lfb -lgcc -lmsvcrt -lmingw32 -lmingwex -lmoldname -lgcc_eh "-)" "C:\Program Files\FreeBASIC-1.07.3-win64\lib\win64\crtend.o" 
creating import library:    C:\Program Files\FreeBASIC-1.07.3-win64\bin\win64\dlltool.exe --def "C:\Users\eodor\Desktop\shrimp_site\shrimp_source\Plugins\designer.def" --dllname "designer.dll" --output-lib "C:\Users\eodor\Desktop\shrimp_site\shrimp_source\Plugins\libdesigner.dll.a"
also note i defined a 64bit versio of w_frame(..) definition like w64_frame(...)

and so on to rest of definitions, i use GrtWindowLongPtr instead of GetWindowLong, and so one...for the rest of plane functions...
so finally i manage to compile it, but SINCE THE SHRIMP WAS COMPILED AS 32BIT...
srvaldez
Posts: 3383
Joined: Sep 25, 2005 21:54

Re: Shrimp-freeware simple,but yet powerfull editor for freebasic and more...

Post by srvaldez »

couldn't you use freePascal to build the dll to 64-bit ?
Imortis
Moderator
Posts: 1926
Joined: Jun 02, 2005 15:10
Location: USA
Contact:

Re: Shrimp-freeware simple,but yet powerfull editor for freebasic and more...

Post by Imortis »

nastasa eodor wrote:...so finally i manage to compile it, but SINCE THE SHRIMP WAS COMPILED AS 32BIT...

I had wondered about that. Would it be possible to add a path for both the 32bit and 64bit compiler versions? That way the user can compile with either one, and the IDE can always compile the plugins with 32bit. That would be the simplest for the user. Might be a bit of a pain for the IDE developer though.
nastasa eodor
Posts: 182
Joined: Dec 18, 2018 16:37
Location: Germany, Hessdorf
Contact:

Re: Shrimp-freeware simple,but yet powerfull editor for freebasic and more...

Post by nastasa eodor »

Imortis wrote:
nastasa eodor wrote:...so finally i manage to compile it, but SINCE THE SHRIMP WAS COMPILED AS 32BIT...

I had wondered about that. Would it be possible to add a path for both the 32bit and 64bit compiler versions? That way the user can compile with either one, and the IDE can always compile the plugins with 32bit. That would be the simplest for the user. Might be a bit of a pain for the IDE developer though.
yes i will add this feature for the user in the next build version. thanks for you advices.
nastasa eodor
Posts: 182
Joined: Dec 18, 2018 16:37
Location: Germany, Hessdorf
Contact:

Re: Shrimp-freeware simple,but yet powerfull editor for freebasic and more...

Post by nastasa eodor »

the limitation was solved (in a test program), it will come changed soon. meantime look at:
http://shrimpide.com/images/Animation_1.gif
http://shrimpide.com/images/Animation.gif
nastasa eodor
Posts: 182
Joined: Dec 18, 2018 16:37
Location: Germany, Hessdorf
Contact:

Re: Shrimp-freeware simple,but yet powerfull editor for freebasic and more...

Post by nastasa eodor »

shrimp was updated,now can compile and run bot versions,32 and 64bit too. also source code was updated .
nastasa eodor
Posts: 182
Joined: Dec 18, 2018 16:37
Location: Germany, Hessdorf
Contact:

Re: Shrimp-freeware simple,but yet powerfull editor for freebasic and more...

Post by nastasa eodor »

srvaldez wrote:couldn't you use freePascal to build the dll to 64-bit ?
yes, it is possible. the future consideration of this.
nastasa eodor
Posts: 182
Joined: Dec 18, 2018 16:37
Location: Germany, Hessdorf
Contact:

Re: Shrimp-freeware simple,but yet powerfull editor for freebasic and more...

Post by nastasa eodor »

finally i manage to get a prototipe code who working in both version of freebasic 32 or 64bit. see here:

Code: Select all

#include once "windows.bi"

#define instance GetModuleHandle(0)

type PControl as TControl ptr

common shared as PControl creationData

type TMessage
     as hwnd dlg
     as uint msg
     as wparam wparam
     as lparam lparam
     as lresult result
     as PControl sender,mdiclient
end type

type TControl extends object
    protected:
    declare abstract sub Dispatch(byref as TMessage)
    declare abstract sub Handler(byref as TMessage)
    declare abstract sub CreateHandle
    as integer fexstyle,fstyle,fx,fy,fcx,fcy,fid,fenabled,fvisible
    as string ftext
    as hwnd fhandle
    as PControl fparent
    public:
    as string classname,classancestor
    declare abstract sub Free
    declare property Parent as PControl
    declare property Parent (as PControl)
    declare property Style as integer
    declare property Style (as integer)
    declare property ExStyle as integer
    declare property ExStyle (as integer)
    declare property Handle as hwnd
    declare property Handle (as hwnd)
    declare abstract operator cast as any ptr
    declare constructor
end type

type MDIClient extends TControl
    protected:
    declare virtual sub CreateHandle
    declare virtual sub Dispatch(byref as TMessage)
    declare virtual sub Handler(byref as TMessage)
    declare static function wndproc(dlg as hwnd,msg as uint,wpoaram as wparam,lparam as lparam) as lresult
    public:
    declare virtual sub Free
    declare static function Register as integer
    declare virtual operator cast as any ptr
    declare constructor
end type

enum FormStyles
    fsNormal,fsStayTop,fsMDIClient,fsMDIChild
end enum

type Form extends TControl
    protected:
    as FormStyles fformstyle
    declare virtual sub CreateHandle
    declare virtual sub Dispatch(byref as TMessage)
    declare virtual sub Handler(byref as TMessage)
    declare static function wndproc(dlg as hwnd,msg as uint,wpoaram as wparam,lparam as lparam) as lresult
    public:
    as MDIClient ptr MDIClient
    declare property FormStyle as FormStyles
    declare property FormStyle (as FormStyles)
    declare virtual sub Free
    declare static function Register as integer
    declare virtual operator cast as any ptr
    declare constructor
end type

type Button extends TControl
    protected:
    declare static function wndproc(dlg as hwnd,msg as uint,wpoaram as wparam,lparam as lparam) as lresult
    declare virtual sub CreateHandle
    declare virtual sub Dispatch(byref as TMessage)
    declare virtual sub Handler(byref as TMessage)
    public:
    declare static function Register as integer
    declare virtual sub Free
    declare virtual operator cast as any ptr
    declare constructor
end type

property TControl.Parent as PControl
    return fparent
end property

property TControl.Parent (v as PControl)
    dim as PControl saved=fparent
    fparent=v
    if isWindow(fhandle) then
       SetParent(fhandle,iif(fparent,fparent->fhandle,0))
    else
       createhandle :? "le=",CLASSNAME,getlasterror,fhandle
    end if
end property

property TControl.Style as integer
    return fstyle
end property

property TControl.Style (v as integer)
    fstyle=v
    if isWindow(fhandle) then
       SetWindowLongPtr(fhandle,gwl_style,v)
       SetWindowPos(fhandle,0,0,0,0,0,swp_nozorder or swp_noactivate or swp_nosize or swp_nomove or swp_framechanged)
       updateWindow(fhandle)
    end if
end property

property TControl.ExStyle as integer
    return fexstyle
end property

property TControl.ExStyle (v as integer)
    fexstyle=v
    if isWindow(fhandle) then
       ? SetWindowLongPtr(fhandle,gwl_exstyle,v)
       SetWindowPos(fhandle,0,0,0,0,0,swp_nozorder or swp_noactivate or swp_nosize or swp_nomove or swp_framechanged)
       updateWindow(fhandle)
    end if
end property

property TControl.Handle as hwnd
    return fhandle
end property

property TControl.Handle (v as hwnd)
end property

constructor TControl
    fvisible=1
    fenabled=1
end constructor

/'  MDIClient '/
function MDIClient.wndproc(dlg as hwnd,msg as uint,wparam as wparam,lparam as lparam) as lresult
    dim as PControl sender=iif(creationdata,creationdata,cast(PControl,GetWindowLongPtr(dlg,GetClassLongPtr(dlg,gcl_cbwndextra)-sizeof(integer))))
    dim as TMessage m=type(dlg,msg,wparam,lparam,0,sender)
    if sender then
       sender->fhandle=dlg
       sender->Dispatch(m)
       sender->Handler(m)
       return m.result
    else
       sender=new MDIClient  '''automation
       sender->fhandle=dlg
       sender->Dispatch(m)
       sender->Handler(m)
       return m.result
    end if
    return m.result
end function

function MDIClient.Register as integer
    dim as wndclassex wcls
    wcls.cbsize=sizeof(wcls)
    if GetClassInfoEx(0,"MDIClient",@wcls) then
       wcls.hinstance=instance
       wcls.lpszclassname=@"MDIClient"
       wcls.lpfnwndproc=@wndproc
       wcls.cbwndextra+=sizeof(integer) :?  wcls.cbwndextra,sizeof(integer)
       return RegisterClassEx(@wcls)
    end if
end function

sub MDIClient.CreateHandle
    creationdata=this
    dim as clientcreatestruct ccs
    ccs.idfirstchild=&hff00
    ccs.hwindowmenu=0
    CreateWindowEx(fexstyle,classname,ftext,fstyle,fx,fy,fcx,fcy,iif(fparent,fparent->fhandle,0),cast(hmenu,fid),instance,@ccs)
    if isWindow(fhandle) then
       SetParent(fhandle,iif(fparent,fparent->fhandle,0))
       ShowWindow(fhandle,iif(fvisible,sw_show,sw_hide))
    end if
end sub

sub MDIClient.Dispatch(byref m as TMessage)
    select case m.msg
    case wm_nccreate
         setwindowlongptr(m.dlg,getclasslongptr(m.dlg,gcl_cbwndextra)-sizeof(integer),cint(creationdata))
         creationdata=0
    case wm_create
    end select
end sub

sub MDIClient.Handler(byref m as TMessage)
    dim as wndclassex wcls
    wcls.cbsize=sizeof(wcls)
    if GetClassInfoEx(0,"MDIClient",@wcls) then m.result=CallWindowProc(wcls.lpfnwndproc,m.dlg,m.msg,m.wparam,m.lparam)
end sub

sub MDIClient.Free
    if isWindow(fhandle) then
       destroyWindow(fhandle)
       fhandle=0
    end if
end sub

operator MDIClient.cast as any ptr
    return @this
end operator

constructor MDIClient
    fstyle=mdis_allchildstyles or ws_childwindow or ws_hscroll or ws_vscroll
    fcx=cw_usedefault
    fcy=cw_usedefault
    classname="MDIClient"
    classancestor="MDIClient"
    fid=&hff00
end constructor

/' Form '/
function Form.Register as integer
    dim as wndclassex wcls
    wcls.cbsize=sizeof(wcls)
       wcls.hinstance=instance
       wcls.lpszclassname=@"Form"
       wcls.lpfnwndproc=@wndproc
       wcls.hcursor=LoadCursor(0,idc_arrow)
       wcls.hbrbackground=cast(hbrush,16)
       wcls.cbwndextra+=sizeof(integer) :?  wcls.cbwndextra
       return RegisterClassEx(@wcls)
end function

sub Form.CreateHandle
    creationdata=this
    CreateWindowEx(fexstyle,classname,ftext,fstyle,fx,fy,fcx,fcy,iif(fparent,fparent->fhandle,0),0,instance,0)
    if isWindow(fhandle) then
       ShowWindow(fhandle,iif(fvisible,sw_show,sw_hide))
    end if
end sub

sub Form.Dispatch(byref m as TMessage)
    select case m.msg
    case wm_nccreate
         setwindowlongptr(m.dlg,getclasslongptr(m.dlg,gcl_cbwndextra)-sizeof(integer),cint(creationdata))
         creationdata=0
    case wm_create
         /'for i as integer=0 to controlcount-1
             if isWindow(fcontrols[i]->handle)=0 then fcontrols[i]->parent=this
         next'/
    end select
end sub

sub Form.Handler(byref m as TMessage)
    if MDIClient then
         m.result=DefFrameProc(m.dlg,iif(mdiclient,mdiclient->handle,0),m.msg,m.wparam,m.lparam)
    else
         if exstyle and ws_ex_mdichild=ws_ex_mdichild then
            m.result=DefMDIChildProc(m.dlg,m.msg,m.wparam,m.lparam)
         else
            m.result=DefWindowProc(m.dlg,m.msg,m.wparam,m.lparam)
         end if
    end if
end sub

function Form.wndproc(dlg as hwnd,msg as uint,wparam as wparam,lparam as lparam) as lresult
    dim as PControl sender=iif(creationdata,creationdata,cast(PControl,GetWindowLongPtr(dlg,GetClassLongPtr(dlg,gcl_cbwndextra)-sizeof(integer))))
    dim as TMessage m=type(dlg,msg,wparam,lparam,0,sender,0)
    if sender then
       sender->fhandle=dlg
       sender->Dispatch(m)
       sender->Handler(m)
       return m.result
    else
       sender=new Form  '''automation
       sender->fhandle=dlg
       sender->Dispatch(m)
       sender->Handler(m)
       return m.result
    end if
    return m.result
end function

property Form.FormStyle as FormStyles
    return fformstyle
end property

property Form.FormStyle (v as FormStyles)
    fformstyle=v
end property

sub Form.Free
    if isWindow(fhandle) then
       destroyWindow(fhandle)
       fhandle=0
    end if
end sub

operator Form.cast as any ptr
    return @this
end operator

constructor Form
    fstyle=ws_overlappedwindow
    fx=cw_usedefault
    fy=cw_usedefault
    fcx=cw_usedefault
    fcy=cw_usedefault
    classname="Form"
end constructor

/'  Button '/
function Button.wndproc(dlg as hwnd,msg as uint,wparam as wparam,lparam as lparam) as lresult
    dim as PControl sender=iif(creationdata,creationdata,cast(PControl,GetWindowLongPtr(dlg,GetClassLongPtr(dlg,gcl_cbwndextra)-sizeof(integer))))
    dim as TMessage m=type(dlg,msg,wparam,lparam,0,sender)
    if sender then
       sender->fhandle=dlg
       sender->Dispatch(m)
       sender->Handler(m)
       return m.result
    else
       sender=new Button  '''automation
       sender->fhandle=dlg
       sender->Dispatch(m)
       sender->Handler(m)
       return m.result
    end if
    return m.result
end function

function Button.Register as integer
    dim as wndclassex wcls
    wcls.cbsize=sizeof(wcls)
    if GetClassInfoEx(0,"button",@wcls) then
       wcls.hinstance=instance
       wcls.lpszclassname=@"button"
       wcls.lpfnwndproc=@wndproc
       wcls.cbwndextra+=sizeof(integer) :?  wcls.cbwndextra,sizeof(integer)
       return RegisterClassEx(@wcls)
    end if
end function

sub Button.CreateHandle
    creationdata=this
    CreateWindowEx(fexstyle,classname,ftext,fstyle,fx,fy,fcx,fcy,iif(fparent,fparent->fhandle,0),cast(hmenu,fid),instance,0)
    if isWindow(fhandle) then
       SetParent(fhandle,iif(fparent,fparent->fhandle,0))
       ShowWindow(fhandle,iif(fvisible,sw_show,sw_hide))
    end if
end sub

sub Button.Dispatch(byref m as TMessage)
    select case m.msg
    case wm_nccreate
         setwindowlongptr(m.dlg,getclasslongptr(m.dlg,gcl_cbwndextra)-sizeof(integer),cint(creationdata))
         creationdata=0
    case wm_create
    end select
end sub

sub Button.Handler(byref m as TMessage)
    dim as wndclassex wcls
    wcls.cbsize=sizeof(wcls)
    if GetClassInfoEx(0,"button",@wcls) then m.result=CallWindowProc(wcls.lpfnwndproc,m.dlg,m.msg,m.wparam,m.lparam)
end sub

sub Button.Free
    if isWindow(fhandle) then
       destroyWindow(fhandle)
       fhandle=0
    end if
end sub

operator Button.cast as any ptr
    return @this
end operator

constructor Button
    fstyle=ws_childwindow
    fcx=75
    fcy=25
    classname="button"
    classancestor="button"
end constructor

/' main program '/
    MDIClient.register
    Form.Register
    Button.Register
    
dim as Form F
F.Parent=0

dim as MDIClient C
F.MDIClient=C
C.parent=F

dim as hmenu Menu=LoadMenu(instance,"mainmenu"),wm=getsubmenu(menu,0):? "wm=",wm
SetMenu(F.Handle,Menu)
DrawMenuBar(F.Handle)


dim as Form ptr Child
Child=new Form
child->style=ws_overlappedwindow
child->exstyle=ws_ex_mdichild
child->parent=F.MDIClient
Child=new Form
child->style=ws_overlappedwindow
child->exstyle=ws_ex_mdichild
child->parent=F.MDIClient

SendMessage(F.mdiclient->handle,wm_mdisetmenu,cint(menu),cint(wm))
SendMessage(F.mdiclient->handle,wm_mdirefreshmenu,0,0)

dim as Button B
B.Parent=F

? F.classname,F.classancestor
? B.classname,B.classancestor

dim as msg m
while GetMessage(@m,0,0,0)>0
      TranslateMessage(@m)
      DispatchMessage(@m)
wend



Post Reply