FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin for Harbour/xHarbour fwh\samples\RE.prg - FiveWin Resources Editor underrated
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

Re: fwh\samples\RE.prg - FiveWin Resources Editor underrated

Posted: Sat Sep 05, 2009 09:35 AM
An enhanced RE.EXE version :-)
http://www.mediafire.com/?sharekey=45bb ... eaa7bc68bc

See the advantages of storing it in the wiki for reviewing changes :-)
http://wiki.fivetechsoft.com/doku.php?id=fivewin_resources_editor&rev=1252082366&do=diff
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 6984
Joined: Fri Oct 07, 2005 07:07 PM

Re: fwh\samples\RE.prg - FiveWin Resources Editor underrated

Posted: Sun Sep 06, 2009 06:28 AM

Hello Antonio,

I changed the way I will print the IDs on the dialog.
I add extra controls which print the IDs.

This is what I did:

case cFirst == "CONTROL"
              cResource += ParseControl( cLine )
              nControls++
     cResource += Beschriftung( cLine )
              nControls++
function Beschriftung( cLine )

   local nTop, nLeft, nWidth, nHeight, nId, nAt
   local cClassName, cStyle, nStyle := nOr( WS_VISIBLE, WS_CHILD, WS_TABSTOP ), cCaption, cToken
   local cId

   cCaption = StrToken( cLine, 2, '"' )
   cLine = StrToken( cLine, 1, '"' ) + '"-"' + StrToken( cLine, 3, '"' ) + '"' + ;
           StrToken( cLine, 4, '"' ) + '"' + StrToken( cLine, 5, '"' )
   nId     = Val( StrToken( cLine, 1, "," ) )
   nLeft   = Val( StrToken( cLine, 5, "," ) )
   nTop    = Val( StrToken( cLine, 6, "," ) )
   nWidth  = Val( StrToken( cLine, 7, "," ) )
   nHeight = Val( StrToken( cLine, 8, "," ) )
   cClassName = StrToken( cLine, 4, '"' )
   cStyle  = StrToken( cLine, 4, "," )

   cId := STRTRAN(StrToken( cLine, 3, '"' ),",")
  
cClassName = "edit"

nHeight := 2
nWidth := 20
nStyle:= 1342373888
return cCtrl2Chr( nTop, nLeft, nTop + nHeight, nLeft + nWidth, nId, nStyle,;
                  cClassName,  + cId + "#")

Do you think I could print these controls in a certain font easily?

Thanks in advance
Otto

Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

Re: fwh\samples\RE.prg - FiveWin Resources Editor underrated

Posted: Sun Sep 06, 2009 08:16 AM

Otto,

Wouldn't be simpler to have the IDs as tooltips ? :-)

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

Re: fwh\samples\RE.prg - FiveWin Resources Editor underrated

Posted: Sun Sep 06, 2009 08:42 AM
Otto,

With these changes in RE.prg:
http://wiki.fivetechsoft.com/doku.php?id=fivewin_resources_editor&rev=1252143398&do=diff

and these changes in Class TControl:


then tooltips are shown even in design mode :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

Re: fwh\samples\RE.prg - FiveWin Resources Editor underrated

Posted: Sun Sep 06, 2009 08:53 AM
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 6984
Joined: Fri Oct 07, 2005 07:07 PM

Re: fwh\samples\RE.prg - FiveWin Resources Editor underrated

Posted: Sun Sep 06, 2009 04:58 PM

Hello Antonio,

your exe is working but if I compile the prg-file tooltip is not working.
Do I need some changed in a class?

Thanks in advance
Otto

Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

Re: fwh\samples\RE.prg - FiveWin Resources Editor underrated

Posted: Sun Sep 06, 2009 07:23 PM

Otto,

Yes, see my posted changes for Class TControl above

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 6984
Joined: Fri Oct 07, 2005 07:07 PM

Re: fwh\samples\RE.prg - FiveWin Resources Editor underrated

Posted: Sun Sep 06, 2009 08:48 PM
Hello Antonio,

tooltip is working. But how can I get the nID on dbClick event?
I tried:
Code (fw): Select all Collapse
 oCtrl:bLDblClick = { || msginfo( AllTrim( Str( GetWindowLong( oCtrl:hWnd, GWL_ID ) ) ))}

but this does not work.

Best regards,
Otto
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

Re: fwh\samples\RE.prg - FiveWin Resources Editor underrated

Posted: Sun Sep 06, 2009 09:45 PM
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 8523
Joined: Tue Dec 20, 2005 07:36 PM

Re: fwh\samples\RE.prg - FiveWin Resources Editor underrated

Posted: Fri Nov 14, 2025 03:38 PM

Buenas tardes. ¿Dónde puedo encontrar el código completo de este editor? Todos los enlaces están rotos.

Good afternoon. Where is the complete code for this editor now? All the links are broken.

Gracias, tks.

Fuente/Source:

https://forums.fivetechsupport.com/viewtopic.php?f=3&t=14425

Regards, saludos.

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

Re: fwh\samples\RE.prg - FiveWin Resources Editor underrated

Posted: Fri Nov 14, 2025 05:02 PM

Dear Joao,

You can find it at FWH\samples

re.prg

// FiveWin Resources Editor

#include "FiveWin.ch"
#include "Splitter.ch"
#include "TCBrowse.ch"
#include "xbrowse.ch"

#define WM_SETFONT          0x0030

#define GWL_ID              -12

#define ES_CENTER           0x0001
#define ES_UPPERCASE        0x0008
#define ES_LOWERCASE        0x0010
#define ES_AUTOVSCROLL      0x0040
#define ES_NOHIDESEL        0x0100
#define ES_OEMCONVERT       0x0400
#define ES_NUMBER           0x2000

