14-08-20, 11:53 PM (آخر تعديل لهذه المشاركة : 14-08-20, 11:54 PM {2} بواسطة masaoud.)
وعليكم السلام
لانها مجرد فورم آلة حاسبة فلم لا تجعلها نافذة عادية بمعنى لا تحدد لها MDIParent
ولكن اظهرها بهذه الطريقة
formCalculate.Show(Me) 'لتجعلها في الاعلى تم تحديد Me بين الاقواس
15-08-20, 06:17 AM (آخر تعديل لهذه المشاركة : 15-08-20, 06:20 AM {2} بواسطة معاند الحظ.)
وعليك السلام ورحمة الله وبركاته
اخوي عبد العزيز ربما تحتاج استخدام مكتبات WinApi لتنفيذ ماتريد وبالمصادفة وجدت الكود التالي وهو لسائل يريد التحكم بنافذة الحاسبة ايضا
اضف الكلاس التالي الى مشروعك
وقم بتعريف متغيير منه ضمن الفورم الذي تستخدمه
كود :
Imports System.Runtime.InteropServices
Public Class WinPos
<DllImport("user32.dll")>
<MarshalAs(UnmanagedType.Bool)>
Private Shared Function GetWindowRect(ByVal hWnd As IntPtr, <Out> ByRef lpRect As RECT) As Boolean
End Function
<StructLayout(LayoutKind.Sequential)>
Public Structure RECT
Public Left As Integer ' x position of upper-left corner
Public Top As Integer ' y position of upper-left corner
Public Right As Integer ' x position of lower-right corner
Public Bottom As Integer ' y position of lower-right corner
End Structure
Private ReadOnly HWND_BOTTOM As New IntPtr(1)
Private ReadOnly HWND_NOTOPMOST As New IntPtr(-2)
Private ReadOnly HWND_TOP As New IntPtr(0)
Private ReadOnly HWND_TOPMOST As New IntPtr(-1)
Private Const SWP_NOSIZE As Integer = &H0001
Private Const SWP_NOZORDER As Integer = &H0004
Private Const SWP_SHOWWINDOW As Integer = &H0040
<DllImport("user32.dll", SetLastError:=True)>
Private Shared Function SetWindowPos(ByVal hWnd As IntPtr, ByVal hWndInsertAfter As IntPtr, ByVal X As Integer, ByVal Y As Integer, ByVal cx As Integer, ByVal cy As Integer, ByVal uFlags As Integer) As Boolean
End Function
Private process As Process
Public Sub New()
InitializeComponent()
process = Process.GetProcessesByName("calc").FirstOrDefault()
End Sub
End Class
وفي حدث الضغط على الزر
كود :
Private Sub button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
If process Is Nothing Then Return
Dim handle As IntPtr = process.MainWindowHandle
If handle IsNot IntPtr.Zero Then
Dim rct As RECT
GetWindowRect(handle, rct)
Dim screen As Rectangle = Screen.FromHandle(handle).Bounds
Dim pt As Point = New Point(screen.Left + screen.Width / 2 - (rct.Right - rct.Left) / 2, screen.Top + screen.Height / 2 - (rct.Bottom - rct.Top) / 2)
SetWindowPos(handle, IntPtr.Zero, pt.X, pt.Y, 0, 0, SWP_NOZORDER Or SWP_NOSIZE Or SWP_SHOWWINDOW or HWND_TOPMOST )
End If
End Sub
معليش اخوي عبد العزيز انا نسخت الكود من موقع codeproject وعلى طول حطيته في ردي
لكن الان عدلت الكود وياليت تحذف الكود السابق اللي اعطيتك اياه وتستخدم التالي
مع ملاحظة استيراد فضاء الاسماء
كود :
Imports System.Runtime.InteropServices
كود :
<DllImport("user32.dll", SetLastError:=True)> _
Private Shared Function SetWindowPos(ByVal hWnd As IntPtr, ByVal hWndInsertAfter As IntPtr, ByVal X As Integer, ByVal Y As Integer, ByVal cx As Integer, ByVal cy As Integer, ByVal uFlags As SetWindowPosFlags) As Boolean
End Function
Private ReadOnly HWND_BOTTOM As New IntPtr(1)
Private ReadOnly HWND_NOTOPMOST As New IntPtr(-2)
Private ReadOnly HWND_TOP As New IntPtr(0)
Private ReadOnly HWND_TOPMOST As New IntPtr(-1)
<Flags()> _
Private Enum SetWindowPosFlags As UInteger
SynchronousWindowPosition = &H4000
DeferErase = &H2000
DrawFrame = &H20
FrameChanged = &H20
HideWindow = &H80
DoNotActivate = &H10
DoNotCopyBits = &H100
IgnoreMove = &H2
DoNotChangeOwnerZOrder = &H200
DoNotRedraw = &H8
DoNotReposition = &H200
DoNotSendChangingEvent = &H400
IgnoreResize = &H1
IgnoreZOrder = &H4
ShowWindow = &H40
End Enum
Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
setWindowOnTop(True)
End Sub
Private process As Process
Sub setWindowOnTop(Optional bool As Boolean = True)
process = process.GetProcessesByName("calc").FirstOrDefault()
If process Is Nothing Then Return
Dim hwnd As IntPtr = process.MainWindowHandle
Dim theFlags As String = SetWindowPosFlags.IgnoreMove Or SetWindowPosFlags.IgnoreResize Or SetWindowPosFlags.ShowWindow
If Not hwnd = IntPtr.Zero Then
If bool Then
'وضع الحاسبة في اعلى الشاشة
SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, 0, 0, theFlags)
Else
'اعادة الحاسبة الى الوضع العادي
SetWindowPos(hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, theFlags)
End If
End If
و الله بجد أخي الكريم معاند الحظ .. أرجو المعذرة .. لم أتمكن من ضبط ذلك
شوف الملف لو تكرّمت بارك الله فيك و لك و جزاك خير الجزاء
تحياتي واحتراماتي
طيب اخي
قبل اشغل برنامجك اسالك هل عندما شغلت البرنامج وقبل ضغط الزر كانت الحاسبة تعمل ولو في وضع التصغير
لان الكود السابق يجعل الحاسبة فوق كل النوافذ فقط اذا كانت الحاسبة قيد التشغيل
لكن لو كانت الحاسبة مغلقه فيجب تعديل الكود ليقوم اولا بتشغيل الحاسبة ثم يقوم بجعلها فوق النوافذ الاخرى