If you send me an email and you don't get my answer...

Re: If you send me an email and you don't get my answer...

Postby driessen » Fri Jul 08, 2022 12:21 pm

Antonio,

No change.
Again an error :
Code: Select all  Expand view  RUN
Application Internal Error - C:\JUDA\JUDA_2.EXE
Terminated at: 2022-07-08 14:01:54
Unrecoverable error 6005: Exception error:

    Exception Code:C0000005 ACCESS_VIOLATION
    Exception Address:0042B334
    EAX:0019F354  EBX:00000000  ECX:00000003  EDX:01724F80
    ESI:00000000  EDI:00000000  EBP:0019F3A0
    CS:EIP:0023:0042B334  SS:ESP:002B:0019F2B8
    DS:002B  ES:002B  FS:0053  GS:002B
    Flags:00010246
    Exception Parameters: 00000000 0000000C
    CS:EIP: FF 73 0C E8 E6 06 1B 00 8B F0 85 F6 74 07 89 73
    SS:ESP: 0019F354 00B0BC2B 00000000 00CF7810 03460004 FFFFFFFF 000032C4 0401A001 00F95A8C 00000000 FFA01A98 FFFFFFFF 000032C4 0401A001 00F95A8C A0011A98

    C stack:
    EIP:     EBP:       Frame: OldEBP, RetAddr, Params...
    0042B334 0019F3A0   0019F3BC 004D82F4 00000037 00000000 0170EEF4 00000000 00000000
    004D82F4 0019F3BC   0019F4D0 004D20FE 00000003 00C193E0 00000000 00CF7810 00CF7810 00000041 00000000 0172B3FC
    004D20FE 0019F4D0   0019F4E0 00414208 00B0AF03 00B06C04
    00414208 0019F4E0   0019F4FC 004D82F4 00000031 00000000 0172B01C 00000000 00000609
    004D82F4 0019F4FC   0019F610 004D20FE 00000004 00CF7810 FFFFFFFF 016EF6BC 0019F528 004EFB75 0341A6E4 00CF7810
    004D20FE 0019F610   0019F644 004D866D 00C193D5 00C142D8 01724F14 00000004 00190004 004D85C0 0000002C 00000000
    004D866D 0019F644   0019F678 004E61CB 00000004 00C5448D 00000000 00C24B2C 004D84B1 00CF7810 00000024 00000000
    004E61CB 0019F678   0019F78C 004D21BC 00000003 00C4B889 00000000 00CF7810 016EF7BC 016EF85C 0019F6B0 004D9767
    004D21BC 0019F78C   0019F79C 0042395C 00C543B1 00C22FEC
    0042395C 0019F79C   0019F7B8 004D82F4 0000001F 00000000 0172B3FC 00000000 00003E88
    004D82F4 0019F7B8   0019F8CC 004D20FE 00000002 00CF7810 FFFFFFFF 016EF47C 00000000 016EF73C 0019F7F0 004D9767
    004D20FE 0019F8CC   0019F900 004D866D 00C4B882 00C22FEC 01724ED4 00000002 00190002 004D85C0 0000001C 00000000
    004D866D 0019F900   0019F934 004E61CB 00000002 00AEE31B 00000000 00AEBD80 004D84B1 00CF7810 0000000E 00000000
    004E61CB 0019F934   0019FA48 004D21BC 00000001 00AED055 00000000 00AEB7B0 00CF7810 0019F944 00000000 005D33D9
    004D21BC 0019FA48   0019FA58 00411F18 00AEDC7E 00AEB760
    00411F18 0019FA58   0019FA78 004D84B1 00CF7810 00000005 00000000 016F493C 007F0004 00000134
    004D84B1 0019FA78   0019FB8C 004D21BC 00000000 0172C7AC 0172C5F4 00AEB760 01140000 00000448 01182778 00CF89BC
    004D21BC 0019FB8C   0019FB9C 00411ED0 00AED004 00AEB760
    00411ED0 0019FB9C   0019FBBC 004D8411 016F918C 00000003 00000000 00000000 00000000 0000005A
    004D8411 0019FBBC   0019FBDC 005417CB 00000006 00000005 00000000 016F918C 00000000 0172F474


Modules:
00400000 00B52000 C:\JUDA\JUDA_2.EXE
775D0000 001AA000 C:\Windows\SYSTEM32\ntdll.dll
76340000 000F0000 C:\Windows\System32\KERNEL32.DLL
75DC0000 00257000 C:\Windows\System32\KERNELBASE.dll
761A0000 0007C000 C:\Windows\System32\ADVAPI32.DLL
756B0000 000C2000 C:\Windows\System32\msvcrt.dll
75A50000 0007A000 C:\Windows\System32\sechost.dll
755F0000 000BB000 C:\Windows\System32\RPCRT4.dll
757D0000 000C0000 C:\Windows\System32\COMDLG32.DLL
767D0000 00112000 C:\Windows\System32\ucrtbase.dll
75B30000 0028C000 C:\Windows\System32\combase.dll
77490000 000C1000 C:\Windows\System32\shcore.dll
76430000 0007B000 C:\Windows\System32\msvcp_win.dll
6B200000 0001A000 C:\Windows\SYSTEM32\MPR.DLL
73610000 00008000 C:\Windows\SYSTEM32\VERSION.DLL
6D4F0000 00074000 C:\Windows\SYSTEM32\WINSPOOL.DRV
753D0000 001AC000 C:\Windows\System32\USER32.dll
75900000 0001A000 C:\Windows\System32\win32u.dll
6CEA0000 00223000 C:\Windows\WinSxS\x86_microsoft.windows.common-controls_6595b64144ccf1df_6.0.22000.120_none_e541a94fcce8ed6d\COMCTL32.DLL
76120000 00022000 C:\Windows\System32\GDI32.dll
75920000 000DF000 C:\Windows\System32\gdi32full.dll
75780000 0004A000 C:\Windows\System32\SHLWAPI.dll
76A40000 0060C000 C:\Windows\System32\SHELL32.dll
768F0000 0014D000 C:\Windows\System32\OLE32.DLL
76720000 0009C000 C:\Windows\System32\OLEAUT32.DLL
75890000 00064000 C:\Windows\System32\WS2_32.DLL
6CB80000 00006000 C:\Windows\SYSTEM32\MSIMG32.DLL
6CE40000 00031000 C:\Windows\SYSTEM32\WINMM.DLL
7C700000 0002E000 C:\Windows\SYSTEM32\OLEDLG.DLL
6CB90000 0016B000 C:\Windows\WinSxS\x86_microsoft.windows.gdiplus_6595b64144ccf1df_1.1.22000.675_none_1631a6712776d946\GDIPLUS.DLL
73C70000 00024000 C:\Windows\SYSTEM32\IPHLPAPI.DLL
68D30000 00485000 C:\Windows\SYSTEM32\WININET.DLL
75A10000 00025000 C:\Windows\System32\IMM32.DLL
01750000 0009D000 M:\SOFTWARE\JUDA\DATA\fwdbg.dll

