[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