#define SS_CENTER           0x00000001
#define SS_RIGHT            0x00000002
#define SS_ICON             0x00000003
#define SS_GRAYRECT         0x00000005
#define SS_BLACKFRAME       0x00000007
#define SS_GRAYFRAME        0x00000008
#define SS_USERITEM         0x0000000A
#define SS_LEFTNOWORDWRAP   0x0000000C
#define SS_OWNERDRAW        0x0000000D
#define SS_BITMAP           0x0000000E
#define SS_ENHMETAFILE      0x0000000F
#define SS_ETCHEDHORZ       0x00000010
#define SS_ETCHEDVERT       0x00000011
#define SS_ETCHEDFRAME      0x00000012
#define SS_TYPEMASK         0x0000001F
#define SS_NOPREFIX         0x00000080
#define SS_NOTIFY           0x00000100
#define SS_CENTERIMAGE      0x00000200
#define SS_RIGHTJUST        0x00000400
#define SS_REALSIZEIMAGE    0x00000800
#define SS_SUNKEN           0x00001000
#define SS_ENDELLIPSIS      0x00004000
#define SS_PATHELLIPSIS     0x00008000
#define SS_WORDELLIPSIS     0x0000C000
#define SS_ELLIPSISMASK     0x0000C000

#define CBS_OWNERDRAWVARIABLE   0x0020
#define CBS_HASSTRINGS          0x0200
#define CBS_UPPERCASE           0x2000
#define CBS_LOWERCASE           0x4000

#define BS_TEXT             0x00000000
#define BS_ICON             0x00000040
#define BS_BITMAP           0x00000080
#define BS_LEFT             0x00000100
#define BS_RIGHT            0x00000200
#define BS_CENTER           0x00000300
#define BS_TOP              0x00000400
#define BS_BOTTOM           0x00000800
#define BS_VCENTER          0x00000C00
#define BS_PUSHLIKE         0x00001000
#define BS_MULTILINE        0x00002000
#define BS_NOTIFY           0x00004000
#define BS_FLAT             0x00008000
#define BS_RIGHTBUTTON      BS_LEFTTEXT

#define LBS_NOREDRAW          0x0004
#define LBS_OWNERDRAWVARIABLE 0x0020
#define LBS_HASSTRINGS        0x0040
#define LBS_MULTICOLUMN       0x0200
#define LBS_EXTENDEDSEL       0x0800
#define LBS_NODATA            0x2000
#define LBS_NOSEL             0x4000

#define DS_3DLOOK             0x0004
#define DS_FIXEDSYS           0x0008
#define DS_NOFAILCREATE       0x0010
#define DS_CONTROL            0x0400
#define DS_CENTER             0x0800
#define DS_CENTERMOUSE        0x1000
#define DS_CONTEXTHELP        0x2000

#define DTS_UPDOWN          0x0001
#define DTS_SHOWNONE        0x0002
#define DTS_SHORTDATEFORMAT 0x0000
#define DTS_LONGDATEFORMAT  0x0004
#define DTS_SHORTDATECENTURYFORMAT 0x000C
#define DTS_TIMEFORMAT      0x0009
#define DTS_APPCANPARSE     0x0010
#define DTS_RIGHTALIGN      0x0020

#define GW_CHILD              5
#define GW_HWNDNEXT           2

static oWnd, oImageList, oTree, oMruRCs

