|
A Progressbar doesn't progress on it's own. Your code has to actively update the current value of the ProgressBar control to get the bar to move. This means that you can't just set a Timer for 5 seconds, sit back and do nothing until it fires. Your Timer has to advance the ProgressBar.
Setup a ProgressBar on your form. Set it's minimum value to 1, maximum to 10, and step value to 1. Set a Timer on your form for say 500 milliseconds (half a second). In the Tick event of your Timer, call the PerformStep method on the Progress bar. When the Value of the ProgressBar reaches 10, your done, close your form.
Docs on ProgressBar[^]
Dave Kreskowiak
Microsoft MVP - Visual Basic
|
|
|
|
|
Nice one, sorted
|
|
|
|
|
Below is what I have in the frmMain_KeyDown event
How do I call it from the Timer1_Tick event?
Dim strKeyPress As String = Nothing
strKeyPress = e.KeyCode.ToString()
Select Case strKeyPress
Case "Left"
R.X -= 10
Case "Right"
R.X += 10
End Select
|
|
|
|
|
You should examine EventHandler and RiseEvent methods. You can rise the event inside the Timer1_Tick event.
What a curious mind needs to discover knowledge is noting else than a pin-hole.
|
|
|
|
|
You move this code to it's own method, then call it from the KeyDown event handler, passing the data the method needs to do its work. You do the same from your Tick event handler, but why are you calling keyboard handling code from a Timer?? And why are you converting the Keycode to a String when you don't have to??
Private Sub KeyHandler(ByVal keyCode As Keys)
Select Case keyCode
Case Keys.Left
R.X -= 10
Case Keys.Right
R.X += 10
End Select
End Sub
From your KeyDown event handler, you just do:
KeyHandler(e.KeyCode)
From your Tick event handler, you have to pass in whatever keycode you're going to use:
KeyHandler(Keys.Left)
Dave Kreskowiak
Microsoft MVP - Visual Basic
|
|
|
|
|
Hi Dave,
I'm just messing with an image that is divided into 35 Squares one is picked at random then the Timer1 event fires and drops the square down the form, what I want to do is press the left or right arrow key and move the tile accordingly.
So I need to check throughout the timer event to see if the arrow keys have been pressed or not.
|
|
|
|
|
Your tile coordinates would probably have class scope. This mean you can get to the coordinates from any method in your form.
Your Timer event should just be concerned with changing the coordinates, moving the tile down the form. It doesn't need to know anything about any keystrokes and doesn't need to generate any.
The second thing that the Timer event needs to do is redraw the form so the user sees the tile moving down the form.
Your keydown event should be doing just what it's doing - moving the tile coordinates left and right.
Dave Kreskowiak
Microsoft MVP - Visual Basic
|
|
|
|
|
Cheers Dave
|
|
|
|
|
Hi,
I am attempting to make and application that retrieves information about the active window in the system. I have always used the GetForegroundWindow function with no problems in both C++ and VB6.
However, when I attempt the call the function in VS2005, vb.net, I only return the window handle about a third of the time. The other two thirds it simply returns 0. The window type doesnt seem to matter since it has happened with many different windows.
This is my code for attempting to retrieve the hwnd...
Dim lhwnd As Long
Call ShowWindow(Me.Handle), SW_HIDE)
lhwnd = GetForegroundWindow
Me.Text = lhwnd
Call ShowWindow(Me.Handle, SW_SHOW)
I have tried it using command buttons, link labels and other control click events and it still doesnt seem to want to work.
I tried calling it as such also.
Dim lhwnd As Long
Call ShowWindow(Me.Handle), SW_HIDE)
Dim lhwnd as long = GetForegroundWindow
Me.Text = lhwnd
Call ShowWindow(Me.Handle, SW_SHOW)
and
Dim lhwnd As Int32
Call ShowWindow(Me.Handle), SW_HIDE)
lhwnd = GetForegroundWindow
Me.Text = lhwnd
Call ShowWindow(Me.Handle, SW_SHOW)
Although it doesnt show, i also even placed the application.doevent call inbetween each line but that did not help either...
any help can be appreciated...
Thank You,
Brent
|
|
|
|
|
We need to see the Declaration of the GetForgroundWindow function. I get the feeling you just used the VB6 code without any conversion. The problem most people run into is that they don't know the difference between a VB6 Long type and a VB.NET Long.
In VB6, a Long is a standard 32-bit signed integer. In VB.NET, Long is a 64-bit signed integer. A VERY different number with different storage requirements.
For handles, you should be using the IntPtr type in VB.NET. So, for GetForegroundWindow, the Declare should be:
Private Declare Auto Function GetForegroundWindow Lib "user32" () As IntPtr
.
.
.
Dim foreWndHandle As IntPtr = GetForegroundWindow()
Dave Kreskowiak
Microsoft MVP - Visual Basic
|
|
|
|
|
Ok, I did not have the correct declaration but then I put your code in and i still only get back 0 every time for the hwnd...
here it is...
Public Declare Auto Function GetForegroundWindow Lib "user32" () As IntPtr<br />
<br />
<br />
Dim foreWndHandle As IntPtr = GetForegroundWindow()<br />
Debug.Print(foreWndHandle)<br />
<br />
I just debug.print it for ease of seeing if a viable hwnd pointer is returned. I get only about 10% of the time whether its a long, a int32 or intptr...
If i set it to int64, then i get a return everytime but i also get overflow which is understandable... now if there is a way to convert the 64-bit integer to a 32-Bit maybe it will work... I dont know...
I dont know why, but it pretty much only happens when the form is minimize or not visible. If the form is visible and the code is put into a timer to get the window, it gets it no problem.
<br />
Private Sub Timer1_Tick_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick<br />
ListBox1.Items.Add(GetForegroundWindow)<br />
End Sub<br />
I swap other windows to the foreground and their hwnds are captured with no probem, but when I minimize or make non visible, the function cannot retrieve the foreground window handle.
Brent
-- modified at 15:25 Saturday 3rd March, 2007
|
|
|
|
|
On a 32-bit processor, GetForegroundWindow will return a 32-bit unsigned integer, guaranteed. Using a 64-bit interger just corrupts the stack, so don't do it, unless, of course, you're running 64-bit Windows. If you have to ask how you can tell which version your running, your running 32-bit.
GetForegroundWindow CAN return 0, such as, how you've found, when a window is losing it's activation, like when you minimize the foreground window or its no longer visible. This is normal operation as described in the documentation for GetForegroundWindow[^].
Dave Kreskowiak
Microsoft MVP - Visual Basic
|
|
|
|
|
Right, and I understand that. However, when I do it in VB6 i have absolutely no problem with capturing the handle by placing a doevents between the minimize/visible call and the GetForegroundWindow call.
I tried application.doevents but it didnt seem to work either.
Does anyone think that calling the waitforsingleobject api call may work in this case, or what is the api call for a doevents.
By the way, thanks for helping me. The swap from VB6 to .net is a slow one.
Brent
|
|
|
|
|
I finally made a workaround, and i hate workarounds but here it is unless someone else has a better idea...
<br />
Do<br />
wndHWND = (GetForegroundWindow)<br />
Application.DoEvents<br />
Loop Until wndHWND <> 0<br />
I works but man I hate looping just to get a value..
Brent
|
|
|
|
|
Well, you have to account for the fact that, sometimes, there is no ForegroundWindow!
Dave Kreskowiak
Microsoft MVP - Visual Basic
|
|
|
|
|
DoEvents doesnt have an API call. All it does is release control so your application's message pump can process it's pending messages. But, this call is only for the application that calls DoEvents. It doesn't have any effect on the rest of the system.
As far as a workaround - you found it. Your VB6 code ignored the possibility of the call returning NULL. Just because it happened to work before doesn't make it a correct implementation of calling GetForegroundWindow.
Dave Kreskowiak
Microsoft MVP - Visual Basic
|
|
|
|
|
|
it is working fine I had no problem in displaying it. You have used vbCrlf in right place.
What a curious mind needs to discover knowledge is noting else than a pin-hole.
|
|
|
|
|
If your label in for an asp.net application you need to put in a which the the HTML version of vbCrLf.
So if this is an asp.net app then your code would look like:
lblScore.Text = "Well done, you got " & intScoreTop & " out of 10"
If this is a windows app it should work fine.
Ben
|
|
|
|
|
hi guys?
I am making a POS - Point of sale System - project. I want to read from a barcode reader and match the barcode against a barcode already in the database. I'm really stumped on how to go about it. How can I save a barcode to the database and then match what is in the database to what has been read from the barcode reader.
Please help
Moseti
|
|
|
|
|
A bar code represents a string of characters and numbers. So your bar code reader should scan the bar code and convert it into the string representation. This is the value you would save in the database. Once in string form it should be very easy to compare it with other items in the database.
Mike Lasseter
|
|
|
|
|
Hello,
This is very simple. The input of scanning in a barcode is the same as the keyboard input.
If you want to input a barcode value, you just put the cursor in a text box, read in the barcode and the value will be there. Once you have it you can do what you like if it. input into a database, compare with another value etc.
Once the barcode scanner is connected to the computer, you don't have to do anything else.
Hope this help,
Steve
|
|
|
|
|
How can I import data from a Foxpro database to an access databse using VB.Net Code
|
|
|
|
|
In my software when I'm in a textbox(big and multilined), and press Ctrl+T a textbox(small box)
must appear beside the cursor(not the mouse pointer).
(I don't want a code for the entire screen just in the big textbox)
pls Help very urgent.
|
|
|
|
|
Well it is quite bit intrique. I am still working on it but having hard time to display the textbox next to cursor inside the big textbox. Here is the code it displays the text box according to form's cursor (X and Y) coordinates.
Public Class Form1
Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
If e.KeyChar = Chr(65) Then 'Define CTRL-T instead of chr(65) "A"
Dim tbox As New TextBox
Dim tx As Int32 = Windows.Forms.Cursor.Position.X
Dim ty As Int32 = Windows.Forms.Cursor.Position.Y
Me.Controls.Add(tbox)
tbox.Location = tbox.PointToClient(New Point(tx, ty))
tbox.BringToFront()
End If
End Sub
End Class
What a curious mind needs to discover knowledge is noting else than a pin-hole.
|
|
|
|