Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
?
Solved

Scrolling a control?

Posted on 2004-04-05
13
Medium Priority
?
1,723 Views
Last Modified: 2007-12-19
How do I change the scrolled location on a control? Basicly, I want to scroll to the bottom of the document when an event occurs.

Thank you for your time,
Arrummzen
0
Comment
Question by:Arrummzen
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 8
  • 3
  • 2
13 Comments
 
LVL 48

Expert Comment

by:AlexFM
ID: 10755666
What control?
0
 
LVL 1

Author Comment

by:Arrummzen
ID: 10755676
AxSHDocVw.AxWebBrowser

Its a HTML rendering control.

Thank you for your time,
Arrummzen
0
 
LVL 1

Author Comment

by:Arrummzen
ID: 10755755
I am setting the HTML in the control myself. Is there a way I could write the HTML doc so the browser jumps to the bottom? (How would I make a web site the jumps the the bottom when loaded?). That would probly solve the problem.

Thank you for your time,
Arrummzen
0
Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

 
LVL 48

Expert Comment

by:AlexFM
ID: 10756100
Try this (just a guess):

        [DllImport("user32.dll")]
        static extern int PostMessage(
            IntPtr wnd,
            uint Msg,
            IntPtr wParam,
            IntPtr lParam);

        const uint WM_VSCROLL = 0x0115;
        const uint SB_BOTTOM = 7;


To scroll control tp the end:

PostMessage(control.Handle, WM_VSCROLL, (IntPtr)SB_BOTTOM, (IntPtr)IntPtr.Zero);
0
 
LVL 1

Author Comment

by:Arrummzen
ID: 10760268
[DllImport] gives me -
The type or namespace name 'DllImport' could not be found (are you missing a using directive or an assembly reference?)

How do I fix that?

Thank you for yor time,
Arrummzen
0
 
LVL 1

Author Comment

by:Arrummzen
ID: 10760298
I just needed to add -
using System.Runtime.InteropServices;
Thank you for your time,
Arrummzen
0
 
LVL 1

Author Comment

by:Arrummzen
ID: 10760322
It didn't work.

Any other ideas?

Thank you for your time,
Arrummzen
0
 
LVL 1

Author Comment

by:Arrummzen
ID: 10763664
How can I determine the size at which the control would have no scroll bars? Some how query it to determine its logical size?

Thank you for your time,
Arrummzen
0
 
LVL 48

Expert Comment

by:AlexFM
ID: 10766177
Sorry, this is all I have for now.
0
 
LVL 4

Expert Comment

by:caner_elci
ID: 10796438
Well, if it's that hopeless, what about trying SendInput() API? Send an End key to it. It may work...

Caner
0
 
LVL 1

Author Comment

by:Arrummzen
ID: 10847602
I actualy came up with my own method. I inserted a JavaScript into the document, that used the Scrollto method, to scroll to the bottom.

Thank you for your time,
Arrummzen
0
 
LVL 1

Author Comment

by:Arrummzen
ID: 10855827
caner_elci: Although my solution works, if you post working code that proves your solution works as well. I will accept your comment as an answer, else I will ask to have this question closed soon.

Thank you for your time,
Arummzen
0
 
LVL 4

Accepted Solution

by:
caner_elci earned 2000 total points
ID: 10856081
Here is the working sample code:

            public const int INPUT_KEYBOARD = 1;
            public const int KEYEVENTF_KEYUP = 0x0002;

            public struct KEYDBINPUT
            {
                  public Int16 wVk;
                  public Int16 wScan;
                  public Int32 dwFlags;
                  public Int32 time;
                  public Int32 dwExtraInfo;
                  public Int32 __filler1;
                  public Int32 __filler2;
            }

            public struct INPUT
            {
                  public Int32 type;
                  public KEYDBINPUT ki;
            }

            [DllImport("user32")] public static extern int SendInput( int cInputs, ref INPUT pInputs, int cbSize );

            public void HoldKey( Keys vk )
            {
                  INPUT input = new INPUT();
                  input.type = INPUT_KEYBOARD;
                  input.ki.dwFlags = 0;
                  input.ki.wVk = (Int16)vk;
                  SendInput( 1, ref input, Marshal.SizeOf( input ) );
            }

            public void ReleaseKey( Keys vk )
            {
                  INPUT input = new INPUT();
                  input.type = INPUT_KEYBOARD;
                  input.ki.dwFlags = KEYEVENTF_KEYUP;
                  input.ki.wVk = (Int16)vk;
                  SendInput( 1, ref input, Marshal.SizeOf( input ) );
            }

            public void PressKey( Keys vk )
            {
                  HoldKey( vk );
                  ReleaseKey( vk );
            }

            private void button2_Click(object sender, System.EventArgs e)
            {
                  richTextBox1.Focus();
                  HoldKey( Keys.RControlKey );
                  PressKey( Keys.End );
                  ReleaseKey( Keys.RControlKey );
            }

When button2 is pressed, it focuses richTextBox1 control in my form, and holds the Ctrl key, presses End key and then releases Ctrl key.. Ctrl+End is a better hotkey then just End key.. works for almost all viewer/editors..
By the way, if you want to do this for an external application, just set it as a foreground window, activate it and send the same keys..

Caner ELCI
0

Featured Post

New benefit for Premium Members - Upgrade now!

Ready to get started with anonymous questions today? It's easy! Learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

It was really hard time for me to get the understanding of Delegates in C#. I went through many websites and articles but I found them very clumsy. After going through those sites, I noted down the points in a easy way so here I am sharing that unde…
This article aims to explain the working of CircularLogArchiver. This tool was designed to solve the buildup of log file in cases where systems do not support circular logging or where circular logging is not enabled
This course is ideal for IT System Administrators working with VMware vSphere and its associated products in their company infrastructure. This course teaches you how to install and maintain this virtualization technology to store data, prevent vuln…
In this video, Percona Solution Engineer Dimitri Vanoverbeke discusses why you want to use at least three nodes in a database cluster. To discuss how Percona Consulting can help with your design and architecture needs for your database and infras…
Suggested Courses

721 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question