|
Greetings, everyone! I have a list of Panel controls containing information. Each panel is modeled as a sheet of paper almost like it is in Microsoft Word. There are 55 sheets to be displayed but when I try to show them, only 29 of them are shown. The last sheet that is shown (29th sheet) is positioned such that The Location.Y never goes beyond 32767. The rest of the sheets are therefore not shown on the parent control.
I do think the value 32767 is the highest value for signed 16bit integer. However, the Point Structure for Control Location takes integer values but this does not go beyond that. Is there any other approach to show all the sheets? Thanks in advance.
|
|
|
|
|
You may want to consider setting the panel's AutoScroll [^] property to true in order to view sheets that are outside its visible boundary.
/ravi
|
|
|
|
|
Ravi, AutoScroll is already set to true and Scrollbars appear. During scrolling, I realise that only 29 sheets are drawn with the last sheet location at Y-coordinate 32767. The rest of the sheets to be shown beyond this point are not drawn.
modified 11-Mar-12 4:25am.
|
|
|
|
|
And what would you do when your document had 550 or 5500 pages?
You need a virtual approach; don't have all the pages present all the time, just have the ones you need at any point in time. As a minimum, you could reduce the height of all panels not in the current view (the vertical scroll bar becomes pretty useless anyway when the height exceeds 10000); and at best you would not have all those pages in memory at all.
|
|
|
|
|
Thanks Luc. I think it calls for a redesign. I'm thinking of implementing the scrolling on my own. Then during painting, I draw only those sheets that will be visible. What I'm thinking about now is how to know the particular page of the sheets to be drawn based on the scroll position. I'm thinking of any approach that will avoid Control.Location property. Any idea please?
|
|
|
|
|
I see two ways:
1. use a scrollable-panel-in-panel approach, then look for the VerticalScroll property.
2. use a single Panel plus a Scrollbar, and organize it all yourself.
|
|
|
|
|
How to search multiple images by its contains?
|
|
|
|
|
Sorry, but that doesn't make a lot of sense.
Please, try to give us more information, maybe an example of what you are trying to achieve.
Ideological Purity is no substitute for being able to stick your thumb down a pipe to stop the water
|
|
|
|
|
hello, please i want code to read and display image in c#
|
|
|
|
|
From where, and to what?
Ideological Purity is no substitute for being able to stick your thumb down a pipe to stop the water
|
|
|
|
|
i dont understand what u mean from where and to what !! but i want it in c# (console applicatin)..
how to read any image then disply it
thank u .
|
|
|
|
|
Ok, there are a couple of problems here...
Where do you want to get the image from? Is it in a file, or a database, or a web server? Or a application resource, or...
Each location would require different techniques to fetch the image.
You can't display an image in a Console application - they are restricted to text only. You would need to use a WinForms or WPF application (unless you are thinking of doing an automatic JPG to ASCII art conversion, and trust me, that gets complicated!)
If you use WinForms, then you can just place a PictureBox control on your form, or use the Paint event to display what you want. There are other ways to do this, but we need to know what you are trying to use before we can answer your question!
Ideological Purity is no substitute for being able to stick your thumb down a pipe to stop the water
|
|
|
|
|
thank u very much 4 replaying
iam beginner in this gob so i will try and send it to u ,,but i'm hurry cause i have project
thanx agine
|
|
|
|
|
- What kind of image?
- Wher do you want to read it from?
- Where do you want to display it?
Please give some more thought to the problem you are trying to solve and perhaps do some research into image handling for yourself.
Unrequited desire is character building. OriginalGriff
I'm sitting here giving you a standing ovation - Len Goodman
|
|
|
|
|
hello richard ..
thanx for replaying.. so,, the image type is png ,, and i want to read it from file store in my computer
regards
|
|
|
|
|
Try the Image [^] class, it looks like it offers what you need.
Unrequited desire is character building. OriginalGriff
I'm sitting here giving you a standing ovation - Len Goodman
|
|
|
|
|
Down vote countered.
Ideological Purity is no substitute for being able to stick your thumb down a pipe to stop the water
|
|
|
|
|
Thanks, but really "am I bovvered?".
[edit]
I lost 2 rep points from the (dick who gave me the) down vote, and gained 24 from you and A N Other.
[/edit]
Unrequited desire is character building. OriginalGriff
I'm sitting here giving you a standing ovation - Len Goodman
|
|
|
|
|
I didn't think you would be, but if the down voters realised they were actually increasing your score rather than lowering it...
Ideological Purity is no substitute for being able to stick your thumb down a pipe to stop the water
|
|
|
|
|
Richard MacCutchan wrote: A N Other
|
|
|
|
|
|
How to place a .exe file into the panel in visual studio windows form application c#.
using this
System.Diagnostics.Process.Start("calc.exe");
the calculator.exe will pop up after a button is being clicked. how do i do it in a way such that the calculator is being displayed in the panel after the button is clicked?
and also if i want to run another exe file of my own in this panel how do i go about doing it?
|
|
|
|
|
Using the SetParent API might help you achieve this.
[DllImport("user32.dll")]
static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndParent);
void LoadProcessInPanel
{
...
Process process = Process.Start("calc.exe");
SetParent(process.MainWindowHandle, myPanel.Handle);
...
}
modified 10-Mar-12 1:44am.
|
|
|
|
|
Unless Calc.exe starts a lot quicker than it does on my PC, you need a delay before you change the parent - it won't work until the window is fully constructed.
Ideological Purity is no substitute for being able to stick your thumb down a pipe to stop the water
|
|
|
|
|
The solution Abhinav gave you will not work as is: you need to wait for the window to be fully loaded before you set the new value:
Process process = Process.Start("calc.exe");
Thread.Sleep(500);
SetParent(process.MainWindowHandle, myPanel.Handle);
You will also need to move it to a "sensible" location within your panel after you display it.
[DllImport("user32.dll")]
static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndParent);
[DllImport("user32.dll", EntryPoint = "SetWindowPos")]
public static extern IntPtr SetWindowPos(IntPtr hWnd, int hWndInsertAfter, int x, int Y, int cx, int cy, int wFlags);
private const short SWP_NOMOVE = 0X2;
private const short SWP_NOSIZE = 1;
private const short SWP_NOZORDER = 0X4;
private const int SWP_SHOWWINDOW = 0x0040;
private void myButton_Click(object sender, EventArgs e)
{
Process process = Process.Start("calc.exe");
Thread.Sleep(500);
IntPtr processHandle = process.MainWindowHandle;
SetParent(processHandle, myPanel.Handle);
SetWindowPos(processHandle, 0, 0, 0, myPanel.Bounds.Width, myPanel.Bounds.Height, SWP_NOZORDER | SWP_SHOWWINDOW);
}
You might want to look at this: Window Tabifier[^] - it's a bit more complex that you appear to need, but it does everything you want to!
Ideological Purity is no substitute for being able to stick your thumb down a pipe to stop the water
|
|
|
|