static aStyles := { { "ES_LEFT",           ES_LEFT },;
                    { "ES_CENTER",         ES_CENTER },;
                    { "ES_RIGHT",          ES_RIGHT },;
                    { "ES_MULTILINE",      ES_MULTILINE },;
                    { "ES_UPPERCASE",      ES_UPPERCASE },;
                    { "ES_LOWERCASE",      ES_LOWERCASE },;
                    { "ES_PASSWORD",       ES_PASSWORD },;
                    { "ES_AUTOVSCROLL",    ES_AUTOVSCROLL },;
                    { "ES_AUTOHSCROLL",    ES_AUTOHSCROLL },;
                    { "ES_NOHIDESEL",      ES_NOHIDESEL },;
                    { "ES_OEMCONVERT",     ES_OEMCONVERT },;
                    { "ES_READONLY",       ES_READONLY },;
                    { "ES_WANTRETURN",     ES_WANTRETURN },;
                    { "ES_NUMBER",         ES_NUMBER },;
                    { "WS_CHILD",          WS_CHILD },;
                    { "WS_VISIBLE",        WS_VISIBLE },;
                    { "WS_GROUP",          WS_GROUP },;
                    { "WS_BORDER",         WS_BORDER },;
                    { "WS_VSCROLL",        WS_VSCROLL },;
                    { "WS_HSCROLL",        WS_HSCROLL },;
                    { "WS_TABSTOP",        WS_TABSTOP },;
                    { "WS_EX_TRANSPARENT", WS_EX_TRANSPARENT },;
   	                { "WS_DISABLED",       WS_DISABLED },;
   	                { "SS_LEFT",           SS_LEFT  },;        

   	                { "SS_CENTER",         SS_CENTER },;        

   	                { "SS_RIGHT",          SS_RIGHT },;         

   	                { "SS_ICON",           SS_ICON },;          

   	                { "SS_BLACKRECT",      SS_BLACKRECT },;     

   	                { "SS_GRAYRECT",       SS_GRAYRECT },;      

   	                { "SS_WHITERECT",      SS_WHITERECT },;     

   	                { "SS_BLACKFRAME",     SS_BLACKFRAME },;    

   	                { "SS_GRAYFRAME",      SS_GRAYFRAME },;     

   	                { "SS_WHITEFRAME",     SS_WHITEFRAME },;    

   	                { "SS_USERITEM",       SS_USERITEM },;      

   	                { "SS_SIMPLE",         SS_SIMPLE },;        

   	                { "SS_LEFTNOWORDWRAP", SS_LEFTNOWORDWRAP },;
   	                { "SS_OWNERDRAW",      SS_OWNERDRAW },;     

   	                { "SS_BITMAP",         SS_BITMAP },;        

   	                { "SS_ENHMETAFILE",    SS_ENHMETAFILE },;   

   	                { "SS_ETCHEDHORZ",     SS_ETCHEDHORZ },;    

   	                { "SS_ETCHEDVERT",     SS_ETCHEDVERT },;    

   	                { "SS_ETCHEDFRAME",    SS_ETCHEDFRAME },;   

   	                { "SS_TYPEMASK",       SS_TYPEMASK },;      

   	                { "SS_NOPREFIX",       SS_NOPREFIX },;      

   	                { "SS_NOTIFY",         SS_NOTIFY },;        

   	                { "SS_CENTERIMAGE",    SS_CENTERIMAGE },;   

   	                { "SS_RIGHTJUST",      SS_RIGHTJUST },;     

   	                { "SS_REALSIZEIMAGE",  SS_REALSIZEIMAGE },; 
   	                { "SS_SUNKEN",         SS_SUNKEN },;        

   	                { "SS_ENDELLIPSIS",    SS_ENDELLIPSIS },;   

   	                { "SS_PATHELLIPSIS",   SS_PATHELLIPSIS },;  

   	                { "SS_WORDELLIPSIS",   SS_WORDELLIPSIS },;  

   	                { "SS_ELLIPSISMASK",   SS_ELLIPSISMASK },;
                      { "CBS_SIMPLE",            CBS_SIMPLE },;           	                

   	                { "CBS_DROPDOWN",          CBS_DROPDOWN },;         

   	                { "CBS_DROPDOWNLIST",      CBS_DROPDOWNLIST },;     

   	                { "CBS_OWNERDRAWFIXED",    CBS_OWNERDRAWFIXED },;   

   	                { "CBS_OWNERDRAWVARIABLE", CBS_OWNERDRAWVARIABLE },;
   	                { "CBS_AUTOHSCROLL",       CBS_AUTOHSCROLL },;      

   	                { "CBS_OEMCONVERT",        CBS_OEMCONVERT },;       

   	                { "CBS_SORT",              CBS_SORT },;             

   	                { "CBS_HASSTRINGS",        CBS_HASSTRINGS },;       

   	                { "CBS_NOINTEGRALHEIGHT",  CBS_NOINTEGRALHEIGHT },; 
   	                { "CBS_DISABLENOSCROLL",   CBS_DISABLENOSCROLL },;  

   	                { "CBS_UPPERCASE",         CBS_UPPERCASE },;        

   	                { "CBS_LOWERCASE",         CBS_LOWERCASE },;     

                      { "BS_PUSHBUTTON",        	 BS_PUSHBUTTON },;                    	
   	                { "BS_DEFPUSHBUTTON",        BS_DEFPUSHBUTTON },;  

   	                { "BS_CHECKBOX",             BS_CHECKBOX },;       

   	                { "BS_AUTOCHECKBOX",         BS_AUTOCHECKBOX },;   

   	                { "BS_RADIOBUTTON",          BS_RADIOBUTTON },;    

   	                { "BS_3STATE",               BS_3STATE },;         

   	                { "BS_AUTO3STATE",           BS_AUTO3STATE },;     

   	                { "BS_GROUPBOX",             BS_GROUPBOX },;       

   	                { "BS_USERBUTTON",           BS_USERBUTTON },;     

   	                { "BS_AUTORADIOBUTTON",      BS_AUTORADIOBUTTON },;
   	                { "BS_OWNERDRAW",            BS_OWNERDRAW },;      

   	                { "BS_LEFTTEXT",             BS_LEFTTEXT },;       

   	                { "BS_TEXT",                 BS_TEXT },;           

   	                { "BS_ICON",                 BS_ICON },;           

   	                { "BS_BITMAP",               BS_BITMAP },;         

   	                { "BS_LEFT",                 BS_LEFT },;           

   	                { "BS_RIGHT",                BS_RIGHT },;          

   	                { "BS_CENTER",               BS_CENTER },;         

   	                { "BS_TOP",                  BS_TOP },;            

   	                { "BS_BOTTOM",               BS_BOTTOM },;         

   	                { "BS_VCENTER",              BS_VCENTER },;        

   	                { "BS_PUSHLIKE",             BS_PUSHLIKE },;       

   	                { "BS_MULTILINE",            BS_MULTILINE },;      

   	                { "BS_NOTIFY",               BS_NOTIFY },;         

   	                {	"BS_FLAT",                 BS_FLAT },;           

   	                {	"BS_RIGHTBUTTON",          BS_RIGHTBUTTON },;
                      { "LBS_NOTIFY",              LBS_NOTIFY },;                          

   	                { "LBS_SORT",                LBS_SORT },;             

   	                { "LBS_NOREDRAW",            LBS_NOREDRAW },;         

   	                { "LBS_MULTIPLESEL",         LBS_MULTIPLESEL },;      

   	                { "LBS_OWNERDRAWFIXED",      LBS_OWNERDRAWFIXED },;   

   	                { "LBS_OWNERDRAWVARIABLE",   LBS_OWNERDRAWVARIABLE },;
   	                { "LBS_HASSTRINGS",          LBS_HASSTRINGS },;       

   	                { "LBS_USETABSTOPS",         LBS_USETABSTOPS },;      

   	                { "LBS_NOINTEGRALHEIGHT",    LBS_NOINTEGRALHEIGHT },; 
   	                { "LBS_MULTICOLUMN",         LBS_MULTICOLUMN },;      

   	                { "LBS_WANTKEYBOARDINPUT",   LBS_WANTKEYBOARDINPUT },;
   	                { "LBS_EXTENDEDSEL",         LBS_EXTENDEDSEL },;      

   	                { "LBS_DISABLENOSCROLL",     LBS_DISABLENOSCROLL },;  

   	                { "LBS_NODATA",              LBS_NODATA },;           

   	                { "LBS_NOSEL",               LBS_NOSEL },;            

   	                { "LBS_STANDARD",            LBS_STANDARD },;    

                      { "DTS_UPDOWN",              DTS_UPDOWN },;
                      { "DTS_SHOWNONE",            DTS_SHOWNONE },;
                      { "DTS_SHORTDATEFORMAT",     DTS_SHORTDATEFORMAT },;
                      { "DTS_LONGDATEFORMAT",      DTS_LONGDATEFORMAT },;
                      { "DTS_SHORTDATECENTURYFORMAT", DTS_SHORTDATECENTURYFORMAT },;
                      { "DTS_TIMEFORMAT",          DTS_TIMEFORMAT },;
                      { "DTS_APPCANPARSE",         DTS_APPCANPARSE },; 
                      { "DTS_RIGHTALIGN",          DTS_RIGHTALIGN },;   	                

   	                { "1", 1 },;
   	                { "2", 2 },;
   	                { "3", 3 },;
   	                { "0", 0 } }    

