Jump to content
kcvinu

Scintilla Editor experiment

Recommended Posts

Hi all,

I have got a code snippet from Scintilla's website.  The code is for creating a scintilla control in visual basic. I have altered it and did some experiment with it in AutoIt. After some failed attempts, i got succeeded in creating a simple scintilla cotrol in my gui. That experiement raises a lot of questions in my mind. Some of them are i am asking.

1. So we are cretaing scintilla as a child window ?. I thought that it is a control. 

2. No.. not any more. This is my code. I am seeking guidance and advices to learn more about this. Thanks in advance.

#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
#include <WinAPI.au3>
#include <SendMessage.au3>

Local $h__MainGUI = GUICreate("Window", 500, 400, -1, -1)
GUISetState()
Local $h__THisGUI = WinGetHandle($h__MainGUI)
Local Const $SCI_START = 2000
Local Const $SCI_ADDTEXT = $SCI_START + 1
Local Const $SCI_SETSELBACK = $SCI_START + 68

Local $h__sciDLL = _WinAPI_LoadLibrary("E:\2014 Softwares\KE editor\SciLexer.dll")
Local $h__sciWnd = _WinAPI_CreateWindowEx($WS_EX_CLIENTEDGE, "Scintilla", "TEST",BitOR($WS_CHILD, $WS_VISIBLE),0,0,480,380,$h__THisGUI,0)
_SendMessageA($h__sciWnd, $SCI_SETSELBACK, 1 )
_SendMessageA($h__sciWnd, $SCI_ADDTEXT, 16, "This is Vinod")

While 1
    $hMsg = GUIGetMsg()
    Switch $hMsg
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch
WEnd

 

Edited by kcvinu

My Contributions

UDF Link Viewer   --- A tool to visit the links of some most important UDFs 

 Includer_2  ----- A tool to type the #include statement automatically 

 Digits To Date  ----- date from 3 integer values

PrintList ----- prints arrays into console for testing.

 Alert  ------ An alternative for MsgBox 

 MousePosition ------- A simple tooltip display of mouse position

GRM Helper -------- A littile tool to help writing code with GUIRegisterMsg function

Access_UDF  -------- An UDF for working with access database files. (.*accdb only)

 

Share this post


Link to post
Share on other sites

Au3Info can tell you that.

 the dll internally first register an Scintilla class using RegisterClassExW then use RegisterClassExA to  create the window\control.

Saludos

Edited by Danyfirex

Share this post


Link to post
Share on other sites

@Danyfirex Thanks. Let me check it with Au3Info. :)

 


My Contributions

UDF Link Viewer   --- A tool to visit the links of some most important UDFs 

 Includer_2  ----- A tool to type the #include statement automatically 

 Digits To Date  ----- date from 3 integer values

PrintList ----- prints arrays into console for testing.

 Alert  ------ An alternative for MsgBox 

 MousePosition ------- A simple tooltip display of mouse position

GRM Helper -------- A littile tool to help writing code with GUIRegisterMsg function

Access_UDF  -------- An UDF for working with access database files. (.*accdb only)

 

Share this post


Link to post
Share on other sites

Yes. And we can treat it as our own control in that GUI. 

Now, i am reading the documentation.

 


My Contributions

UDF Link Viewer   --- A tool to visit the links of some most important UDFs 

 Includer_2  ----- A tool to type the #include statement automatically 

 Digits To Date  ----- date from 3 integer values

PrintList ----- prints arrays into console for testing.

 Alert  ------ An alternative for MsgBox 

 MousePosition ------- A simple tooltip display of mouse position

GRM Helper -------- A littile tool to help writing code with GUIRegisterMsg function

Access_UDF  -------- An UDF for working with access database files. (.*accdb only)

 

Share this post


Link to post
Share on other sites

Yes Look:

#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
#include <WinAPI.au3>
#include <SendMessage.au3>
Global Const $__EDITCONSTANT_WM_SETTEXT = 0x000C
Local $h__MainGUI = GUICreate("Window", 500, 400, -1, -1)
GUISetState()
Local $h__THisGUI = WinGetHandle($h__MainGUI)
Local Const $SCI_START = 2000
Local Const $SCI_ADDTEXT = $SCI_START + 1
Local Const $SCI_SETSELBACK = $SCI_START + 68

Local $h__sciDLL = _WinAPI_LoadLibrary("SciLexer.dll")
Local $h__sciWnd = _WinAPI_CreateWindowEx($WS_EX_CLIENTEDGE, "Scintilla", "TEST",BitOR($WS_CHILD, $WS_VISIBLE),0,0,480,380,$h__THisGUI,0)
_SendMessageA($h__sciWnd, $SCI_SETSELBACK, 1 )
_SendMessageA($h__sciWnd, $SCI_ADDTEXT, 16, "This is Vinod")

_GUICtrlEdit_SetText($h__sciWnd,"Hola Mundo. AutoIt Rocks")

While 1
    $hMsg = GUIGetMsg()
    Switch $hMsg
        Case $GUI_EVENT_CLOSE
            Exit

    EndSwitch
WEnd

Func _GUICtrlEdit_SetText($hWnd, $sText)
    If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)

    _SendMessage($hWnd, $__EDITCONSTANT_WM_SETTEXT, 0, $sText, 0, "wparam", "str")
EndFunc   ;==>_GUICtrlEdit_SetText

Saludos

Share this post


Link to post
Share on other sites

Documentation says that to use WM_NOTIFY message to work with scinitlla control. They gave an example c++ code to do it. But i just check it with an ordianry WM_COMMAND function in GUIRegisterMsg. As if it s an edit control in my gui. It worked, but it gave output twice to me. I don't know why.


My Contributions

UDF Link Viewer   --- A tool to visit the links of some most important UDFs 

 Includer_2  ----- A tool to type the #include statement automatically 

 Digits To Date  ----- date from 3 integer values

PrintList ----- prints arrays into console for testing.

 Alert  ------ An alternative for MsgBox 

 MousePosition ------- A simple tooltip display of mouse position

GRM Helper -------- A littile tool to help writing code with GUIRegisterMsg function

Access_UDF  -------- An UDF for working with access database files. (.*accdb only)

 

Share this post


Link to post
Share on other sites

@Danyfirex Please tell me about the const $__EDITCONSTANT_WM_SETTEXT. help file says that it is "Msg to send to control (Number). And in the example they used $WM_SYSCOMMAND. I am confused a little.


My Contributions

UDF Link Viewer   --- A tool to visit the links of some most important UDFs 

 Includer_2  ----- A tool to type the #include statement automatically 

 Digits To Date  ----- date from 3 integer values

PrintList ----- prints arrays into console for testing.

 Alert  ------ An alternative for MsgBox 

 MousePosition ------- A simple tooltip display of mouse position

GRM Helper -------- A littile tool to help writing code with GUIRegisterMsg function

Access_UDF  -------- An UDF for working with access database files. (.*accdb only)

 

Share this post


Link to post
Share on other sites

Documentation says that to use WM_NOTIFY message to work with scinitlla control. They gave an example c++ code to do it. But i just check it with an ordianry WM_COMMAND function in GUIRegisterMsg. As if it s an edit control in my gui. It worked, but it gave output twice to me. I don't know why.

Show your code :)

@Danyfirex Please tell me about the const $__EDITCONSTANT_WM_SETTEXT. help file says that it is "Msg to send to control (Number). And in the example they used $WM_SYSCOMMAND. I am confused a little.

It's just for send text to a control https://msdn.microsoft.com/en-us/library/windows/desktop/ms632644(v=vs.85).aspx

Saludos

Share this post


Link to post
Share on other sites

Pretty sure somebody else has create an editor in AutoIt using Scintilla and posted about it in the forum. Maybe look for that.

Also ISN AutoIt Studio is based on Scintilla.

Jos 

Edited by Jos

Share this post


Link to post
Share on other sites

@Jos can you tell me witch command use SciTE when show this kind of tooltip with scroll. (I'm don want to reverse SciTE :S)  it makes my screen driver  fails...

8g9WAVe.png

 

 

 

Saludos

 

Edited by Danyfirex

Share this post


Link to post
Share on other sites

No no. I mean what it use internally. maybe how to reproduce that using sendmessage. then I will look inside to check that message because I think It should be a predefined message.

 

Saludos

Share this post


Link to post
Share on other sites

That is the same message, but obviously there need to be multiple options in au3.api for it to trigger that version.

Jos 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By Beege
      If you have every taken the time to set up a nice dark theme for your scite editor, you probably noticed shortly after a small yet really annoying flaw. For what ever reason, scite is not set up to let you change the caret fore color and caret line color per language. This really sucks if say you want to edit a properties file or any of the many other languages that Scite currently is setup to support. Pretty much all the other languages are set as light theme so unless you change the theme for those file types, you end up with something like below where the line color and caret are still using the dark theme colors. Line 3 in the pic:
       

       
      To get around this I came up with the following that seems to work pretty well.  
       
      Add the following properties to SciteUser.properties file (Options -> Open User Options File). Update colors to your own needs. You can addionally add any other propertys that dont have a lexer language option in the same fashion.
      # The default values (light themes) will be used for any lexer other than au3 caret.default.fore=#000000 caret.default.line.back=#FFFED8 selection.default.fore=#006000 selection.default.back=#F0A0A8 caret.au3.fore=#FFFFFF caret.au3.line.back=#111111 selection.au3.fore=#C2FFAE selection.au3.back=#f9f9f9  
      Add the following function to PersonalTools.Lua file. As jos pointed out, the OnStartup covers the filetab switches as well as the startup so only need the one function:
      function PersonalTools:OnStartup() -- the "and" + "or" keywords are ternary operators here local sLex = self:IsLexer(SCLEX_AU3) and 'au3' or 'default' props['caret.line.back'] = props['caret.' .. sLex .. '.line.back'] props['caret.fore'] = props['caret.' .. sLex .. '.fore'] props['selection.fore'] = props['selection.' .. sLex .. '.fore'] props['selection.back'] = props['selection.' .. sLex .. '.back'] end
      Last restart SciTE and that should be it. Let me know if you have any issues. Thanks
       
    • By ozymandius257
      Is there a way to remove the numbers from the tabs in Scite?
      When you have multiple autoit programs open, the tabs are numbered, so you'll get something like 1 ProgramA.au3    2 Program2.au3   3 Program3.au3
      I am working on programs with numbers as the first character, so I get  1 3-DoThis.au3     2 4-DoAnother.au3   3 5-DoTheRest.au3  (not the real program names, obviously :))
      It would be nice if I could get rid of the tab number, and just have the program name on each tab.
       
       
    • By SgtHugoStiglitz
      HI people,
                        I got a questions, I maintain code in autoIT and every time I compile a new version or modification, Scite generate 2 folders. One folder is finish by released and the other is tentative. I try to make some google search, but never find answer would satisfied myself. The dev who was maintain it before were using AutoIt3Wrapper_GUI, and I don't know if it's related. I look both folder, but they seem pretty identical, but I would like to know what it's the difference between those to folder. Anyone have a clue?
    • By user4157124
      ConsoleWrite('>Message here.' & @CRLF) outputs colored text (per + > - ! characters).
      ConsoleWrite('warning' & @TAB & '38' & @TAB & 'more text ...' & @CRLF) enables jump to line 38 on doubleclick.

      Using "jump to line" format, only red and pink text coloring seems possible (simply prefixing color directives to output-text disables jump to line functionality). Is it possible to combine the two (define custom color while keeping "jump to line" functionality)?
    • By mannworks00
      After testing various schemes (themes) in the settings for the newest SciTE editor (v. 4.1.2), I discovered that I wasn't able to fully reset it back to its original colors (See snapshot). Specifically, after applying the "__SciTE4AutoIt3_Dark ==> Dark SciTE4AutoIt3 Color scheme."
      The problem: The Line number column and the Output console do not reset back to their original colors.
      The Solution: Delete or edit the user config file. You can safely delete the config file because it will completely regenerate on SciTE restart- with it's factory (out of the box) color scheme.
      I also wrote a small script that will do it programatically: How to reset SciTE scheme in version 4.1.2.
       
       

×
×
  • Create New...