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.
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 on 03/28/2003 12:03 AM GMT
Marc Weustink To: ,
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
Mattias Gaertner wrote 48 lines
On Fri, 28 Mar 2003 00:32:12 +0100
Marc Weustink 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 with
"unsubscribe" as the Subject
archives at http://www.lazarus.freepascal.org/mailarchives