From: Morbus I. <mo...@di...> - 2001-04-30 23:15:00
|
I'm having difficulty trying to get an autoscrolling RichEdit - I can get the scroll bar to show up correctly, but all attempts to have the text automatically scroll up in the RichEdit is failing. In some cases, no scrolling occurs (although I can see the scroll bar growing), and in others, scrolling occurs, but the last line of text shows as the first line of the window (not the last). My creator code: # create the log box which is gonna hold all our info. $logbox = $window->AddRichEdit( -name => "_RichEdit", -font => $font, -top => 116, -left => 0, -width => 505, -tabstop => 1, -autovscroll => 1, -style => WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL | ES_LEFT | ES_MULTILINE And my add code: # add the string to our box. $logbox->Text($logbox->Text . "\r\n $message"); # autoscroll the window. 277 is the number # of the WM_VSCROLL constant, which Win32::GUI # doesn't seem to define for us. Win32::GUI::SendMessage($logbox, 277, 7, 7); In the above cases, $message always contains the complete RichEdit text so that it can be reprinted (this is probably wrong). The SendMessage I dunno what it does - it came from someone else. If I comment it out, no scrolling occurs. What's my solution? |
From: Johan L. <jp...@bo...> - 2001-04-30 23:28:41
|
Morbus Iff wrote: > # add the string to our box. > $logbox->Text($logbox->Text . "\r\n $message"); Instead of replacing the entire text with the entire text + something new, add the new text to the bottom of the existing text: #Select the last thing in the RichEdit $rePOD->Select(999999,999999); #Replace the selection with new text $rePOD->ReplaceSel("$line\n",1); I "stole" this technique from the PerlMonks chatterbox client. /J -- Johan Lindström, Sourcerer, Boss Casinos Ltd, Antigua jp...@bo... |
From: Morbus I. <mo...@di...> - 2001-04-30 23:39:47
|
>#Select the last thing in the RichEdit >$rePOD->Select(999999,999999); > >#Replace the selection with new text >$rePOD->ReplaceSel("$line\n",1); Neat idea, but now, instead of seeing the last $message being passed as the first line of the RichEdit (scrolled to that first line), I see a blank screen - the autoscroll goes past my last line... Course, changing the \n around fixes that (with the side effect of a blank first line), but my autoscrolling problem is still there. Any ideas? |
From: Johan L. <jp...@bo...> - 2001-05-01 02:00:16
|
Morbus wrote: >Neat idea, but now, instead of seeing the last $message being passed as >the first line of the RichEdit (scrolled to that first line), I see a >blank screen - the autoscroll goes past my last line... Course, changing >the \n around fixes that (with the side effect of a blank first line), but >my autoscrolling problem is still there. Sorry I'm dense, I don't get it. Try this: ---------- #!/usr/local/bin/perl -w use strict; use Win32::GUI; my $winMain = new Win32::GUI::Window( -left => 13, -top => 32, -width => 439, -height => 260, -name => "winMain", -text => "Autoscroller" ); $winMain->AddRichEdit( -text => "", -name => "rePOD", -left => 0, -top => 0, -width => 400, -height => 220, -style => WS_CHILD | WS_VISIBLE | ES_LEFT | ES_MULTILINE | ES_AUTOVSCROLL | WS_VSCROLL | ES_AUTOHSCROLL | WS_HSCROLL | ES_READONLY, -exstyle => WS_EX_CLIENTEDGE, -tabstop => 1, ); $winMain->Show(); for my $i (1..40) { Win32::GUI::DoEvents(); $winMain->rePOD->Select(999999,999999); #Stolen from the PM chatterbox $winMain->rePOD->ReplaceSel("line $i\n",1); select(undef, undef, undef, 0.25); } #EOF ---------- This will scroll the RichEdit as you "print" more text into it. Is that not what you wanted? If you want to scroll the RichEdit to a certain line, download the Oasis source and look at the Win32::GUI::AdHoc module. It contains the sub richEditScroll($reControl, $noCol, $noLines) which sends the EM_LINESCROLL message to the RichEdit control. /J -- Johan Lindström, Sourcerer, Boss Casinos Ltd, Antigua jp...@bo... NetZero Platinum No Banner Ads and Unlimited Access Sign Up Today - Only $9.95 per month! http://www.netzero.net |
From: Morbus I. <mo...@di...> - 2001-05-01 13:21:09
Attachments:
Windows.pl
|
Ok. This is intensely interesting. I'm sure I'm doing something wrong. I've attached the latest Windows.pl file, which is where I'm trying to accomplish this autoscroll thing. You'll have to activate it something like: &gui_init, for (1 .. 40) { &gui_note("hey!"); to get it going. It's a gui layer library to a much larger application. Anyways, a couple of notes: - I added a "height" to my Richie, and thinking that the Resize wasn't needed, commented it out. To my surprise, that stopped the vscrollbar from appearing. Even with all the other junk you see in there, the vscroll doesn't appear. Only when I uncomment the Resize (as in this file) does the vscroll appear. - As mentioned in a previous note, Johan's thingy doesn't work the way I want it... As it is now, the Windows.pl does the same thing as Johan's code. I want it to auto scroll to the *last printed line*, whilst still showing all the previous lines above it. The *last printed line* should be the *last visible line in the window*. Johan's way doesn't autoscroll. >$Main->Rich->SendMessage (0x115, 7, 0) This caused the window to put the *last printed line* in the first *visible line of the window*. That's not what I want. >$Main->Rich->SendMessage (0x115, 0, 0); This, although sounding promising, didn't work either. Heelpppp! <g>... |