Called from GDIP_FROMHBITMAP(0)
Called from FW_READIMAGE(1545) in .\source\function\IMGTXTIO.PRG
Called from (b)TWINDOW(585) in .\source\classes\WINDOW.PRG
Called from TXBROWSE:READIMAGE(0) in .\source\classes\WINDOW.PRG
Called from FNADDBITMAP(16008) in .\source\classes\XBROWSE.PRG
Called from (b)TXBRWCOLUMN(12653) in .\source\classes\XBROWSE.PRG
Called from TXBRWCOLUMN:ADDRESOURCE(0) in .\source\classes\XBROWSE.PRG
Called from TDBG:ACTIVATE(308) in .\source\classes\FWDBG.PRG
Called from __DBGENTRY(90) in .\source\classes\FWDBG.PRG
Called from ERRORSYS(28) in .\Z-ERROR1.PRG
Called from __HBVMINIT(74) in ../../../harbinit.prg
------------------------------------------------------------------------
Application Internal Error - C:\JUDA\JUDA_2.EXE
Terminated at: 2022-07-08 14:18:59
Unrecoverable error 6005: Exception error:

    Exception Code:C0000005 ACCESS_VIOLATION
    Exception Address:0042C763
    EAX:0019F39C  EBX:00000000  ECX:00000001  EDX:02ED4F50
    ESI:00000000  EDI:00B0BCA0  EBP:0019F3A0
    CS:EIP:0023:0042C763  SS:ESP:002B:0019F37C
    DS:002B  ES:002B  FS:0053  GS:002B
    Flags:00010246
    Exception Parameters: 00000000 0000000C
    CS:EIP: FF 73 0C E8 7B EE 1A 00 8B F0 85 F6 74 07 89 73
    SS:ESP: 0019F39C 00B0BCA0 00000000 00CF7710 00000000 00CF7710 02ED4F50 0019F3BC 004D7E80 0019F3BC 004D7EB8 00000037 00000000 02EBEEA4 00000000 00000000

    C stack:
    EIP:     EBP:       Frame: OldEBP, RetAddr, Params...
    0042C763 0019F3A0   0019F3BC 004D7EB8 00000037 00000000 02EBEEA4 00000000 00000000
    004D7EB8 0019F3BC   0019F4D0 004D1CC2 00000001 00C19424 00000000 00CF7710 00CF7710 00000041 00000000 02EDB3CC
    004D1CC2 0019F4D0   0019F4E0 00414220 00B0AF47 00B06C48
    00414220 0019F4E0   0019F4FC 004D7EB8 00000031 00000000 02EDAFEC 00000000 0000060D
    004D7EB8 0019F4FC   0019F610 004D1CC2 00000004 00CF7710 FFFFFFFF 02E9F6BC 0019F528 004EF739 0342E7D4 00CF7710
    004D1CC2 0019F610   0019F644 004D8231 00C19419 00C1431C 02ED4EE4 00000004 00190004 004D8184 0000002C 00000000
    004D8231 0019F644   0019F678 004E5D8F 00000004 00C544D1 00000000 00C24B70 004D8075 00CF7710 00000024 00000000
    004E5D8F 0019F678   0019F78C 004D1D80 00000003 00C4B8CD 00000000 00CF7710 02E9F7BC 02E9F85C 0019F6B0 004D932B
    004D1D80 0019F78C   0019F79C 00423974 00C543F5 00C23030
    00423974 0019F79C   0019F7B8 004D7EB8 0000001F 00000000 02EDB3CC 00000000 00003E88
    004D7EB8 0019F7B8   0019F8CC 004D1CC2 00000002 00CF7710 FFFFFFFF 02E9F47C 00000000 02E9F73C 0019F7F0 004D932B
    004D1CC2 0019F8CC   0019F900 004D8231 00C4B8C6 00C23030 02ED4EA4 00000002 00190002 004D8184 0000001C 00000000
    004D8231 0019F900   0019F934 004E5D8F 00000002 00AEE35F 00000000 00AEBDC4 004D8075 00CF7710 0000000E 00000000
    004E5D8F 0019F934   0019FA48 004D1D80 00000001 00AED099 00000000 00AEB7F4 00CF7710 0019F944 00000000 005D2F9D
    004D1D80 0019FA48   0019FA58 00411F30 00AEDCC2 00AEB7A4
    00411F30 0019FA58   0019FA78 004D8075 00CF7710 00000005 00000000 02EA4C14 007F0004 00000134
    004D8075 0019FA78   0019FB8C 004D1D80 00000000 02EDC77C 02EDC5C4 00AEB7A4 01170000 00000448 011B28C0 00CF88BC
    004D1D80 0019FB8C   0019FB9C 00411EE8 00AED048 00AEB7A4
    00411EE8 0019FB9C   0019FBBC 004D7FD5 02EA9494 00000003 00000000 00000000 00000000 0000005A
    004D7FD5 0019FBBC   0019FBDC 0054138F 00000006 00000005 00000000 02EA9494 00000000 02EDF444


