[lazarus] How to scroll TMemo control in code

Mattias Gaertner nc-gaertnma at netcologne.de
Fri Mar 28 03:15:37 EST 2003


On Fri, 28 Mar 2003 09:37:07 +0800
hernan.et at pg.com wrote:

> Looking at how the TMemo is created in gtkobject.inc,
> 
>       P := gtk_scrolled_window_new(nil, nil);
>       TempWidget := gtk_text_new(nil, nil);
>       gtk_container_add(p, TempWidget);
> 
>       GTK_WIDGET_UNSET_FLAGS(PGtkScrolledWindow(p)^.hscrollbar,
>       GTK_CAN_FOCUS);
>       GTK_WIDGET_UNSET_FLAGS(PGtkScrolledWindow(p)^.vscrollbar,
>       GTK_CAN_FOCUS);
>       gtk_scrolled_window_set_policy(PGtkScrolledWindow(p),
>                                      GTK_POLICY_AUTOMATIC,
>                                      GTK_POLICY_AUTOMATIC);
>       gtk_text_set_adjustments(PGtkText(TempWidget),
>         gtk_scrolled_window_get_hadjustment(PGtkScrolledWindow(p)),
>         gtk_scrolled_window_get_vadjustment(PGtkScrolledWindow(p)));
> 
>       SetMainWidget(p, TempWidget);
>       GetWidgetInfo(p, True)^.ImplementationWidget := TempWidget;
> 
> It looks to me that you can manipulate the scrollbar by getting the handle
> of of the GtkWidget gtk_adjustment and setting the value
> 
> i.e
> gtk_adjustment_set_value("Gtk adjustment handle here", "then the new value
> here") although this will not be widgetset independent.
> 
> I am not really sure, I am just thinking how to manipulate the scrollbars.
> 
> Note that according to Gtk documentation, gtktext is a descendant of
> gtkeditable. And in gtkEditable there is a signal called "move-to-row" but
> I don't know how to fire this signal so that the scrollbar will move
> accordingly.

These are all right. But they are implementation details for the gtk
interface. If you want a new feature for a LCL component, then you should
start with the LCL. 
As soon as we have a nice solution, we will dicuss the implementation with
PGtkText et al. And then you will also see, how the messages work in the
LCL. I think, it is a good idea to use this case and write some docs about
extending the LCL and its interfaces.


Mattias


> Also note that I am just learing how gtk works as well as how Lazarus
> handles messages, sometimes I am totally confused as how things happen.
> 
> And I am so glad that I can talk to really great delphi/lazarus coder
> around the globe.
> 
> Regards,
> 
> Yoyong
> 
> 
> 
> 
>                                                                 
>  Internet Mail Message                                          
>  Received from host:                                            
>  svcr-216-37-230-2.dsl.svcr.epix.net                            
>  [216.37.230.2]                                                 
>                                                                 
> 
> 
> From: Marc Weustink <marc at dommelstein.net> on 03/28/2003 12:03 AM GMT
>                                                                         
    
>           Marc Weustink           To:   lazarus at miraclec.com,             
>             
>  <marc at dommelstein.net>        lazarus at miraclec.com                       
>    
>                                   Cc:    (bcc: Yoyong Hernan-ET/PGI)      
>                                     
>                           Subject:      Re: [lazarus] How to scroll TMemo 
>                             
>     03/28/2003 08:03 AM        control in code                            
>       
>       Please respond to                                                   
>         
>    lazarus at miraclec.com                                                   
>      
>                                                                         
    
> 
> 
> 
> 
> 
> At 00:47 28-3-2003 +0100, Mattias Gaertner wrote:
> >On Fri, 28 Mar 2003 00:32:12 +0100
> >Marc Weustink <marc at dommelstein.net> wrote:
> >
> > > At 07:02 28-3-2003 +0800, you wrote:
> > > >Can anybody try help me figure out how to scroll the TMemo
> > > >programatically?
> > > >
> > > >I have seen this code in Delphi, though I am not sure if it works (in
> > > >Delphi)
> > > >
> > > >procedure MemoScrollDown(Memo: TMemo);
> > > >var
> > > >  ScrollMessage:TWMVScroll; (I replace this one with TLMVScroll)
> > > >  i:integer;
> > > >begin
> > > >  ScrollMessage.Msg:=WM_VScroll; (this one with LM_VScroll)
> > > >  for i := 0 to Memo.Lines.Count do
> > > >  begin
> > > >      ScrollMessage.ScrollCode:=sb_LineDown;
> > > >      ScrollMessage.Pos:=0;
> > > >   Memo.Dispatch(ScrollMessage);
> > > >  end;
> > > >end;
> > > >
> > > >
> > > >If I try the above code, it does not do anything.
> > >
> > > :-)
> > >
> > > It might work in Delphi, but it doesn't in the LCL (and never will)
> > >
> > > Some background info:
> > >
> > > The widgetset of you choice (GTK, win32, QT, GNOME) may be message
> > > based or event based or whatever to signal when the user does
> > > something. The interface object of the LCL translates this to
> > > LCL-Messages (and object calls) to be a bit Delphi compatible so that
> > > Delphi code based on messages
> > >
> > > would work (code for WM_LBUTTONDOWN etc). This is thus from
> > > userinterface to code.
> > > However the otherway around, the LCL doesn't translate messages from
> > > code to the user interface.
> >
> >Right.
> >I think, we should add some properties to TCustomMemo to control the
> >scrollbars.
> >Other components need them too, so we should do that in an independent
> >way. Ideas?
> 
> First idea:
> 
> Add H and V scrollbars like TScrollingWinControl, however created
> according to TScrollStyle and with limited properties (Not nesecary
> derived from TScrollbar).
> 
> Marc
> 
> _________________________________________________________________
>      To unsubscribe: mail lazarus-request at miraclec.com with
>                 "unsubscribe" as the Subject
>    archives at http://www.lazarus.freepascal.org/mailarchives
> 
> 
> _________________________________________________________________
>      To unsubscribe: mail lazarus-request at miraclec.com with
>                 "unsubscribe" as the Subject
>    archives at http://www.lazarus.freepascal.org/mailarchives






More information about the Lazarus mailing list