static aDlgStyles := { { "WS_BORDER",      WS_BORDER },;
	                     { "WS_CAPTION",     WS_CAPTION },;
	                     { "WS_MINIMIZEBOX", WS_MINIMIZEBOX },;
	                     { "WS_POPUP",       WS_POPUP },;
	                     { "WS_DLGFRAME",    WS_DLGFRAME },;
	                     { "WS_SYSMENU",     WS_SYSMENU },;
	                     { "WS_CHILD",       WS_CHILD },;
	                     { "WS_OVERLAPPED",  WS_OVERLAPPED },;
	                     { "WS_VISIBLE",     WS_VISIBLE },;
	                     { "WS_THICKFRAME",  WS_THICKFRAME },;
	                     { "0x4L",           4 },;
	                     { "4",              4 },;
	                     { "DS_MODALFRAME",  DS_MODALFRAME },;
	                     { "DS_3DLOOK",      DS_3DLOOK } }
	                     

//----------------------------------------------------------------------------//
                    

function Main()     
                    

   local oBar, oMenuNew
   local hBorland := LoadLibrary( "BWCC32.dll" )
   local oBmpTiled
    

   BWCCRegister( GetResources() )

   DEFINE BITMAP oBmpTiled RESOURCE "background"

   DEFINE WINDOW oWnd FROM 3, 6 TO 20, 70 ;
      TITLE FWVERSION + " Resources Editor" ;
      MENU BuildMenu() MDI
                    

   DEFINE BUTTONBAR oBar SIZE 70, 70 OF oWnd 2010
                    

   MENU oMenuNew POPUP
      MENUITEM "New &Dialog" RESOURCE "Dialog"
      MENUITEM "New &Bitmap" RESOURCE "Bitmap"
      MENUITEM "New &Icon"   RESOURCE "Icon"
   ENDMENU          
                    

   DEFINE BUTTON OF oBar  ;
      TOOLTIP "New" NOBORDER RESOURCE "New" MENU oMenuNew
                    

   DEFINE BUTTON OF oBar  ;
      TOOLTIP "Open" NOBORDER RESOURCE "Open" ;
      ACTION OpenRCFile()
                    

   DEFINE BUTTON OF oBar  ;
      TOOLTIP "Save" NOBORDER RESOURCE "Save"

   DEFINE BUTTON OF oBar GROUP ;
      TOOLTIP "Run" NOBORDER RESOURCE "Run" ACTION RunDialog()

   DEFINE BUTTON OF oBar ;
      TOOLTIP "PRG code" NOBORDER RESOURCE "Prg" ACTION ShowCode()

   DEFINE BUTTON OF oBar GROUP ;
      TOOLTIP "Exit" NOBORDER RESOURCE "Exit" ACTION oWnd:End()

   oImageList = TImageList():New()

   oImageList:Add( TBitmap():Define( "folder",,  oWnd ),;
                   TBitmap():Define( "fldmask",, oWnd ) )
   oImageList:Add( TBitmap():Define( "dialog",,  oWnd ),;
                   TBitmap():Define( "dlgmask",, oWnd ) )
   oImageList:Add( TBitmap():Define( "icon",,    oWnd ),;
                   TBitmap():Define( "icomask",, oWnd ) )
   oImageList:Add( TBitmap():Define( "bitmap",,  oWnd ),;
                   TBitmap():Define( "bmpmask",, oWnd ) )
   oImageList:Add( TBitmap():Define( "includes",, oWnd ),;
                   TBitmap():Define( "incmask",, oWnd ) )

   DEFINE MSGBAR OF oWnd PROMPT "Ready" DATE KEYBOARD 2010

   ACTIVATE WINDOW oWnd MAXIMIZED ;
      ON INIT InitFWHControls() ;
      ON PAINT DrawTiled( hDC, oWnd, oBmpTiled )
      // VALID MsgYesNo( "Want to end ?" )

   oBmpTiled:End()
   oImageList:End()
  

return nil

//----------------------------------------------------------------------------//

function BuildMenu()

   local oMenu

   MENU oMenu 2007
      MENUITEM "&File"
      MENU
         MENUITEM "&New"  RESOURCE "new2"
         MENUITEM "&Open" RESOURCE "Open2" ;
            ACTION OpenRCFile()

     MENUITEM "&Save as..."
     SEPARATOR

     MENUITEM "Recent files"
     MENU
        MRU oMruRCs ;
           FILENAME ".\re.ini" ;    // .INI to manipulate. '\.' for local
           SECTION  "Recent RC files" ; // The name of the INI section
           ACTION   OpenRCFile( cMruItem ) ;   // cMruItem is automatically provided
           MESSAGE  "Open this file" ;   // The message for all of them
           SIZE     10
     ENDMENU
     
     SEPARATOR
     
     MENUITEM "&Exit..." ACTION oWnd:End() RESOURCE "Exit2"
  ENDMENU
  MENUITEM "&Edit"
  oMenu:AddMDI()
  oMenu:AddHelp( "FiveWin Resources Editor", "FiveTech 1993-2018" )
   ENDMENU

return oMenu

//----------------------------------------------------------------------------//

function ShowCode()

  if oWnd:oWndActive != nil
     ShowDialog( oWnd:oWndActive:aControls[ 1 ]:GetSelected(), .T. )
  endif

return nil

//----------------------------------------------------------------------------//

