I really liked that old EDM32 Control because it had these soft Lines between the lines, no other control had, And it was just fast.
I have now made a version that will work under the actual Windows again and with the last Powerbasic.
If you look for a very lean Textcontrol not with the overhead of a scintilla Contol. This is it.
To keep it aside of the old not more working EDM32 i renamed it EDM34.
' EDM34 Edit Control Test Program
' Based on EDM32 test, adapted for EDM34 control layer
#COMPILE EXE "Test_EDM34.exe"
#DIM ALL
#DEBUG ERROR OFF
#INCLUDE "..\\PBWin\WINAPI_III\WIN32API.INC"
#INCLUDE "..\\PBWin\WINAPI_III\WinUser.inc"
#INCLUDE "EDM34\EDM34.inc"
GLOBAL g_hMainWnd AS DWORD
GLOBAL g_hEditCtl AS DWORD
GLOBAL g_hInstance AS DWORD
GLOBAL g_hDbgFile AS LONG
SUB LogLine(BYVAL sText AS STRING)
LOCAL f AS LONG
IF g_hDbgFile = 0 THEN EXIT SUB
f = FREEFILE
OPEN "Test_EDM34.runtime.log" FOR APPEND AS #f
PRINT #f, sText
CLOSE #f
END SUB
FUNCTION LastErrorText() AS STRING
LOCAL e AS LONG
e = GetLastError()
LastErrorText = FORMAT$(e)
END FUNCTION
SUB CloseMainWindow(BYVAL hWnd AS LONG)
IF hWnd <> 0 THEN
KillTimer hWnd, 1
KillTimer hWnd, 2
DestroyWindow hWnd
END IF
END SUB
FUNCTION CreateMainWindow() AS DWORD
LOCAL hWnd AS DWORD
LOCAL wc AS WNDCLASSEX
LOCAL szClassName AS ASCIIZ * 32
LOCAL szTitle AS ASCIIZ * 64
szClassName = "EDM34Test_Main"
wc.cbSize = SIZEOF(WNDCLASSEX)
wc.lpfnWndProc = CODEPTR(MainWindowProc)
wc.hInstance = g_hInstance
wc.hCursor = LoadCursor(%NULL, BYVAL %IDC_ARROW)
wc.hbrBackground = GetStockObject(%WHITE_BRUSH)
wc.lpszClassName = VARPTR(szClassName)
IF RegisterClassEx(wc) = 0 THEN
LogLine "RegisterClassEx failed, err=" + LastErrorText()
FUNCTION = 0
EXIT FUNCTION
END IF
LogLine "RegisterClassEx main window OK"
szTitle = "EDM34 Edit Control Test"
hWnd = CreateWindowEx(%WS_EX_CLIENTEDGE, _
szClassName, _
szTitle, _
%WS_OVERLAPPEDWINDOW OR %WS_VISIBLE, _
100, 100, _
800, 600, _
0, 0, _
g_hInstance, _
BYVAL 0)
IF hWnd = 0 THEN
LogLine "CreateWindowEx main window failed, err=" + LastErrorText()
ELSE
LogLine "CreateWindowEx main window OK"
END IF
FUNCTION = hWnd
END FUNCTION
FUNCTION MainWindowProc(BYVAL hWnd AS DWORD, BYVAL wMsg AS DWORD, BYVAL wParam AS LONG, BYVAL lParam AS LONG) AS LONG
SELECT CASE wMsg
CASE %WM_CREATE
g_hEditCtl = CreateEDM34edit(hWnd, _
100, _
10, 10, _
760, 520, _
%WS_CHILD OR %WS_VISIBLE OR %WS_HSCROLL OR %WS_VSCROLL OR %ES_MULTILINE, _
0, _
0)
IF g_hEditCtl = 0 THEN
LogLine "CreateEDM34edit failed, err=" + LastErrorText()
MessageBox hWnd, "Failed to create EDM34 edit control!", "Error", %MB_OK OR %MB_ICONERROR
ELSE
LogLine "CreateEDM34edit OK"
LOCAL zText AS ASCIIZ * 256
zText = "' EDM34 Edit Control Test" + $CRLF + _
"' Type some PowerBASIC code here..." + $CRLF + _
$CRLF + _
"FUNCTION PBMAIN() AS LONG" + $CRLF + _
" ' Your code here" + $CRLF + _
" FUNCTION = 0" + $CRLF + _
"END FUNCTION"
SendMessage g_hEditCtl, %EDM34_INSERT, VARPTR(zText), 0
' Match EDM32 test behaviour
SendMessage g_hEditCtl, %EDM34_SETFILETYPE, 2, 1
SendMessage g_hEditCtl, %EDM34_SETSYNTAXONOFF, 1, 0
SendMessage g_hEditCtl, %EDM34_SETCOLORPAGE, RGB(255, 255, 255), 1
SendMessage g_hEditCtl, %EDM34_SETCOLORTXT, RGB(0, 0, 0), 1
SendMessage g_hEditCtl, %EDM34_SETCOLORTXTBK, RGB(255, 255, 255), 1
SendMessage g_hEditCtl, %EDM34_SETCOLORGRIDLINE, RGB(200, 200, 200), 1
SendMessage g_hEditCtl, %EDM34_SETCOLORSYNTAXCODE, RGB(0, 0, 255), 1
SendMessage g_hEditCtl, %EDM34_SETCOLORSYNTAXREM, RGB(0, 128, 0), 1
SendMessage g_hEditCtl, %EDM34_SETCOLORSYNTAXSTRING, RGB(255, 0, 0), 1
SendMessage g_hEditCtl, %EDM34_SETGRID, 1, 0
SendMessage g_hEditCtl, %EDM34_SETLEFTMARGIN, 52, 1
SendMessage g_hEditCtl, %EDM34_REFRESH, 0, 0
LogLine "EDM34 settext len=" + FORMAT$(SendMessage(g_hEditCtl, %EDM34_GETTEXTLEN, 0, 0))
LogLine "EDM34 line count=" + FORMAT$(SendMessage(g_hEditCtl, %EDM34_GETLINECOUNT, 0, 0))
LogLine "EDM34 left margin=" + FORMAT$(SendMessage(g_hEditCtl, %EDM34_GETLEFTMARGIN, 0, 0))
SetFocus g_hEditCtl
END IF
FUNCTION = 0
EXIT FUNCTION
CASE %WM_SIZE
IF g_hEditCtl <> 0 AND wParam <> %SIZE_MINIMIZED THEN
MoveWindow g_hEditCtl, _
10, 10, _
LOWRD(lParam) - 20, _
HIWORD(lParam) - 20, _
%TRUE
END IF
FUNCTION = 0
EXIT FUNCTION
CASE %WM_COMMAND
FUNCTION = 0
EXIT FUNCTION
CASE %WM_CLOSE
DestroyWindow hWnd
FUNCTION = 0
EXIT FUNCTION
CASE %WM_DESTROY
PostQuitMessage 0
FUNCTION = 0
EXIT FUNCTION
END SELECT
FUNCTION = DefWindowProc(hWnd, wMsg, wParam, lParam)
END FUNCTION
SUB InitApplication()
ON ERROR RESUME NEXT
KILL "Test_EDM34.runtime.log"
ON ERROR GOTO 0
LogLine "InitApplication"
InitEDM34EDITClass
LogLine "InitEDM34EDITClass done"
END SUB
FUNCTION PBMAIN() AS LONG
LOCAL Msg AS tagMSG
g_hDbgFile = 1
LogLine "PBMAIN start"
g_hInstance = GetModuleHandle("")
LogLine "GetModuleHandle returned=" + FORMAT$(g_hInstance)
InitApplication
g_hMainWnd = CreateMainWindow()
IF g_hMainWnd = 0 THEN
LogLine "PBMAIN: main window creation failed"
MessageBox 0, "Failed to create main window", "EDM34 Test", %MB_OK OR %MB_ICONERROR
FUNCTION = 1
EXIT FUNCTION
END IF
LogLine "PBMAIN: main window created=" + FORMAT$(g_hMainWnd)
ShowWindow g_hMainWnd, %SW_SHOW
UpdateWindow g_hMainWnd
DO WHILE GetMessage(Msg, %NULL, 0, 0)
TranslateMessage Msg
DispatchMessage Msg
LOOP
FUNCTION = Msg.wParam
END FUNCTION