|
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
|
|
|
|
|
You can use the IsWindowVisible[^] function with a while loop instead of sleeping the thread
|
|
|
|
|
I need another coffee...
Ideological Purity is no substitute for being able to stick your thumb down a pipe to stop the water
|
|
|
|
|
I've just been playing around with this as your question interested me. There's a bit more to just setting the parent handle. This is what I came up with after a little research and testing, it will still need further work but it's a start:
using System;
using System.Runtime.InteropServices;
internal static class NativeMethods
{
public const int GWL_STYLE = -16;
public const int WS_VISIBLE = 0x10000000;
[DllImport("User32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool IsWindowVisible(IntPtr hWnd);
[DllImport("User32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool MoveWindow(IntPtr hWnd, int X, int Y, int nWidth, int nHeight, bool bRepaint);
[DllImport("User32.dll")]
public static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
[DllImport("User32.dll")]
public static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong);
}
using System;
using System.Diagnostics;
using System.Drawing;
using System.Windows.Forms;
internal class ProcessWrapper
{
private Process process = null;
public ProcessWrapper(Process process)
{
this.process = process;
}
public void Close()
{
if (process != null)
process.CloseMainWindow();
}
public void PlaceInControl(Control control)
{
if (control != null && process != null)
{
while (
process.MainWindowHandle == IntPtr.Zero ||
!NativeMethods.IsWindowVisible(process.MainWindowHandle))
{
process.Refresh();
}
process.WaitForInputIdle();
NativeMethods.SetParent(process.MainWindowHandle, control.Handle);
NativeMethods.SetWindowLong(
process.MainWindowHandle,
NativeMethods.GWL_STYLE,
NativeMethods.WS_VISIBLE);
Resize(control.ClientRectangle);
}
}
public void Resize(Rectangle rectangle)
{
if (process != null)
NativeMethods.MoveWindow(
process.MainWindowHandle,
rectangle.X,
rectangle.Y,
rectangle.Width,
rectangle.Height,
true);
}
}
using System;
using System.Diagnostics;
using System.Windows.Forms;
public partial class FormMain : Form
{
private ProcessWrapper processWrapper;
public FormMain()
{
InitializeComponent();
FormClosing += new FormClosingEventHandler(FormMainFormClosing);
panel.Resize += new EventHandler(PanelResize);
processWrapper = new ProcessWrapper(Process.Start("calc.exe"));
processWrapper.PlaceInControl(panel);
}
private void PanelResize(object sender, EventArgs e)
{
if (processWrapper != null)
processWrapper.Resize(panel.ClientRectangle);
}
private void FormMainFormClosing(object sender, FormClosingEventArgs e)
{
if (processWrapper != null)
processWrapper.Close();
}
}
|
|
|
|