function OpenRCFile( cRCFile )

   local oWndRC, oTree, oMemo, oSplit
   local cTxtFile, cLine, nFrom := 1, cItemText := "", cText
   local oItem, oIncItem, oDefItem, oBmpItem, oDlgItem, oIcoItem
   local oMnuItem, oMnuString

   DEFAULT cRCFile := cGetFile( "*.rc", "Select a resources file" )

   if Empty( cRCFile )
      return nil
   endif   

   oMruRCs:Save( cRCFile )

   DEFINE WINDOW oWndRC TITLE cRCFile MDICHILD

   oTree = TTreeView():New( 2, 0, oWndRC )
   oTree:bChanged = { | oItem | oItem := oTree:GetSelected(),;
                      If( oItem != nil, oMemo:SetText( oItem:Cargo ),) }
   oTree:bLDblClick = { || ShowItem( oTree:GetSelected() ) }                   

   oTree:SetImageList( oImageList )
   oTree:nWidth += 48

   @ 0, 25.7 GET oMemo VAR cItemText MEMO OF oWndRC SIZE 300, 100

   @ 0, 200 SPLITTER oSplit ;
      VERTICAL ;
      PREVIOUS CONTROLS oTree ;
      HINDS CONTROLS oMemo ; 
      SIZE 4, 200 PIXEL ;
      OF oWndRC
      

   oSplit:AdjClient()   

   if ! Empty( cRCFile )
      cTxtFile = MemoRead( cRCFile )

  while nFrom < Len( cTxtFile )
     cLine = ExtractLine( cTxtFile, @nFrom )
     SysRefresh()

     if Upper( StrToken( cLine, 1 ) ) == "#INCLUDE" 
        if oIncItem == nil
           oIncItem = oTree:Add( "Includes" )
        endif   
        oIncItem:Add( StrToken( cLine, 2 ), 4 ):Cargo = cLine
     endif

     if Upper( StrToken( cLine, 1 ) ) == "#DEFINE" 
        if oDefItem == nil
           oDefItem = oTree:Add( "Defines" )
        endif   
        oDefItem:Add( StrToken( cLine, 2 ), 4 ):Cargo = cLine
     endif

     if Upper( StrToken( cLine, 2 ) ) == "BITMAP"
        if oBmpItem == nil
           oBmpItem = oTree:Add( "Bitmaps" )
        endif   
        oBmpItem:Add( StrToken( cLine, 1 ), 3, StrToken( cLine, 3 ) )
     endif

     if Upper( StrToken( cLine, 2 ) ) $ "DIALOG,DIALOGEX"
        if oDlgItem == nil
           oDlgItem = oTree:Add( "Dialogs" )
        endif   
        oItem = oDlgItem:Add( StrToken( cLine, 1 ), 1 )
        cText = cLine + CRLF
        while ( SubStr( cLine, 1, 1 ) != "}" .and. SubStr( cLine, 1, 3 ) != "END" ) .and. ;
              nFrom <= Len( cTxtFile )
           cLine = ExtractLine( cTxtFile, @nFrom )
           cText += cLine + CRLF
           SysRefresh()
        end 
        oItem:Cargo = cText
     endif

     if Upper( StrToken( cLine, 2 ) ) == "ICON"
        if oIcoItem == nil
           oIcoItem = oTree:Add( "Icons" )
        endif   
        oIcoItem:Add( StrToken( cLine, 1 ), 2, StrToken( cLine, 3 ) )
     endif

     if Upper( StrToken( cLine, 2 ) ) == "MENU"
        if oMnuItem == nil
           oMnuItem = oTree:Add( "Menus" )
        endif   
        oMnuItem:Add( StrToken( cLine, 1 ), 2 )
     endif

     if Upper( StrToken( cLine, 1 ) ) == "STRINGTABLE"
        if oMnuString == nil
           oMnuString = oTree:Add( "Strings" )
        endif   
        oMnuString:Add( StrToken( cLine, 2 ), 2 )
     endif
 
  end
   endif

   ACTIVATE WINDOW oWndRC ;
      ON RESIZE oSplit:AdjClient()
      

return nil

//----------------------------------------------------------------------------//

function RunDialog()

  if oWnd:oWndActive != nil
     ShowDialog( oWnd:oWndActive:aControls[ 1 ]:GetSelected() )
  endif
  

return nil     

//----------------------------------------------------------------------------//

function ShowDialog( oItem, lCode )

   local cText, cLine, nFrom := 1
   local cCaption := "", nTop, nLeft, nWidth, nHeight, nStyle, nFontSize, cFontName
   local oDlg, cResource := "", cFirst, nControls := 0
   local oFnt, cCode := ""
   

   DEFAULT lCode := .F.
   

   if oItem == nil
      return nil
   endif
   

   cText = oItem:Cargo
   if Empty( cText )
      return nil
   endif   

   cLine = ExtractLine( cText, @nFrom )
   

   nTop    = Val( SubStr( StrToken( cLine, 1, "," ), RAt( " ", StrToken( cLine, 1, "," ) ) + 1 ) )
   nLeft   = Val( StrToken( cLine, 2, "," ) )
   nWidth  = Val( StrToken( cLine, 3, "," ) )
   nHeight = Val( StrToken( cLine, 4, "," ) )

   // MsgInfo( nTop )
   // MsgInfo( nLeft )
   // MsgInfo( nWidth )
   // MsgInfo( nHeight )

   while nFrom < Len( cText )
      cLine = ExtractLine( cText, @nFrom )
      cLine = StrTran( cLine, Chr( 9 ), "   " ) // remove Tab chars
      cFirst = Upper( AllTrim( StrToken( cLine, 1 ) ) )
      

  do case
  	 case cFirst == "CAPTION"
          cCaption = StrToken( cLine, 2, '"' )

     case cFirst == "STYLE"
          nStyle = ParseDlgStyle( AllTrim( SubStr( cLine, 6 ) ) )
          if lAnd( nStyle, WS_CHILD )
             nStyle = nXor( nStyle, WS_CHILD )
          endif   
          if nAnd( nStyle, WS_CAPTION ) != WS_CAPTION
             nStyle = nOr( nStyle, WS_CAPTION )
          endif   

     case cFirst == "FONT"
          nFontSize = Val( StrToken( StrToken( cLine, 1, "," ), 2 ) )
          cFontName = StrToken( cLine, 2, '"' )

     case cFirst == "CONTROL"      
          cResource += ParseControl( cLine )
          cCode += ParseControl( cLine, lCode ) + CRLF + CRLF
          nControls++
          
     case cFirst $ "PUSHBUTTON,DEFPUSHBUTTON,LISTBOX,EDITTEXT,LTEXT,RTEXT,GROUPBOX,CHECKBOX,COMBOBOX,RADIOBUTTON"     
          cResource += ParseStdControl( cLine )
          cCode += ParseStdControl( cLine, lCode ) + CRLF + CRLF
          nControls++
  endcase
   end       
   

   if ! lCode
      DEFAULT nFontSize := 8, cFontName := "Ms Sans Serif"

  cResource = cDlg2Chr( nControls, nTop, nLeft, nTop + nHeight, nLeft + nWidth,;
                        cCaption, nStyle, nFontSize, cFontName ) + cResource
                                
  DEFINE DIALOG oDlg
   
  oDlg:cResData = cResource
   
  ACTIVATE DIALOG oDlg CENTERED ;
     ON INIT InitControls( oDlg ) ;
     ON PAINT DrawGrid( oDlg:hWnd, hDC, cPS, 8, 8 )
   else      

      cCode = 'DEFINE DIALOG oDlg RESOURCE "' + oItem:cPrompt + '"' + ;
              CRLF + CRLF + cCode + "ACTIVATE DIALOG oDlg"
      

  MemoEdit( cCode, "PRG source code" )
   endif     
   

