|
Hi,
I'm not familiar with OracleDB, however reading one page of documentation[^] suggests you might want RefCursor .
|
|
|
|
|
hi luc,thanks for reply . let me try it using refCursor
|
|
|
|
|
I'm using the code below to temporarily set a window to top most foreground. How can I return it to the standard function of being in the foreground depending on the last time it was touched by the mouse? I can't seem to figure out which uint32 to use to achieve what I'd like?
private static readonly IntPtr HWND_TOPMOST = new IntPtr(-1);
private static readonly IntPtr HWND_NOTOPMOST = new IntPtr(-2);
private const UInt32 SWP_NOSIZE = 0x0001;
private const UInt32 SWP_NOMOVE = 0x0002;
private const UInt32 SWP_NOZORDER = 0x0004;
private const UInt32 SWP_NOREDRAW = 0x0008;
private const UInt32 SWP_NOACTIVATE = 0x0010;
private const UInt32 SWP_DRAWFRAME = 0x0020;
private const UInt32 SWP_FRAMECHANGED = 0x0020;
private const UInt32 SWP_SHOWWINDOW = 0x0040;
private const UInt32 SWP_HIDEWINDOW = 0x0080;
private const UInt32 SWP_NOCOPYBITS = 0x0100;
private const UInt32 SWP_NOOWNERZORDER = 0x0200;
private const UInt32 SWP_NOREPOSITION = 0x0200;
private const UInt32 SWP_NOSENDCHANGING = 0x0400;
private const UInt32 SWP_DEFERERASE = 0x2000;
private const UInt32 SWP_ASYNCWINDOWPOS = 0x4000;
private const UInt32 TOPMOST_FLAGS = SWP_NOMOVE | SWP_NOSIZE;
private const UInt32 NOTOPMOST_FLAGS = SWP_SHOWWINDOW;
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags);
SetWindowPos(this.Handle, HWND_TOPMOST, 0, 0, 0, 0, TOPMOST_FLAGS);
Thanks!
|
|
|
|
|
|
Hi,
I've tried multiple variations of what I think is correct and it is not working. Here is an example of what I thought was correct
SetWindowPos(this.Handle, HWND_TOP, 120, 240, 200, 400, 0);
Can you tell me what I'm doing wrong? When using the above code, the window is still at the top most, even when I click on another window to bring it to the foreground.
|
|
|
|
|
It all seems to work for me. Can you provide some more details of exactly what you are doing, and exactly what results you get?
|
|
|
|
|
Sure, I am having the program go to top most after a button click and then selecting coordinates on the screen with the mouse and clicking another button to send keys to those coordinates and then after it is done I'd like for it to go back to standard Z order, but it is staying at top most.
|
|
|
|
|
Fine, but we cannot guess what your code is actually doing.
|
|
|
|
|
Here is the button click function, would you like me to copy/paste the entire code?
private void btnSelectTypingBox_Click(object sender, EventArgs e)
{
try
{
if (tempBlocker == false)
{
if (btnSelectTypingBox.Text == "Select Box")
{
btnSelectTypingBox.Text = "Waiting";
tempBlocker = false;
SetWindowPos(this.Handle, HWND_TOPMOST, 0, 0, 0, 0, TOPMOST_FLAGS);
}
else if (btnSelectTypingBox.Text == "Waiting")
{
btnSelectTypingBox.Text = "Select Box";
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message + " | " + ex.Source + " | " + ex.InnerException + " | " + ex.StackTrace);
}
}
|
|
|
|
|
How about
SetWindowPos(this.Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE| SWP_NOZORDER); ?
some extra SWP values might be required...
|
|
|
|
|
Hi Luc,
Here is what I tried, but it did not work for me
private void btnTest_Click(object sender, EventArgs e)
{
SetWindowPos(this.Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER);
}
And here is my pininvoke code
private static readonly IntPtr HWND_TOPMOST = new IntPtr(-1);
private static readonly IntPtr HWND_NOTOPMOST = new IntPtr(-2);
private static readonly IntPtr HWND_TOP = new IntPtr(0);
private const UInt32 SWP_NOSIZE = 0x0001;
private const UInt32 SWP_NOMOVE = 0x0002;
private const UInt32 SWP_NOZORDER = 0x0004;
private const UInt32 SWP_NOREDRAW = 0x0008;
private const UInt32 SWP_NOACTIVATE = 0x0010;
private const UInt32 SWP_DRAWFRAME = 0x0020;
private const UInt32 SWP_FRAMECHANGED = 0x0020;
private const UInt32 SWP_SHOWWINDOW = 0x0040;
private const UInt32 SWP_HIDEWINDOW = 0x0080;
private const UInt32 SWP_NOCOPYBITS = 0x0100;
private const UInt32 SWP_NOOWNERZORDER = 0x0200;
private const UInt32 SWP_NOREPOSITION = 0x0200;
private const UInt32 SWP_NOSENDCHANGING = 0x0400;
private const UInt32 SWP_DEFERERASE = 0x2000;
private const UInt32 SWP_ASYNCWINDOWPOS = 0x4000;
private const UInt32 TOPMOST_FLAGS = SWP_NOMOVE | SWP_NOSIZE;
private const UInt32 NOTOPMOST_FLAGS = SWP_SHOWWINDOW;
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags);
|
|
|
|
|
Hi,
two things:
1. "did not work for me" isn't helpful; what did it do? and what did it not do that you were hoping to get? please be precise.
2. why is this in a new Click handler, I was expecting this to go in the else block, as counterpart to your SetWindowPos(this.Handle, HWND_TOPMOST...) .
|
|
|
|
|
It did not remove the topmost flag as the application is still set to topmost. I would like it to go from a topmost application back to a standard z ordered application as it is before the topmost flag is set.
I was testing it with a test button for simplification is all, as soon as I get a working example I will then incorporate it into an else block
|
|
|
|
|
The problem is that your X, Y, cx and cy values are all zero, and when you switch to NoTopMost, you have omitted the flags to keep the size and position. Edit your code and replace the definition of NOTOPMOST_FLAGS with the following.
private const UInt32 NOTOPMOST_FLAGS = TOPMOST_FLAGS | SWP_SHOWWINDOW;
Had you explained exactly what happened when you ran your code we could have helped earlier.
|
|
|
|
|
Thank you.
Strangely enough when I have the above code in a separate button it removes the topmost flag correctly, but when I have it at the end of the send.keys function it does not remove the topmost flag? Any ideas on what could be causing that?
modified 5-Jan-18 22:58pm.
|
|
|
|
|
turbosupramk3 wrote: what could be causing that? Not without seeing the actual code.
|
|
|
|
|
Sure thing, the first block is my Pininvoke code, then the standard function and then the test button.
The standard function code will put the form to topmost, but will not remove the topmost flag. The test button will remove the topmost flag after the standard function places the topmost flag.
private static readonly IntPtr HWND_TOPMOST = new IntPtr(-1);
private static readonly IntPtr HWND_NOTOPMOST = new IntPtr(-2);
private static readonly IntPtr HWND_TOP = new IntPtr(0);
private const UInt32 SWP_NOSIZE = 0x0001;
private const UInt32 SWP_NOMOVE = 0x0002;
private const UInt32 SWP_NOZORDER = 0x0004;
private const UInt32 SWP_NOREDRAW = 0x0008;
private const UInt32 SWP_NOACTIVATE = 0x0010;
private const UInt32 SWP_DRAWFRAME = 0x0020;
private const UInt32 SWP_FRAMECHANGED = 0x0020;
private const UInt32 SWP_SHOWWINDOW = 0x0040;
private const UInt32 SWP_HIDEWINDOW = 0x0080;
private const UInt32 SWP_NOCOPYBITS = 0x0100;
private const UInt32 SWP_NOOWNERZORDER = 0x0200;
private const UInt32 SWP_NOREPOSITION = 0x0200;
private const UInt32 SWP_NOSENDCHANGING = 0x0400;
private const UInt32 SWP_DEFERERASE = 0x2000;
private const UInt32 SWP_ASYNCWINDOWPOS = 0x4000;
private const UInt32 TOPMOST_FLAGS = SWP_NOMOVE | SWP_NOSIZE;
private const UInt32 NOTOPMOST_FLAGS = TOPMOST_FLAGS | SWP_SHOWWINDOW;
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags);
private void btnType_Click(object sender, EventArgs e)
{
try
{
if (tbxTagList.Text == "")
{
MessageBox.Show("Please enter in at least 1 tag");
return;
}
int x = Convert.ToInt32(tbxXCoordinates.Text);
int y = Convert.ToInt32(tbxYCoordinates.Text);
SimulateMouseClick(x, y);
foreach (char character in tbxTagList.Text)
{
if ((character != '\n') && (character != '\r'))
{
SendKeys.Send(character.ToString());
}
if (character == '\n')
{
SendKeys.Send("{Enter}");
Thread.Sleep(3);
}
Thread.Sleep(3);
}
tbxXCoordinates.Text = "";
tbxYCoordinates.Text = "";
SetWindowPos(this.Handle, HWND_NOTOPMOST, 0, 0, 0, 0, NOTOPMOST_FLAGS);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message + " | " + ex.Source + " | " + ex.InnerException + " | " + ex.StackTrace);
}
}
private void btnTest_Click(object sender, EventArgs e)
{
SetWindowPos(this.Handle, HWND_NOTOPMOST, 0, 0, 0, 0, NOTOPMOST_FLAGS);
}
|
|
|
|
|
I cannot see anything wrong with that code, and the documentation does not give any further ideas.
|
|
|
|
|
Ok, thank you for trying!
|
|
|
|
|
I don't know why, but the addition of the thread sleep as pictured below fixed it?
tbxXCoordinates.Text = "";
tbxYCoordinates.Text = "";
Thread.Sleep(250);
SetWindowPos(this.Handle, HWND_NOTOPMOST, 0, 0, 0, 0, NOTOPMOST_FLAGS);
|
|
|
|
|
|
hello. is it possible to use the design pattern of MVC in my desktop application created with in WPF ?if possible give an exemple ?
|
|
|
|
|
Sure, but not exactly like you see in an ASP.NET MVC app.
The version used in WPF is far more powerful and flexible. The pattern is called "Model View ViewModel[^]".
System.ItDidntWorkException: Something didn't work as expected.
-- said no compiler, ever.
C# - How to debug code[ ^].
Seriously, go read this article.
Dave Kreskowiak
|
|
|
|
|
that is to say with WPF instead search MVC we replace that with MVVM?
|
|
|
|
|
Yes
System.ItDidntWorkException: Something didn't work as expected.
-- said no compiler, ever.
C# - How to debug code[ ^].
Seriously, go read this article.
Dave Kreskowiak
|
|
|
|
|