تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[ تمّ الحل ] : جعل الآلة الحاسبة بمقدّمة الشاشة
#1
السّلام عليكم و رحمة الله و بركاته
إخواني الأفاضل هل هناك إمكانيّة جعل الآلة الحاسبة عند الضغط على زر معيّن تظهر بمكان معيّن بمقدّمة الشاشة ال MDIParent!!
حاولت بشتى الطرق لكنها تظهر خلف الشاشة ..
جربت
Me.TopMost = True
جربت
SendToBack
لكن لا حياة لمن تنادي
تحياتي
الرد
تم الشكر بواسطة: حريف برمجة
#2
وعليكم السلام

لانها مجرد فورم آلة حاسبة فلم لا تجعلها نافذة عادية بمعنى لا تحدد لها MDIParent
ولكن اظهرها بهذه الطريقة
formCalculate.Show(Me) 'لتجعلها في الاعلى تم تحديد Me بين الاقواس
الرد
#3
شكرا أخي مسعود ..
لا .. أنا أقصد حاسبة الوينداوز
تحياتي
الرد
تم الشكر بواسطة: حريف برمجة
#4
وعليك السلام ورحمة الله وبركاته

اخوي عبد العزيز ربما تحتاج استخدام مكتبات 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


SetWindowPos In PInvoke

الرد
#5
السّلام عليكم و رحمة الله و بركاته
أخي الكريم معاند الحظ ..
أشكرك جزيل الشكر على المساعدة
بارك الله فيك و لك و جزاك خير الجزاء
لم أتمكن يا غالي من تجربة الكود ..  يظهر خطأ بهذا السطر على مستوى الكلاس
كود :
<MarshalAs(UnmanagedType.Bool)>

تحياتي واحتراماتي
الرد
تم الشكر بواسطة: حريف برمجة , حريف برمجة
#6
معليش اخوي عبد العزيز انا نسخت الكود من موقع 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

    End Sub

الرد
#7
السّلام عليكم و رحمة الله و بركاته
و الله بجد أخي الكريم معاند الحظ .. أرجو المعذرة .. لم أتمكن من ضبط ذلك
شوف الملف لو تكرّمت بارك الله فيك و لك و جزاك خير الجزاء
تحياتي واحتراماتي


الملفات المرفقة
.rar   WindowsApplication1.rar (الحجم : 74.92 ك ب / التحميلات : 9)
الرد
تم الشكر بواسطة: حريف برمجة , حريف برمجة
#8
(15-08-20, 10:43 PM)عبد العزيز البسكري كتب :
السّلام عليكم و رحمة الله و بركاته
و الله بجد أخي الكريم معاند الحظ .. أرجو المعذرة .. لم أتمكن من ضبط ذلك
شوف الملف لو تكرّمت بارك الله فيك و لك و جزاك خير الجزاء
تحياتي واحتراماتي

طيب اخي
قبل اشغل برنامجك  اسالك هل عندما شغلت البرنامج وقبل ضغط الزر كانت الحاسبة تعمل ولو في وضع التصغير
لان الكود السابق يجعل الحاسبة فوق كل النوافذ فقط اذا كانت الحاسبة قيد التشغيل

لكن لو كانت الحاسبة مغلقه فيجب تعديل الكود ليقوم اولا بتشغيل الحاسبة ثم يقوم بجعلها فوق النوافذ الاخرى

الرد
#9
لا أخي الغالي .. الحاسبة غير شغالة إطلاقا
تحياتي
الرد
تم الشكر بواسطة: حريف برمجة , حريف برمجة
#10
الحمد لله تم حل 

تفضل اخوي واسف على التاخير 



.rar   WindowsApplication1.rar (الحجم : 71.97 ك ب / التحميلات : 18)

الرد


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  [سؤال] كود يبحث في ملفات وورد docx ولا يبحث في doc فما الحل؟ السندبااد 1 76 20-11-20, 10:45 PM
آخر رد: السندبااد
  اخفاء شريط ادوات مشغل vlc عند تكبير الشاشة ميدو الفنان 6 140 10-11-20, 10:12 PM
آخر رد: ميدو الفنان
  أريد كود إطفاء وتشغيل الشاشة ؟ [ Visual Studio 2010 ] PeterGhattas082460 1 149 09-11-20, 11:59 PM
آخر رد: SABER_ZINOUBI
  [ تمّ الحل ] : عدم القدرة على عمل أتاش لقاعدة البيانات عبد العزيز البسكري 23 1,193 24-10-20, 12:48 AM
آخر رد: عبد العزيز البسكري
  فتح الفورم على حسب مقاس الشاشة khaled Mohammed 2 291 17-09-20, 02:44 AM
آخر رد: mrfodri
  [ تمّ الحل ] : جلب قيمة من الريجيستري عبد العزيز البسكري 11 536 10-09-20, 04:01 PM
آخر رد: عبد العزيز البسكري
  [سؤال] [تم الحل]استعراض بيانات في Datagridview واضافة جميع البيانات لجدول محدد محمد العامر 6 838 22-08-20, 08:15 AM
آخر رد: محمد العامر
  عندي خطا في الريجستري ممكن الحل عاصم النجار 3 539 11-07-20, 07:50 PM
آخر رد: Mohamad Anan
  [ تمّ الحل ] : عدد الغياب الإجمالي للمترشّحين الذكور عبد العزيز البسكري 11 901 02-07-20, 02:47 PM
آخر رد: عبد العزيز البسكري
  مطلوب كود بعد ازن اخونا العرب(تم الحل) محمد ايمن 1 359 12-06-20, 04:02 AM
آخر رد: سعود

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم