1. Win32lib question RE: edit controls

I'm trying to rebuild a program in Eu that I wrote in BCPPB. It's a small
HTML formatting pad for people that frequently use message boards.
Basically, a user types text into an edit control, highlights a section,
pushes a button, and the program inserts HTML tags at the beginning and the
end of the highlighted section.

In BCPPB, the program was trivial because the Builder Edit Control has a
SelectAll method. I can't seem to find an equivalent procedure in Win32lib,
or anywhere else in Eu for that matter, and I can't figure out a way to
write the program without it.

Any suggestions?
Sherm

new topic     » topic index » view message » categorize

2. Re: Win32lib question RE: edit controls

On Wed, 15 Mar 2000 09:49:45 -0500, SR Williamson wrote:

>I'm trying to rebuild a program in Eu that I wrote in BCPPB. It's a small
>HTML formatting pad for people that frequently use message boards.
>Basically, a user types text into an edit control, highlights a section,
>pushes a button, and the program inserts HTML tags at the beginning and the=

>end of the highlighted section.
>
>In BCPPB, the program was trivial because the Builder Edit Control has a
>SelectAll method. I can't seem to find an equivalent procedure in Win32lib,=

>or anywhere else in Eu for that matter, and I can't figure out a way to
>write the program without it.
>
>Any suggestions?
>Sherm

Hi Sherm,

To select all text in an Edit Control, you will need to send an EM_SETSEL
message to the control.

Win32Lib provides 'sendMessage( control, command, wParam, lParam )'.

In this case, wParam is the starting position (nStart) and lParam is the
ending position (nEnd). If the nStart parameter is 0 and the nEnd parameter
is =961, all the text in the edit control is selected. If nStart is =961, an=
y
current selection is removed. The caret is placed at the end of the
selection indicated by the greater of the two values nEnd and nStart.

You don't need to define EM_SETSEL because it is already defined in
Win32Lib.

Hope this helps.  (I'm not sure if this is what you are asking but there
are many other Edit control messages that should help you do what you want.)=


-- Brian

new topic     » goto parent     » topic index » view message » categorize

3. Re: Win32lib question RE: edit controls

SR Williamson wrote:

> Basically, a user types text into an edit control,
> highlights a section, pushes a button, and the
> program inserts HTML tags at the beginning and the
> end of the highlighted section.

I'd suggest getting the "WIN32 API Documentation" help file from the RDS
site. There's a ton of good information there, and it's not difficult to add
new wrappers and traps to Win32Lib. I consider it essential when writing
Windows programs.

Use EM_GETSEL to get the position of the selected text. Use EM_REPLACESEL to
replace the text with the new code. I haven't had a chance to test it, but
something along the lines of this should work. I should add setSelectedText
and getSelectedText to Win32Lib:

   -- selected text messages
   global constant
      EM_GETSEL = 176,
      EM_SETSEL = 177

   integer firstPos, lastPos
   atom result, addrFirst, addrLast, addrText
   sequence text

   -- allocate addresses to store the results
   addrFirst = allocate( 4 )
   addrLast  = allocate( 4 )

   -- get the range of selected text
   result = sendMessage( TheMle, EM_GETSEL, addrFirst, addrLast )
   firstPos = peek4s( addrFirst )
   lastPos  = peek4s( addrLast ) - 1

   -- is any text selected?
   if firstPos then

      -- get all the text text from the mle
      text = getText( TheMle )

      -- get the selected portion of the text
      selText = text[firstPos..lastPos]

      -- add html formatting
      text = "<tag>" & text & "</tag>"

      -- convert to lpsz
      addrText = allocate_string( text )

      -- replace selection; True means allow undo
      result = sendMessage( TheMle, EM_REPLACESEL, True, addrText )

      -- free the string
      free_string( addrText )

   end if

   -- free memory
   free( addrFirst )
   free( addrLast )

Hope this helps!

-- David Cuny

new topic     » goto parent     » topic index » view message » categorize

4. Re: Win32lib question RE: edit controls

SR Williamson wrote:

> ... edit control ...

Try these; they're more generic and I've had a chance to test them a bit.

-- David Cuny

global function getSelectedText( integer id )

   integer firstPos, lastPos
   atom result
   sequence text

   -- get the range of selected text
   result = sendMessage( id, EM_GETSEL, NULL, NULL )
   firstPos = lo_word( result )
   lastPos  = hi_word( result )

   -- is any text selected?
   if firstPos < lastPos then

        -- get all the text text from the mle
        text = getText( id )

        -- get the selected portion of the text
        return text[firstPos+1..lastPos]

    else
        -- no text selected
        return ""

   end if

end function


global procedure setSelectedText( integer id, sequence text )

    atom addrText, result

    -- is there any text selected?
    result = sendMessage( id, EM_GETSEL, NULL, NULL )
    if lo_word( result ) < hi_word( result ) then

        -- convert to lpsz
        addrText = allocate_string( text )

        -- replace selection; True means allow undo
        result = sendMessage( id, EM_REPLACESEL, True, addrText )

        -- free the string
        free( addrText )

    end if

end procedure

new topic     » goto parent     » topic index » view message » categorize

Search



Quick Links

User menu

Not signed in.

Misc Menu