return nil   
      

//----------------------------------------------------------------------------//

function ShowImage( cBmp )

   local oDlg, oBmp
   

   DEFINE DIALOG oDlg TITLE cBmp

   if Lower( Right( cBmp, 3 ) ) == "bmp"
      @ 0, 0 BITMAP oBmp FILENAME cBmp OF oDlg NOBORDER
   elseif Lower( Right( cBmp, 3 ) ) == "ico"
      @ 0, 0 ICON oBmp FILENAME cBmp OF oDlg
   endif     
   

   ACTIVATE DIALOG oDlg CENTERED ;
      ON INIT ( oDlg:SetSize( Max( 300, oBmp:nWidth + 20 ),;
                              Max( 300, oBmp:nHeight + 20 ) ),;
                oBmp:Center(), oDlg:Center() )              
   

return nil   

//----------------------------------------------------------------------------//

function ShowItem( oItem )

   local cFileName, cText

   if Empty( oItem:Cargo )
      return nil
   endif
   

   oItem:Cargo = AllTrim( oItem:Cargo )
   

   if Right( oItem:Cargo, 1 ) == '"' .or. ;
      Right( oItem:Cargo, 1 ) == "'"
      cFileName = StrToken( oItem:Cargo, 2 )
      cFileName = SubStr( cFileName, 2, Len( cFileName ) - 2 )
   endif    
   

   do case 
      case Lower( Right( cFileName, 4 ) ) $ ".bmp,.ico"
           ShowImage( cFileName )

  case Lower( Right( cFileName, 3 ) ) == ".ch" .or. ;
       Lower( Right( cFileName, 2 ) ) == ".h"
       cText = MemoRead( cFileName )
       SourceEdit( @cText, cFileName,,,,,,, cFileName )

  otherwise
       ShowDialog( oItem )
   endcase
   

return nil                   

//----------------------------------------------------------------------------//

function ParseDlgStyle( cStyle )

   local nStyle := nOr( DS_SETFONT, WS_OVERLAPPEDWINDOW ), cToken, nAt

   while ! Empty( cStyle )
      cToken = AllTrim( StrToken( cStyle, 1, "|" ) )
      

  if ( nAt := AScan( aDlgStyles, { | a | cToken == a[ 1 ] } ) ) != 0
   	 nStyle = nOr( nStyle, aDlgStyles[ nAt ][ 2 ] )
  else
     MsgAlert( "Dialog style not found: " + cToken,;
               "Please report this to FiveTech Software" ) 	 
  endif	    
  if At( "|", cStyle ) != 0
     cStyle = SubStr( cStyle, At( "|", cStyle ) + 1 )
  else
     cStyle = ""
  endif      
   end   

return nStyle

//----------------------------------------------------------------------------//

function ParseControl( cLine, lCode )

   local nTop, nLeft, nWidth, nHeight, nId, cId, nAt, cCode 
   local cClassName, cStyle, nStyle := nOr( WS_VISIBLE, WS_CHILD, WS_TABSTOP ), cCaption, cToken

   DEFAULT lCode := .F.

   cCaption = StrToken( cLine, 2, '"' )
   cLine = StrToken( cLine, 1, '"' ) + '"-"' + StrToken( cLine, 3, '"' ) + '"' + ;
           StrToken( cLine, 4, '"' ) + '"' + StrToken( cLine, 5, '"' )
   cId = StrToken( cLine, 2, "," )
   if Type( cId ) == "N" 
      nId = Val( cId )
   else
      nId = cId   

   endif      

   nLeft   = Val( StrToken( cLine, 5, "," ) )
   nTop    = Val( StrToken( cLine, 6, "," ) )
   nWidth  = Val( StrToken( cLine, 7, "," ) )
   nHeight = Val( StrToken( cLine, 8, "," ) )
   cClassName = AllTrim( StrToken( cLine, 3, ',' ) )// AllTrim( StrToken( StrToken( cLine, 3, '"' ), 2, "," ) )
   cStyle  = AllTrim( StrToken( cLine, 4, "," ) )
   

   if Left( cClassName, 1 ) == '"'
      cClassName = SubStr( cClassName, 2, Len( cClassName ) - 2 )
   endif   
   

   if cClassName == "EDIT"
      cClassName = "edit"
   endif   

   if Upper( cClassName ) == "TFOLDER"
      cClassName = "SysTabControl32"
   endif   

   if Upper( cClassName ) == "FOLDER32"
      cClassName = "SysTabControl32"
   endif   
   

   while ! Empty( cStyle )
      cToken = AllTrim( StrToken( cStyle, 1, "|" ) )

  if ( nAt := AScan( aStyles, { | a | cToken == a[ 1 ] } ) ) != 0
   	 nStyle = nOr( nStyle, aStyles[ nAt ][ 2 ] )
  else
     if SubStr( cToken, 1, 3 ) != "NOT"
        MsgAlert( "Style not found: " + cToken,;
                  "Please report this to FiveTech Software" ) 	 
     endif             
  endif	    
  if At( "|", cStyle ) != 0
     cStyle = SubStr( cStyle, At( "|", cStyle ) + 1 )
  else
     cStyle = ""
  endif      
   end   
       	           

   if lCode
      cClassName = Upper( cClassName )
      

  do case
     case cClassName == "EDIT"
          cClassName = "GET"
  
     case cClassName == "STATIC"
          cClassName = "SAY"
  endcase
  cCode = "REDEFINE " + cClassName + " ID " + cId + " OF oDlg"
   endif          	           
       	           

