Sory, some corrections of the last post (there was also a bug in the GetText-sub):
You need the pragmas: use utf8; # If you want to write unicode in your perl-file use use Encode qw/decode/; If you want to define constants (you only need them, if you use the commented out lines in the function GetText, below): sub WM_USER() {1024}; sub GT_DEFAULT() {0}; sub EM_GETTEXTEX() {+WM_USER+94}; Here is the Get-function: sub GetText # gets unicode-textout of a richedit and returns it an string { my ($window, $richedit) = @_; # [0] = window-object, [1] = name oft the richedit-field my $maxlen = 1024; my $buffer = " " x $maxlen; my $flags = 0; # alternatively You can define the constant GT_DEFAULT in the header of the program --> 'sub GT_DEFAULT() {0};' # my $flags = GT_DEFAULT; # defined with a constant my $codepage = 1200; my $struct = pack("LLIpp", $maxlen, $flags, $codepage, undef, undef); my $address = pack("P20", $struct); my $wparam = unpack("L", $address); my $numTchar = $window -> $richedit -> SendMessage(1118, $wparam, $buffer); # Alternatively You can define the message as constants WM_USER and EM_GETTEXTEX in the header of the program --> 'sub WM_USER() {1024};' and 'sub EM_GETTEXTEX() {+WM_USER+94};' #my $numTchar = $window -> $richedit -> SendMessage(EM_GETTEXTEX, $wparam, $buffer); # defined with constants my $octets = substr($buffer, 0, ($numTchar*2)); my $text = decode("UCS-2LE", $octets); return($text); # Returns a unicode-string } And the Set-function: sub SetText # prepares unicode-strings for the Text()-method of the richedit { my @input = @_; my $rtf_prolog = '{\rtf1'; # Minimal-RTF-Header. Define your own RTF-Header according the RTF-specs $input[0] =~ s/([^\x00-\x7F])/'\uc1\u'.((ord $1 < 32768)?ord $1 : ord($1)-65536).'?'/eg; # Converting unicode into 'escaped' RTF-format $input[0] =~ s/(\r\n)/\\par\r\n/g; # Converting common newlines (\r\n) into RTF-newlines (\par\r\n) return $rtf_prolog . $input[0] . '}'; # Returns the string as RTF } So if you want so get the text of the field, use: $SAVE = &GetText($window,'richedit_field'); And to set it back, use: $window -> richdit_field -> Text(SetText($SAVE)); Regards, Raphael On Do 06/11/08 22:00 , Raphael Stoeckli <[EMAIL PROTECTED]> wrote: > Hi Octavian and Glenn > The thing with the 'par' was the point. > The RTF-format is documented here: > http://msdn.microsoft.com/en-us/library/aa140283(office.10).aspx > i had to turn the 'rn' into '\parrn'. > So here is my solution to handle multiline-unicode-text with > richedit-fields. > You need the pragmas: > use utf8; # 'sub GT_DEFAULT() {0};' > #my $flags = $flags = GT_DEFAULT; # defined with a constant > my $codepage = 1200; > my $struct = pack("LLIpp", $maxlen, $flags, $codepage, undef, > undef); > my $address = pack("P20", $struct); > my $wparam = unpack("L", $address); > my $numTchar = $window -> $richedit -> SendMessage(1118, $wparam, > $buffer); # > Alternatively You can define the message as constants WM_USER and > EM_GETTEXTEX in > the header of the program --> 'sub WM_USER() {1024};' and 'sub > EM_GETTEXTEX() > {+WM_USER+94};' > # my $numTchar = $WIN -> re -> SendMessage(qw(EM_GETTEXTEX > {+WM_USER() > {1024}+94}), $wparam, $buffer); # defined with constants > my $octets = substr($buffer, 0, ($numTchar*2)); > my $text = decode("UCS-2LE", $octets); > return($text); # Returns a unicode-string > } > And the Set-function: > sub SetText # prepares unicode-strings for the Text()-method of the > richedit > { > my @input = @_; > my $rtf_prolog = '{rtf1'; # Minimal-RTF-Header. Define Your own > RTF-Header > according the RTF-specs > $input[0] =~ s/([^x00-x7F])/'uc1u'.((ord $1 < 32768)?ord $1 : > ord($1)-65536).'?'/eg; # Converting unicode into 'escaped' > RTF-format > $input[0] =~ s/(rn)/\parrn/g; # Converting common newlines (rn) into > RTF-newlines (parrn) > return $rtf_prolog . $input[0] . '}'; # Returns the string as RTF > } > So if you want so get the text of the field, use: > $SAVE = &GetText($window,'richedit_field'); > And to set it back, use: > $window -> richdit_field -> Text(SetText($SAVE)); > In this example, I made the function GetText variable, if you have > more than one > window or richedit-field. > Honestly, I tested this not to much. Newlines, tabs and spaces works > well. But i > don't know what happens, if there is something totally unexpected in > the richedit. > Feel free to ask, if anyone needs examples or further information to > the > functions above. > Again, thanks to all. > Regards, > Raphael > On Wed 05/11/08 22:49 , "Octavian Rasnita" sent: > > If I remember well, you need to use > > par > > in the RTF document for specifying a new line. > > > > Find and read the RTF specifications. It will help you to do more > other > > things. > > > > Octavian > > > > ----- Original Message ----- > > From: "Raphael Stoeckli" rabanti.ch>To: Sent: Wednesday, > November 05, 2008 10:05 PM > > Subject: [perl-win32-gui-users] Newlines disappearing in > > richedit(unicode-content) > > > > > > > Hi @ all > > > > > > I’m working on an program, that can handle > > Unicode-text in > richedit-fields. > > > The fields sets and gets the text using some > > modifications of the > richedit-field. These mods are also from > this > > mailinglist.> > > > The problem is, that Newlines (rn) in strings > > (whether if it’s ASCII or > Unicode) seems to be wiped, when > I put the > > string into the modified > richedit-field. > > > > > > I wrote a demo/test-program to show this > > behavior. You can get it here: > > http://www.rabanti.ch/storage/rtf_utf_test.pl or > > > http://www.rabanti.ch/storage/rtf_utf_test.zip (if > > there is a problem with > the encoding, while downloading) > > > Anyhow I try to describe it abbreviated in this > > post.> > > > For saving Unicode-content into a string, I use > > these functions:> ------------------------------------- > > > sub WM_USER() {1024}; > > > sub EM_GETTEXTEX() {+WM_USER+94}; > > > sub GT_DEFAULT() {0}; > > > > > > sub get_unicode # takes the text out of the > > richedit-field> { > > > my $maxlen = 1024; > > > my $buffer = " " x > > $maxlen;> my $flags = GT_DEFAULT; > > > my $codepage = 1200; > > > my $struct = pack("LLIpp", $maxlen, > > $flags, $codepage, undef, undef);> my $address = pack("P20", > > $struct);> my $wparam = unpack("L", > > $address);> my $numTchar = $WIN -> re -> > > SendMessage(EM_GETTEXTEX, $wparam, > $buffer); # re is the > richedit-field, $WIN the > > window-object> my $octets = substr($buffer, 0, > > ($numTchar*2));> my $text = decode("UCS-2LE", > > $octets);> return($text); > > > } > > > ------------------------------------- > > > > > > This is the richedit-field > > (simplified):> > > > $RE = $WIN -> AddRichEdit( > > > -name => 're', > > > -size => [240, 80], > > > -pushstyle => WS_CHILD | WS_VISIBLE | > > WS_VSCROLL | WS_HSCROLL | ES_LEFT > | ES_MULTILINE, > > > ); > > > > > > ------------------------------------- > > > > > > I get the text out of the field like > > that:> $SAVE = &get_unicode; > > > > > > When I try to write the string back into the > > field, I use this function > and definition: > > > ------------------------------------- > > > our $RTF_PROLOG = '{rtf1'; > > > > > > sub string2rtf # string-converter for > > RTF-handling> { > > > my @input = @_; > > > $input[0] =~ s/([^x00-x7F])/'uc1u'.((ord > > $1 < 32768)?ord $1 : > ord($1)-65536).'?'/eg; > > > return $input[0]; > > > } > > > ------------------------------------- > > > > > > I try to set the text like that: > > > $WIN -> re -> Text($RTF_PROLOG . > > string2rtf($SAVE) . '}');> > > > The result is that all stored lines (in the > > string) appear on one single > line, without newlines. > > > The operation >> $input[0] =~ > > s/([^x00-x7F])/'uc1u'.((ord $1 < > 32768)?ord $1 : > ord($1)-65536).'?'/eg; seems to wipe the newlines. I > checked the > converted strings. The newlines > > (rn) are still there, > nonetheless the richedit-field do not > recognize > > them. If I use $WIN -> > re -> Text($SAVE), the Newlines are > > appearing, but the unicode is broken.> > > > I think it's something about a sent > > (respectively not sent) system-signal. > But I have at this time > no plan about > these > > things.> I tested it on a Win2K (SP4)- System and a XP > > (SP3)-System with win32::GUI > v1.06 and Activestate Perl > v5.8.6.811 > > > > > > Can someone explain me this behavior, and get me > > a hint, how to correct > this? > > > > > > Many thanks in advance!... and much sorry for > > the bad English.> > > > Regards, > > > Raphael > > > > > > > > > > > > -------------------------------------------------------------------------> > This > SF.Net email is sponsored by the Moblin > > Your Move Developer's > challenge > > > Build the coolest Linux based applications with > > Moblin SDK & win great > prizes > > > Grand prize is a trip for two to an Open Source > > event anywhere in the > world > > > http://moblin-contest.org/redirect.php?banner_id=100&url=/> > > _______________________________________________> > Perl-Win32-GUI-Users mailing list > > > > > https://lists.sourceforge.net/lists/listinfo/perl-win32-gui-use > > rs> http://perl-win32-gui.sourceforge.net/ > > > > > > > > > > ------------------------------------------------------------------------- > This SF.Net email is sponsored by the Moblin Your Move Developer's > challenge > Build the coolest Linux based applications with Moblin SDK & win > great prizes > Grand prize is a trip for two to an Open Source event anywhere in > the world > http://moblin-contest.org/redirect.php?banner_id=100&url=/ > _______________________________________________ > Perl-Win32-GUI-Users mailing list > https://lists.sourceforge.net/lists/listinfo/perl-win32-gui-users > http://perl-win32-gui.sourceforge.net/ > > ------------------------------------------------------------------------- This SF.Net email is sponsored by the Moblin Your Move Developer's challenge Build the coolest Linux based applications with Moblin SDK & win great prizes Grand prize is a trip for two to an Open Source event anywhere in the world http://moblin-contest.org/redirect.php?banner_id=100&url=/ _______________________________________________ Perl-Win32-GUI-Users mailing list Perl-Win32-GUI-Users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/perl-win32-gui-users http://perl-win32-gui.sourceforge.net/