Modules:
00400000 00B52000 C:\JUDA\JUDA_2.EXE
775D0000 001AA000 C:\Windows\SYSTEM32\ntdll.dll
76340000 000F0000 C:\Windows\System32\KERNEL32.DLL
75DC0000 00257000 C:\Windows\System32\KERNELBASE.dll
761A0000 0007C000 C:\Windows\System32\ADVAPI32.DLL
756B0000 000C2000 C:\Windows\System32\msvcrt.dll
75A50000 0007A000 C:\Windows\System32\sechost.dll
755F0000 000BB000 C:\Windows\System32\RPCRT4.dll
757D0000 000C0000 C:\Windows\System32\COMDLG32.DLL
767D0000 00112000 C:\Windows\System32\ucrtbase.dll
75B30000 0028C000 C:\Windows\System32\combase.dll
77490000 000C1000 C:\Windows\System32\shcore.dll
73610000 00008000 C:\Windows\SYSTEM32\VERSION.DLL
6D4F0000 00074000 C:\Windows\SYSTEM32\WINSPOOL.DRV
76430000 0007B000 C:\Windows\System32\msvcp_win.dll
6B200000 0001A000 C:\Windows\SYSTEM32\MPR.DLL
753D0000 001AC000 C:\Windows\System32\USER32.dll
75900000 0001A000 C:\Windows\System32\win32u.dll
6CEA0000 00223000 C:\Windows\WinSxS\x86_microsoft.windows.common-controls_6595b64144ccf1df_6.0.22000.120_none_e541a94fcce8ed6d\COMCTL32.DLL
76120000 00022000 C:\Windows\System32\GDI32.dll
75920000 000DF000 C:\Windows\System32\gdi32full.dll
75780000 0004A000 C:\Windows\System32\SHLWAPI.dll
76A40000 0060C000 C:\Windows\System32\SHELL32.dll
768F0000 0014D000 C:\Windows\System32\OLE32.DLL
76720000 0009C000 C:\Windows\System32\OLEAUT32.DLL
6CB80000 00006000 C:\Windows\SYSTEM32\MSIMG32.DLL
6CE40000 00031000 C:\Windows\SYSTEM32\WINMM.DLL
75890000 00064000 C:\Windows\System32\WS2_32.DLL
7C700000 0002E000 C:\Windows\SYSTEM32\OLEDLG.DLL
6CB90000 0016B000 C:\Windows\WinSxS\x86_microsoft.windows.gdiplus_6595b64144ccf1df_1.1.22000.675_none_1631a6712776d946\GDIPLUS.DLL
68D30000 00485000 C:\Windows\SYSTEM32\WININET.DLL
73C70000 00024000 C:\Windows\SYSTEM32\IPHLPAPI.DLL
75A10000 00025000 C:\Windows\System32\IMM32.DLL
02F00000 0009D000 M:\SOFTWARE\JUDA\DATA\fwdbg.dll

Called from GDIP_IMAGEINFO(0)
Called from FW_READIMAGE(1549) in .\source\function\IMGTXTIO.PRG
Called from (b)TWINDOW(585) in .\source\classes\WINDOW.PRG
Called from TXBROWSE:READIMAGE(0) in .\source\classes\WINDOW.PRG
Called from FNADDBITMAP(16008) in .\source\classes\XBROWSE.PRG
Called from (b)TXBRWCOLUMN(12653) in .\source\classes\XBROWSE.PRG
Called from TXBRWCOLUMN:ADDRESOURCE(0) in .\source\classes\XBROWSE.PRG
Called from TDBG:ACTIVATE(308) in .\source\classes\FWDBG.PRG
Called from __DBGENTRY(90) in .\source\classes\FWDBG.PRG
Called from ERRORSYS(28) in .\Z-ERROR1.PRG
Called from __HBVMINIT(74) in ../../../harbinit.prg
------------------------------------------------------------------------
 
Regards,

Michel D.
Genk (Belgium)
_____________________________________________________________________________________________
I use : FiveWin for (x)Harbour v. 24.07 - Harbour 3.2.0 (February 2024) - xHarbour Builder (January 2020) - Bcc773
User avatar
driessen
 
Posts: 1422
Joined: Mon Oct 10, 2005 11:26 am
Location: Genk, Belgium

Re: If you send me an email and you don't get my answer...

Postby Antonio Linares » Fri Jul 08, 2022 12:22 pm

Dear Michel,

You use a modified error system in Z-ERROR1.PRG, is it so ?

Could you please share it with me ?
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42121
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: If you send me an email and you don't get my answer...

Postby Antonio Linares » Fri Jul 08, 2022 12:23 pm

Please try with this dummy function now, thanks

function FW_READIMAGE()

return nil
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42121
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: If you send me an email and you don't get my answer...

Postby driessen » Fri Jul 08, 2022 12:30 pm

Antonio,

Z_ERROR1.prg is only a change to shorten the log-file and to translate the remarks into Dutch.
But I will build my application with the standard errorsysw.prg, and let you know.
Regards,

Michel D.
Genk (Belgium)
_____________________________________________________________________________________________
I use : FiveWin for (x)Harbour v. 24.07 - Harbour 3.2.0 (February 2024) - xHarbour Builder (January 2020) - Bcc773
User avatar
driessen
 
Posts: 1422
Joined: Mon Oct 10, 2005 11:26 am
Location: Genk, Belgium

Re: If you send me an email and you don't get my answer...

Postby Antonio Linares » Fri Jul 08, 2022 12:49 pm

Dear Michel,

In the meantime we are checking why the function GDIP_FROMHBITMAP() is GPFing

we will solve it real soon

many thanks
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42121
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: If you send me an email and you don't get my answer...

Postby driessen » Fri Jul 08, 2022 12:52 pm

Antonio,

Your suggestion concerning errorsysw.prg did the trick.
There must be an error in my Z-ERROR1.PRG.
In normal mode it is just working fine.
It generates an error in debugging mode.
But it is no problem for me to exclude my z-error1.prg in debugging mode.
I'll check my Z-ERROR1.PRG later.
Thanks a lot for your help.
Now I'm going to try it in FWH 22.06.
Have a nice weekend.
Regards,

Michel D.
Genk (Belgium)
_____________________________________________________________________________________________
I use : FiveWin for (x)Harbour v. 24.07 - Harbour 3.2.0 (February 2024) - xHarbour Builder (January 2020) - Bcc773
User avatar
driessen
 
Posts: 1422
Joined: Mon Oct 10, 2005 11:26 am
Location: Genk, Belgium

Re: If you send me an email and you don't get my answer...

Postby Antonio Linares » Fri Jul 08, 2022 2:25 pm

Dear Michel,

So glad that you can continue your work :-)

If you send me your Z-ERROR1.PRG I will have a look at it. I am curious to find the reason.