return If ( ! lCode, cCtrl2Chr( nTop, nLeft, nTop + nHeight, nLeft + nWidth, nId, nStyle,;
            cClassName, cCaption ), cCode )
   

//----------------------------------------------------------------------------//

function ParseStdControl( cLine, lCode )

   local nTop, nLeft, nWidth, nHeight, nId, cId, nAt, cCode
   local cClassName, cStyle, nStyle := nOr( WS_VISIBLE, WS_CHILD, WS_TABSTOP ), cCaption, cToken

   DEFAULT lCode := .F.
   

   cClassName = StrToken( cLine, 1 )

   do case
   	  case cClassName == "PUSHBUTTON"
   	       cClassName = "Button"
           cCaption = StrToken( cLine, 2, '"' )
           cLine = StrToken( cLine, 1, '"' ) + '"-"' + SubStr( cLine, RAt( '"', cLine ) + 1 )
           cId = AllTrim( StrToken( cLine, 2, "," ) )
           nTop = Val( StrToken( cLine, 3, "," ) )
           nLeft = Val( StrToken( cLine, 4, "," ) )
           nHeight = Val( StrToken( cLine, 5, "," ) )
           nWidth  = Val( StrToken( cLine, 6, "," ) )

  case cClassName == "DEFPUSHBUTTON"
       cClassName = "Button"
       cCaption = StrToken( cLine, 2, '"' )
       cLine = StrToken( cLine, 1, '"' ) + '"-"' + SubStr( cLine, RAt( '"', cLine ) + 1 )
       cId = StrToken( cLine, 2, "," )
       nTop = Val( StrToken( cLine, 3, "," ) )
       nLeft = Val( StrToken( cLine, 4, "," ) )
       nHeight = Val( StrToken( cLine, 5, "," ) )
       nWidth  = Val( StrToken( cLine, 6, "," ) )
       nStyle = nOr( nStyle, BS_DEFPUSHBUTTON )

  case cClassName == "LISTBOX"
       cClassName = "ListBox"
       cId = StrToken( StrToken( cLine, 2 ), 1, "," )
       nTop = Val( StrToken( cLine, 2, "," ) )
       nLeft   = Val( StrToken( cLine, 3, "," ) )
       nHeight  = Val( StrToken( cLine, 4, "," ) )
       nWidth   = Val( StrToken( cLine, 5, "," ) )
       cCaption = ""
       cStyle  = StrToken( cLine, 6, "," )

  case cClassName == "EDITTEXT"
       cClassName = "Edit"
       cId  = StrToken( StrToken( cLine, 2 ), 1, "," )
       nTop = Val( StrToken( cLine, 2, "," ) )
       nLeft   = Val( StrToken( cLine, 3, "," ) )
       nHeight  = Val( StrToken( cLine, 4, "," ) )
       nWidth   = Val( StrToken( cLine, 5, "," ) )
       cStyle = StrToken( cLine, 6, "," )
       if Empty( cStyle )
          cStyle = "WS_BORDER"
       endif   
       cCaption = ""

  case cClassName == "LTEXT"
       cClassName = "static"
       cCaption = StrToken( cLine, 2, '"' )
       cLine = StrToken( cLine, 1, '"' ) + '"-"' + SubStr( cLine, RAt( '"', cLine ) + 1 )
       cId  = StrToken( StrToken( cLine, 2, "," ) )
       nTop = Val( StrToken( cLine, 3, "," ) )
       nLeft   = Val( StrToken( cLine, 4, "," ) )
       nHeight  = Val( StrToken( cLine, 5, "," ) )
       nWidth   = Val( StrToken( cLine, 6, "," ) )
       cStyle = "ES_LEFT"

  case cClassName == "RTEXT"
       cClassName = "static"
       cCaption = StrToken( cLine, 2, '"' )
       cLine = StrToken( cLine, 1, '"' ) + '"-"' + SubStr( cLine, RAt( '"', cLine ) + 1 )
       cId  = StrToken( cLine, 2, "," )
       nTop = Val( StrToken( cLine, 3, "," ) )
       nLeft   = Val( StrToken( cLine, 4, "," ) )
       nHeight  = Val( StrToken( cLine, 5, "," ) )
       nWidth   = Val( StrToken( cLine, 6, "," ) )
       cStyle = "ES_RIGHT"

  case cClassName == "GROUPBOX"
       cClassName = "button"
       cCaption = StrToken( cLine, 2, '"' )
       cLine = StrToken( cLine, 1, '"' ) + '"-"' + SubStr( cLine, RAt( '"', cLine ) + 1 )
       cId  = StrToken( StrToken( cLine, 2, "," ) )
       nTop = Val( StrToken( cLine, 3, "," ) )
       nLeft   = Val( StrToken( cLine, 4, "," ) )
       nHeight  = Val( StrToken( cLine, 5, "," ) )
       nWidth   = Val( StrToken( cLine, 6, "," ) )
       cStyle = StrToken( cLine, 7, "," )

  case cClassName == "CHECKBOX"
       cClassName = "Button"
       cCaption = StrToken( cLine, 2, '"' )
       cLine = StrToken( cLine, 1, '"' ) + '"-"' + SubStr( cLine, RAt( '"', cLine ) + 1 )
       cId  = StrToken( cLine, 2, "," )
       nTop = Val( StrToken( cLine, 3, "," ) )
       nLeft = Val( StrToken( cLine, 4, "," ) )
       nHeight = Val( StrToken( cLine, 5, "," ) )
       nWidth  = Val( StrToken( cLine, 6, "," ) )
       cStyle = StrToken( cLine, 7, "," )

  case cClassName == "COMBOBOX"
       cClassName = "ComboBox"
       cId  = StrToken( StrToken( cLine, 2 ), 1, "," )
       nTop = Val( StrToken( cLine, 2, "," ) )
       nLeft   = Val( StrToken( cLine, 3, "," ) )
       nHeight  = Val( StrToken( cLine, 4, "," ) )
       nWidth   = Val( StrToken( cLine, 5, "," ) )
       cCaption = ""
       cStyle  = StrToken( cLine, 6, "," )

  case cClassName == "RADIOBUTTON"
       cClassName = "Button"
       cCaption = StrToken( cLine, 2, '"' )
       cLine = StrToken( cLine, 1, '"' ) + '"-"' + SubStr( cLine, RAt( '"', cLine ) + 1 )
       cId  = StrToken( cLine, 2, "," )
       nTop = Val( StrToken( cLine, 3, "," ) )
       nLeft = Val( StrToken( cLine, 4, "," ) )
       nHeight = Val( StrToken( cLine, 5, "," ) )
       nWidth  = Val( StrToken( cLine, 6, "," ) )
       cStyle = StrToken( cLine, 7, "," )

   endcase        
   

   if Type( cId ) == "N"
      nId = Val( cId )
   else
      nId = cId
   endif      
   

   while ! Empty( cStyle )
      cToken = AllTrim( StrToken( cStyle, 1, "|" ) )
      

  if ( nAt := AScan( aStyles, { | a | cToken == a[ 1 ] } ) ) != 0
   	 nStyle = nOr( nStyle, aStyles[ nAt ][ 2 ] )
  else
     if SubStr( cToken, 1, 3 ) != "NOT"
        MsgAlert( "Style not found: " + cToken, "Please report this to FiveTech Software" ) 	 
     endif   
  endif	    
  if At( "|", cStyle ) != 0
     cStyle = SubStr( cStyle, At( "|", cStyle ) + 1 )
  else
     cStyle = ""
  endif      
   end   
   

   if lCode
      cClassName = Upper( cClassName )
      

  do case
     case cClassName == "EDIT"
          cClassName = "GET"
  
     case cClassName == "STATIC"
          cClassName = "SAY"
          
     case cClassName == "BUTTON" .and. nAnd( BS_GROUPBOX, nStyle ) == BS_GROUPBOX    
          cClassName = "GROUP"
  endcase
          
  cCode = "REDEFINE " + cClassName + " ID " + cId + " OF oDlg"
   endif        	           
   

