EDM32 / EDM34 - Edit-Control

Started by Theo Gottwald, Today at 12:56:28 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Theo Gottwald

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