Have a nice weekend you too
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42121
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: If you send me an email and you don't get my answer...

Postby driessen » Fri Jul 08, 2022 2:27 pm

Antonio,

How do I send it to you, since my e-mails vanish? :-)

Thanks.
Regards,

Michel D.
Genk (Belgium)
_____________________________________________________________________________________________
I use : FiveWin for (x)Harbour v. 24.07 - Harbour 3.2.0 (February 2024) - xHarbour Builder (January 2020) - Bcc773
User avatar
driessen
 
Posts: 1422
Joined: Mon Oct 10, 2005 11:26 am
Location: Genk, Belgium

Re: If you send me an email and you don't get my answer...

Postby Antonio Linares » Fri Jul 08, 2022 4:44 pm

Dear Michel,

Could you post it here ? :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42121
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: If you send me an email and you don't get my answer...

Postby carlos vargas » Fri Jul 08, 2022 5:54 pm

Antonio, al utilizar el control calendar con mingw,
da que estas tres funciones no estan definidas
d:/compiler/mingw/bin/../lib/gcc/i686-w64-mingw32/11.2.0/../../../../i686-w64-mingw32/bin/ld.exe: d:/fwh/lib\libfivehc.a(CALENDAR.o):CALENDAR.C:(.text+0xd6): undefined reference to `MonthCal_SetCurrentView'
d:/compiler/mingw/bin/../lib/gcc/i686-w64-mingw32/11.2.0/../../../../i686-w64-mingw32/bin/ld.exe: d:/fwh/lib\libfivehc.a(CALENDAR.o):CALENDAR.C:(.text+0xf7): undefined reference to `MonthCal_GetCurrentView'
d:/compiler/mingw/bin/../lib/gcc/i686-w64-mingw32/11.2.0/../../../../i686-w64-mingw32/bin/ld.exe: d:/fwh/lib\libfivehc.a(CALENDAR.o):CALENDAR.C:(.text+0x572): undefined reference to `MonthCal_SizeRectToMin'

he revisado y al parecer estas funciones son definidas como macros o algo asi en commctrl.h
ejemplo
#define MonthCal_SetCurrentView(hmc, dwNewView) (WINBOOL)SNDMSG (hmc, MCM_SETCURRENTVIEW, 0,(LPARAM) (dwNewView))

y he notado que un poco mas arriba hay una compilacion condicional
#if NTDDI_VERSION >= 0x06000000

tal vez por eso no son incluidas, podrias revisar por fa, esto con fw2111

he estado trabajando mis app con vc2022 y con mingw 11.2 y es una gozada poder seleccionar que compilador c usar, todo funciona a como debe, gracias antonio.

salu2
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
User avatar
carlos vargas
 
Posts: 1721
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: If you send me an email and you don't get my answer...

Postby driessen » Fri Jul 08, 2022 10:22 pm

Antonio,

Here is Z-ERROR1.PRG :
Code: Select all  Expand view  RUN
******************************************************************************
*                                                                            *
*   Program : Z-ERROR1.PRG                                                   *
*   Auteur  : DRIESSEN MICHEL                                                *
*   Datum   : 30/06/2022 - Juda - Harbour - xHarbour                         *
*                                                                            *
*   Doel    : Aangepaste ERRORSYSW function (22.03) voor Juda-gebruik        *
*                                                                            *
******************************************************************************
// Error handler system adapted to FiveWin
// ErrSysW.prg
******************************************************************************
#INCLUDE "ERROR.CH"
#INCLUDE "FIVEWIN.CH"
#INCLUDE "MAIL.CH"
******************************************************************************
#DEFINE DEFAULT(xVar,xVal) xVar=IF(xVar=NIL,xVal,xVar)
EXTERNAL _FWGENERROR   // Link FiveWin generic Error Objects Generator
#DEFINE NTRIM(n)    ( LTrim( Str( n ) ) )
********************** GEWIJZIGD DOOR MICHEL DRIESSEN ************************
#COMMAND QUIT => ( PostQuitMessage( 0 ), __Quit() )
********************** TOEGEVOEGD DOOR MICHEL DRIESSEN ***********************
#DEFINE olMailItem 0
******************************************************************************

proc ErrorSys()

    COMMIT
   
    ErrorBlock( { | e | ErrorDialog( e ) } )

return

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

procedure ErrorLink()

return

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

function SetErrorPath( cPath )

   local cOldPath
   static cErrorPath := ".\"

   cOldPath = cErrorPath

   if PCount() == 1 .and. ValType( cPath ) == "
C"
      cErrorPath = cPath
   endif

return cOldPath

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

********************** GEWIJZIGD DOOR MICHEL DRIESSEN ************************
*function ErrorDialog( e ) // -> logical or quits App.
function ErrorDialog( e ,qRet ) // -> logical or quits App.
******************************************************************************

   local oDlg, oLbx, oFont
   local lRet    // if lRet == nil -> default action: QUIT
   local n, j, cMessage, aStack := {}
   local oSay, hLogo
   local nButtons  := 1
   local cErrorLog := "
"
   local dErrorLog := "
"
   local rErrorLog := "
"
   local aVersions := GetVersion()
   local aTasks
   local aRDDs, nTarget, uValue
   local oOldError
   local cRelation
   local lIsWinNT  := IsWinNT()

   local nProcBest := "
"
********************** GEWIJZIGD DOOR MICHEL DRIESSEN ************************
    local EmSend    := .T.
   local ErOutlook,ErMail,ErNameSpace
******************************************************************************

   DEFAULT(qRet,.F.)
   
   // by default, division by zero yields zero
   if ( e:genCode == EG_ZERODIV )
      return 0
   end

   // for network open error, set NETERR() and subsystem default
   if ( e:genCode == EG_OPEN .and. ;
      ( e:osCode == 32 .or. e:osCode == 5 ) .and. ;
        e:canDefault )
      NetErr( .t. )
      return .f.       // Warning: Exiting!
   end

   // for lock error during APPEND BLANK, set NETERR() and subsystem default
   if ( e:genCode == EG_APPENDLOCK .and. e:canDefault )
      NetErr( .t. )
      return .f.       // OJO SALIDA
   endif

   if Left( ProcName( 7 ), 10 ) == "
ERRORDIALO"
      SET RESOURCES TO
      ErrorLevel( 1 )
********************** GEWIJZIGD DOOR MICHEL DRIESSEN ************************
      CLOSE ALL
      IF xBitMap <> "
..\" .AND. LISDIR("F:\" + CURDIR()) ; WinExec("C:\DOS\COMMAND\JUDASTOP.BAT",0) ; ENDIF
******************************************************************************
      QUIT
   endif

   cErrorLog += "
Applicatie" + CRLF
   cErrorLog += "
==========" + CRLF + CRLF
   cErrorLog += "
  Pad en naam           : " + GetModuleFileName( GetInstance() ) + CRLF
*  cErrorLog += "
  Grootte               : " + Transform( FSize( GetModuleFileName( GetInstance() ) ), "9,999,999 bytes" )
   cErrorLog += "
  Grootte               : " + ALLTRIM(Transform( FSize( GetModuleFileName( GetInstance() ) ), "999,999,999 bytes" ))
   #ifdef __CLIPPER__
      cErrorLog += "
(16 bits)" + CRLF
      cErrorLog += "
  Max. files handles    : " + Str( SetHandleCount(), 3 ) + CRLF
   #else
      cErrorLog += If( IsExe64(),"
(64 bits)", " (32 bits)" ) + CRLF
   #endif

   cErrorLog += "
  Tijd sedert opstarten : " + TimeFromStart() + CRLF
   cErrorLog += "
  Tijdstip foutmelding  : " + DTOC( Date() ) + ", " + Time() + CRLF
   cErrorLog += "
  Omschr. foutmelding   : " + ErrorMessage( e ) + CRLF
   IF xUser
      cErrorLog += CRLF + "
  Gebruiker             : " + ALLTRIM(US->USERNAAM) + CRLF
   ELSE
      cErrorLog += CRLF + "
  Gebruiker             : " + ALLTRIM(WNETGETUSER()) + CRLF
   ENDIF
   cMessage  := "
Omschrijving foutmelding :" + CRLF + ErrorMessage( e )

   if ValType( e:Args ) == "
A"
      cErrorLog += "
  Args:" + CRLF
      for n = 1 to Len( e:Args )
         cErrorLog += "
    [" + Str( n, 4 ) + "] = " + ValType( e:Args[ n ] ) + ;
                      "
  " + cValToChar( cValToChar( e:Args[ n ] ) ) + ;
                      If( ValType( e:Args[ n ] ) == "
A", " length: " + ;
                      AllTrim( Str( Len( e:Args[ n ] ) ) ), "
" ) + CRLF
      next
   endif
   
   cErrorLog += CRLF + "
Opgeroepen in :" + CRLF
   cErrorLog += "
===============" + CRLF + CRLF

********************** GEWIJZIGD DOOR MICHEL DRIESSEN ************************
*  n := 2    // we don't disscard any info again !
   n := IF(qRet,1,2)   // we don't disscard any info again !
******************************************************************************
   while ( n < 74 )
       if ! Empty(ProcName( n ) )
           nProcBest := ALLTRIM(LEFT(ProcFile( n ),AT("
.PRG",UPPER(ProcFile( n ))) - 1))
           DO WHILE AT("
\",nProcBest) <> 0
               nProcBest := RIGHT(nProcBest,LEN(nProcBest)-AT("
\",nProcBest))
           ENDDO
          AAdd( aStack, nProcBest + IF(EMPTY(nProcBest),"
"," => ") + Trim( ProcName( n ) ) + ;
                        "
(" + NTRIM( ProcLine( n ) ) + ")" )
*         AAdd( aStack, ProcFile( n ) + "
=> " + Trim( ProcName( n ) ) + ;
*                       "
(" + NTRIM( ProcLine( n ) ) + ")" )
          cErrorLog += ATail( aStack ) + CRLF
       endif
       n++
   end
   
   if tErrTest = 1
      cErrorlog += CRLF
      if tErrTest = 1 .OR. tErrTest = 3 .OR. tErrTest = 4 .OR. tErrTest = 6
         Aadd( aStack, "
  Numerische waarde     : " + STR(tErrGetal) )
         cErrorLog += ATail( aStack ) + CRLF
      endif
      if tErrTest = 2 .OR. tErrTest = 3 .OR. tErrTest = 5 .OR. tErrTest = 6
         Aadd( aStack, "
  Alfanumerische waarde : " + ALLTRIM(tErrLetter) )
         cErrorLog += ATail( aStack ) + CRLF
      endif
      if tErrTest = 4 .OR. tErrTest = 5 .OR. tErrTest = 6
         Aadd( aStack, "
  Waar of Onwaar        : " + IF(tErrTrue,"W","Onw")+"aar" )
         cErrorLog += ATail( aStack ) + CRLF
      endif
   endif
   
   dErrorLog += CRLF + "
Systeem" + CRLF
   dErrorLog += "
=======" + CRLF + CRLF

   #ifdef __CLIPPER__
      dErrorLog += "
  CPU type                  : " + ALLTRIM(GetCPU()) + CRLF
   #else
    if ! IsExe64()
         dErrorLog += "
  CPU type                  : " + ALLTRIM(GetCPU()) + " " + ;
                      AllTrim( Str( GetCPUSpeed() ) ) + "
Mhz" + CRLF
      endif
   #endif
   
   dErrorLog += "
  Hardware geheugen         : " + ;
                cValToChar( Int( nExtMem() / ( 1024 * 1024 ) ) + 1 ) + ;
                "
Mbytes" + CRLF + CRLF

   dErrorLog += "
  Vrije System resources    : " + AllTrim( Str( GetFreeSystemResources( 0 ) ) ) + " %" + CRLF + ;
                "
        GDI    resources    : " + AllTrim( Str( GetFreeSystemResources( 1 ) ) ) + " %" + CRLF + ;
                "
        User   resources    : " + AllTrim( Str( GetFreeSystemResources( 2 ) ) ) + " %" + CRLF + CRLF

   dErrorLog += "
  Compiler versie           : " + Version() + CRLF

   #ifdef __CLIPPER__
      dErrorLog += "
  Windows en MS-DOS versies : " + ;
                   AllTrim( Str( aVersions[ 1 ] ) ) + "
." + ;
                   AllTrim( Str( aVersions[ 2 ] ) ) + "
, " + ;
                   AllTrim( Str( aVersions[ 3 ] ) ) + "
." + ;
                   AllTrim( Str( aVersions[ 4 ] ) ) + CRLF + CRLF
   #else
      dErrorLog += "
  Windows versie            : " + ;
                   AllTrim( Str( aVersions[ 1 ] ) ) + "
." + ;
                   AllTrim( Str( aVersions[ 2 ] ) ) + "
, Build " + ;
                   AllTrim( Str( aVersions[ 3 ] ) ) + ;
                   "
" + aVersions[ 5 ] + CRLF + CRLF
   #endif

   aTasks = GetTasks()
   dErrorLog += "
  Windows total applications running: " + ;
              AllTrim( Str( Len( aTasks ) ) ) + CRLF
   for n = 1 to Len( aTasks )
       dErrorLog += "
   " + Str( n, 3 ) + " " + aTasks[ n ] + CRLF
   next

   if !xUser .OR. MicTest <> 0
      cErrorLog += dErrorLog
      dErrorLog := "
"
   endif

   // Warning!!! Keep here this code !!! Or we will be consuming GDI as
   // we don't generate the error but we were generating the bitmap

   if e:canRetry
      nButtons++
   endif

   if e:canDefault
      nButtons++
   endif

   dErrorLog += CRLF + "
Variables in use" + CRLF + "================" + CRLF + CRLF
   dErrorLog += "
  Procedure     Type   Value" + CRLF
   dErrorLog += "
  ==========================" + CRLF

   n := 2    // we don't disscard any info again !
   while ( n < 74 )

       if ! Empty( ProcName( n ) )
          dErrorLog += "
  " + Trim( ProcName( n ) ) + CRLF
          for j = 1 to ParamCount( n )
             dErrorLog += "
    Param " + Str( j, 3 ) + ":    " + ;
                          ValType( GetParam( n, j ) ) + ;
                          "
   " + cGetInfo( GetParam( n, j ) ) + CRLF
          next
          for j = 1 to LocalCount( n )
             dErrorLog += "
    Local " + Str( j, 3 ) + ":    " + ;
                          ValType( GetLocal( n, j ) ) + ;
                          "
   " + cGetInfo( GetLocal( n, j ) ) + CRLF
          next
       endif

       n++
   end

   dErrorLog += CRLF + "
Linked RDDs" + CRLF + "===========" + CRLF + CRLF
   aRDDs = RddList( 1 )
   for n = 1 to Len( aRDDs )
      dErrorLog += "
  " + aRDDs[ n ] + CRLF
   next

   dErrorLog += CRLF + "
DataBases in use" + CRLF + "================" + CRLF + CRLF
   for n = 1 to 255
       if ! Empty( Alias( n ) )
          dErrorLog += CRLF + Str( n, 3 ) + "
: " + If( Select() == n,"=> ", "   " ) + ;
                       PadR( Alias( n ), 15 ) + Space( 20 ) + "
RddName: " + ;
                       ( Alias( n ) )->( RddName() ) + CRLF
          dErrorLog += "
    ==============================" + CRLF
          dErrorLog += "
    RecNo    RecCount    BOF   EOF" + CRLF
          dErrorLog += "
   " + Transform( ( Alias( n ) )->( RecNo() ), "9999999" ) + ;
                       "
     " + Transform( ( Alias( n ) )->( RecCount() ), "9999999" ) + ;
                       "
     " + cValToChar( ( Alias( n ) )->( BoF() ) ) + ;
                       "
  " + cValToChar( ( Alias( n ) )->( EoF() ) ) + CRLF + CRLF

          if ( Alias( n ) )->( RddName() ) != "
ARRAYRDD"
             dErrorLog += "
    Indexes in use " + Space( 23 ) + "TagName" + CRLF
             for j = 1 to 15
                 if ! Empty( ( Alias( n ) )->( IndexKey( j ) ) )
                    dErrorLog += Space( 8 ) + ;
                                 If( ( Alias( n ) )->( IndexOrd() ) == j, "
=> ", "   " ) + ;
                                 PadR( ( Alias( n ) )->( IndexKey( j ) ), 35 ) + ;
                                 ( Alias( n ) )->( OrdName( j ) ) + ;
                                 CRLF
                 endif
             next
             dErrorLog += CRLF + "
    Relations in use" + CRLF
             for j = 1 to 8
                 if ! Empty( ( nTarget := ( Alias( n ) )->( DbRSelect( j ) ) ) )
                    dErrorLog += Space( 8 ) + Str( j ) + "
: " + ;
                                 "
TO " + ( Alias( n ) )->( DbRelation( j ) ) + ;
                                 "
INTO " + Alias( nTarget ) + CRLF
                    // uValue = ( Alias( n ) )->( DbRelation( j ) )
                    // dErrorLog += cValToChar( &( uValue ) ) + CRLF
                 endif
             next
          endif
       endif
   next

   if !xUser .OR. MicTest <> 0
       cErrorLog += dErrorLog
       dErrorLog := "
"
   endif

   n = 1
   dErrorLog += CRLF + "
Classes in use:" + CRLF
   dErrorLog += "
===============" + CRLF + CRLF

   #ifndef __XHARBOUR__
      while ! Empty( __ClassName( n ) )
         dErrorLog += "
  " + Str( n, 3 ) + " " + __ClassName( n++ ) + CRLF
      end
   #else
      while n <= __ClsCntClasses()
         dErrorLog += "
  " + Str( n, 3 ) + " " + __ClassName( n++ ) + CRLF
      end
   #endif

   if !xUser .OR. MicTest <> 0
      cErrorLog += dErrorLog
      dErrorLog := "
"
   endif

   dErrorLog += CRLF + "
Geheugen analyse" + CRLF
   dErrorLog +=        "
================" + CRLF + CRLF

   #ifdef __CLIPPER__
      dErrorLog += "
  Statisch geheugen :" + CRLF + CRLF
      dErrorLog += "
     data segment     : 64k" + CRLF
   #endif

   #ifdef __CLIPPER__
   dErrorLog += "
     Initiele grootte : " + ;
                LTrim( Str( nInitDSSize() ) ) + ;
                "
bytes  (SYMP=" + LTrim( Str( nSymPSize() ) ) + ;
                "
, Stack=" + LTrim( Str( nStackSize() ) ) + ;
                "
, Heap=" + LTrim( Str( nHeapSize() ) ) + ")" + CRLF
   dErrorLog += "
     PRG stack        : " + ;
                LTrim( Str( 65535 - ( nStatics() * 14 ) - nInitDSSize() ) ) + ;
                "
bytes" + CRLF
   #endif

   #ifdef __CLIPPER__
      dErrorLog += "
     " + LTrim( Str( nStatics() ) ) + " Static variables: " + ;
                   LTrim( Str( nStatics() * 14 ) ) + "
bytes" + CRLF + CRLF
   #else
      dErrorLog += "
     " + LTrim( Str( nStatics() ) ) + " Static variables" + ;
                   CRLF + CRLF
   #endif

   dErrorLog += "
  Dynamisch geheugen gebruik :" + CRLF + CRLF
   dErrorLog += "
     Actuele waarde : " + Str( MemUsed() ) + " bytes" + CRLF
   dErrorLog += "
     Hoogste waarde : " + Str( MemMax() ) + " bytes" + CRLF

   if !xUser .OR. MicTest <> 0
       cErrorLog += dErrorLog
       dErrorLog := "
"
   endif

   // Generates a file with an Error Log

   BEGIN SEQUENCE
      oOldError = ErrorBlock( { || DoBreak() } )
      IF FILE(SetErrorPath() + IF(xHidFile,"
Error.log","Error"+pUSER+".log"))
         rErrorLog := CRLF + CRLF + REPLICATE("
=",80) + CRLF + CRLF + MemoRead(SetErrorPath() + IF(xHidFile,"Error.log","Error"+pUSER+".log"))
      ELSE
         rErrorLog := "
"
      ENDIF
      MemoWrit(SetErrorPath() + IF(xHidFile,"
Error.log","Error"+pUSER+".log"), cErrorLog + rErrorLog)
   END SEQUENCE
   ErrorBlock( oOldError )

   IF xUser .AND. US->UOUTEMAIL .AND. US->UERREMAIL .AND. US->UOUTLOLE = 1

      EmFile := SetErrorPath() + IF(xHidFile,"
Error.log","Error"+pUSER+".log")

      SYSREFRESH()

      TRY
         GetActiveObject("
Outlook.Application")
      CATCH
         ShellExecute(,"
Open","Outlook",,,7)
      END
      TRY
         ErOutLook   := TOleAuto():New("
Outlook.Application")
         ErNameSpace := ErOutLook:GetNameSpace("
MAPI")
         EmSend      := .T.
      CATCH
         EmSend      := .F.
      END
        TRY
         IF EmSend
            ErMail         := ErOutlook:CreateItem(olMailItem)
            ErMail:Subject := ALLTRIM("
Juda(32)-foutmelding - " + ALLTRIM(PAR->GKANTOOR))
            ErMail:Body    := "
Klant : " + ALLTRIM(PAR->GKANTOOR) + CRLF + "Gebruiker : " + ALLTRIM(US->USERNAAM) + CRLF + "Datum : " + DTOC(DATE()) + CRLF + "Uur : " + TIME() + CRLF + CRLF + "Juda(32)-foutmelding : zie bijlage !!!"
            ErMail:Recipients:Add("
michel.driessen@ma-consult.be")
            ErMail:Attachments:Add(EmFile)
            ErMail:Send()
            MsgAlert("
Er heeft zich een fout in Juda voorgedaan !!!" + CHR(13) + CHR(13) + "Er zal nu een email-bericht samengesteld die"+CHR(13)+"deze foutmelding verstuurt naar M&A Consult." + CHR(13) + CHR(13) + "Daarna zal Juda afgesloten worden.","JUDA-foutmelding")
         ENDIF
      CATCH
        EmSend := .F.
      END

      SYSREFRESH()

   ENDIF

   IF !(xUser .AND. US->UOUTEMAIL .AND. US->UERREMAIL .AND. US->UOUTLOLE = 1) .OR. !EmSend

      hLogo = FWLogoBitMap()

      DEFINE DIALOG oDlg ;
         SIZE 450, 345 + If( lIsWinNT, 50, 0 ) ;
         TITLE "
Juda v. " + ALLTRIM(xJUDAVERS) + " dd. " + ALLTRIM(xDATVERS) + " - foutmelding"
      oDlg:lTruePixel   := .f.

      @ 0, 20 SAY oSay PROMPT OemToAnsi( cMessage ) ;
         CENTERED OF oDlg FONT oFont SIZE 400, 20

      oSay:nStyle   = nOR( oSay:nStyle, 128 )   // SS_NOPREFIX
      oSay:nTop     =   3
      oSay:nLeft    =  52
      oSay:nBottom  =  45
      oSay:nRight   = 168

      @ 43,   6 SAY "
Stacklijst : (zie "+CHR(34)+IF(xHidFile,"Error.log","Error"+pUSER+".log")+CHR(34)+" bestand)" OF oDlg FONT oFont PIXEL

      n = aStack[ 1 ]

      @ 56, 3 LISTBOX oLbx VAR n ITEMS aStack OF oDlg ;
         SIZE 220, 104 + If( lIsWinNT, 18, 0 ) PIXEL

      if e:CanRetry
         @ 158 + If( lIsWinNT, 24, 0 ), If( nButtons == 2, 132, 43 ) BUTTON "
&Opnieuw" ;
            OF oDlg ACTION ( lRet  := .t., oDlg:End() ) ;
            SIZE 30, 11 FONT oFont PIXEL
      endif

      if nButtons == 1 .or. nButtons == 3
         @ 158 + If( lIsWinNT, 24, 0 ), 96 BUTTON "
&Einde" OF oDlg ACTION oDlg:End() ;
            SIZE 30, 11 PIXEL FONT oFont DEFAULT
      else
         @ 158 + If( lIsWinNT, 24, 0 ), 65 BUTTON "
&Einde" OF oDlg ACTION oDlg:End() ;
            SIZE 30, 11 PIXEL FONT oFont
      endif

      if e:CanDefault
         @ 158 + If( lIsWinNT, 24, 0 ), 128 + If( nButtons == 3, 20, 0 ) BUTTON "
&Default"  OF oDlg ;
            ACTION ( lRet  := .f., oDlg:End() ) ;
            SIZE 30, 11 FONT oFont PIXEL
      endif

      @ 41, 160 BUTTON "
Bekijk error.log" OF oDlg FONT oFont PIXEL ;
         SIZE 60, 10 ;
         ACTION WinExec( "
Notepad.exe " + SetErrorPath() + IF(xHidFile,"Error.log","Error"+pUSER+".log") )

      ACTIVATE DIALOG oDlg CENTERED ;
         ON PAINT DrawBitmap( hDC, hLogo, 6, 6 )

      DeleteObject( hLogo )
     
   ELSE

        ErMail    := NIL
    ErOutlook := NIL

   ENDIF

   if lRet == nil .or. ( !LWRunning() .and. lRet )

      IF xUser .AND. xUole .AND. xUoleLaad
         FOR i=1 TO 2
             TRY
                IF US->USAVEOPSL
                   MacWait() ; &("
JuWole"+STR(i,1,0)):Run("JUD_OPSLAAN")
                ELSE
                   TRY
                      DocWait() ; &("
JuDoc"+STR(i,1,0)):Save()
                   CATCH
                      &("
JuWole"+STR(i,1,0)):Run("JUD_OPSLAAN")
                   END
                ENDIF
                 &("
JuDoc"+STR(i,1,0)):Close(0)
                 &("
JuDoc"+STR(i,1,0)) := NIL
                SYSWAIT(0.5)
             CATCH
             END
             TRY
                &("
JuWole"+STR(i,1,0)):Quit()
             CATCH
             END
         NEXT
         TRY
            IF US->USAVEOPSL
               MacWait() ; JuWoleT:Run("
JUD_OPSLAAN")
            ELSE
               TRY
                  DocWait() ; JuDocT:Save()
               CATCH
                  JuWoleT:Run("
JUD_OPSLAAN")
               END
            ENDIF
            JuDocT:Close(0)
            JuDocT := NIL
            SYSWAIT(0.5)
         CATCH
         END
         TRY
            JuWoleT:Quit()
         CATCH
         END
      ENDIF
     
      TRY
         oBook:Close()
         SYSREFRESH()
         oExcel:Quit()
      CATCH
      END

      SET RESOURCES TO
      ErrorLevel( 1 )

********************** GEWIJZIGD DOOR MICHEL DRIESSEN ************************
      CLOSE ALL
      IF xBitMap <> "
..\" .AND. LISDIR("F:\" + CURDIR()) ; WinExec("C:\DOS\COMMAND\JUDASTOP.BAT",0) ; ENDIF
******************************************************************************
      QUIT              // must be QUIT !!!

   endif

return lRet

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

STATIC PROCEDURE DocWait

   IF US->UDOCWAIT <> 0 ; SYSWAIT(US->UDOCWAIT) ; ENDIF
   SYSREFRESH()

RETURN

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

STATIC PROCEDURE MacWait

   IF US->UMACWAIT <> 0 ; SYSWAIT(US->UMACWAIT) ; ENDIF
   SYSREFRESH()

RETURN

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

static function DoBreak()

   BREAK

return nil

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

static func ErrorMessage( e )

   // start error message
    local cMessage := if( empty( e:OsCode ), ;
                          if( e:severity > ES_WARNING, "
Error ", "Warning " ),;
                          "
(DOS Error " + NTRIM(e:osCode) + ") " )

   // add subsystem name if available
    cMessage += if( ValType( e:SubSystem ) == "
C",;
                    e:SubSystem()                ,;
                    "
???" )

   // add subsystem's error code if available
    cMessage += if( ValType( e:SubCode ) == "
N",;
                    "
/" + NTRIM( e:SubCode )   ,;
                    "
/???" )
   // add error description if available
  if ( ValType( e:Description ) == "
C" )
        cMessage += "
 " + e:Description
   end

   // add either filename or operation
    cMessage += if( ! Empty( e:FileName ),;
                    "
: " + e:FileName   ,;
                    if( !Empty( e:Operation ),;
                        "
: " + e:Operation   ,;
                        "
" ) )
return cMessage

//----------------------------------------------------------------------------//
// returns extended info for a certain variable type

static function cGetInfo( uVal )

   local cType := ValType( uVal )

   do case
      case cType == "
C"
           return '"
' + cValToChar( uVal ) + '"'

      case cType == "
O"
           return "
Class: " + uVal:ClassName()

      case cType == "
A"
           return "
Len: " + Str( Len( uVal ), 4 )

      otherwise
           return cValToChar( uVal )
   endcase

return nil

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

#define  HKEY_LOCAL_MACHINE  2147483650  // 0x80000002

function GetCPU()

   local oReg := TReg32():New( HKEY_LOCAL_MACHINE,;
                               "
HARDWARE\DESCRIPTION\System\CentralProcessor\0",;
                               .f. )
   local cCpu := oReg:Get( "
ProcessorNameString" )

   oReg:Close()

return cCpu

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

#ifdef __HARBOUR__
   #ifndef __XHARBOUR__
      REQUEST HB_GT_GUI_DEFAULT
      PROCEDURE HB_GTSYS() ; return
      procedure FW_GT ; return
   #endif
#endif

//----------------------------------------------------------------------------//
Regards,

Michel D.
Genk (Belgium)
_____________________________________________________________________________________________
I use : FiveWin for (x)Harbour v. 24.07 - Harbour 3.2.0 (February 2024) - xHarbour Builder (January 2020) - Bcc773
User avatar
driessen
 
Posts: 1422
Joined: Mon Oct 10, 2005 11:26 am
Location: Genk, Belgium

Re: If you send me an email and you don't get my answer...

Postby carlos vargas » Fri Jul 08, 2022 10:43 pm

Antonio, mi consulta va sobre la posibilidad de usar controles como este
https://xdsoft.net/jodit/
en nuestras app desktop usando twebview.
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
User avatar
carlos vargas
 
Posts: 1721
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: If you send me an email and you don't get my answer...

Postby Antonio Linares » Sat Jul 09, 2022 1:23 pm

Carlos,

Te he contestado por email :-)

No deberia haber ningún problema y si lo hubiese con gusto intentaremos ayudarte :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42121
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Previous

Return to FiveWin for Harbour/xHarbour

Who is online

Users browsing this forum: Antonio Linares, Google [Bot] and 44 guests