return If( ! lCode, cCtrl2Chr( nLeft, nTop, nLeft + nWidth, nTop + nHeight, nId, nStyle,;
           cClassName, cCaption ), cCode )
   

//----------------------------------------------------------------------------//

function InitFWHControls()

   local oDlg, oCtrl
   

   DEFINE DIALOG oDlg
   

   @ 2, 2 LISTBOX oCtrl FIELDS "" OF oDlg
   

   @ 2, 2 BTNBMP oCtrl OF oDlg
   

   @ 2, 2 BITMAP oCtrl OF oDlg
   

   @ 2, 2 TABS oCtrl OF oDlg
   

   @ 2, 2 BROWSE oCtrl OF oDlg 
   

   @ 2, 2 METER oCtrl OF oDlg 
   

   @ 2, 2 FOLDER oCtrl OF oDlg
   

   @ 2, 2 XBROWSE oCtrl OF oDlg
   

   oCtrl:CreateFromCode()
   

   ACTIVATE DIALOG oDlg ;
      ON INIT oDlg:End()
      

return nil      

//----------------------------------------------------------------------------//

DLL32 FUNCTION BWCCRegister( hInst AS LONG ) AS WORD PASCAL LIB "BWCC32.DLL"

//----------------------------------------------------------------------------//

function InitControls( oDlg )

   local hDlg := oDlg:hWnd, hCtrl := GetWindow( hDlg, GW_CHILD ), oCtrl
   

   if hCtrl != 0
      oCtrl = TControl()
      oCtrl:oWnd = oDlg
      oCtrl:hWnd = hCtrl
      oCtrl:Link()
      AAdd( oDlg:aControls, oCtrl )
      oCtrl:lDrag = .T.
      oCtrl:bGotFocus = { || oCtrl:ShowDots() }
      oCtrl:nId = GetWindowLong( oCtrl:hWnd, GWL_ID )
      oCtrl:cTooltip = AllTrim( Str( oCtrl:nId ) )
      oCtrl:bLDblClick = GenDblClickBlock( oCtrl )
   endif    
   

   while hCtrl != 0
      hCtrl = GetWindow( hCtrl, GW_HWNDNEXT	)
      if hCtrl != 0
         oCtrl = TControl()
         oCtrl:oWnd = oDlg
         oCtrl:hWnd = hCtrl
         oCtrl:Link()
         AAdd( oDlg:aControls, oCtrl )
         oCtrl:lDrag = .T.
         oCtrl:bGotFocus = { || oCtrl:ShowDots() }
         oCtrl:nId = GetWindowLong( oCtrl:hWnd, GWL_ID )
         oCtrl:cTooltip = AllTrim( Str( oCtrl:nId ) )
         oCtrl:bLDblClick = GenDblClickBlock( oCtrl )
      endif    

   end
   

return nil       

//----------------------------------------------------------------------------//

static function GenDblClickBlock( oCtrl )

return { || MsgInfo( oCtrl:nId ) }

//----------------------------------------------------------------------------//
regards, saludos

Antonio Linares
www.fivetechsoft.com

Continue the discussion