مشکل با ویندوز ۶۴ بیتی در ترفند حذف کپشن یک یوزرفرم

Collapse
این تاپیک قفل است.
X
X
 
  • زمان
  • نمایش
حذف همه
new posts
  • Imanfy

    • 2011/07/16
    • 50
    • 56.00

    [حل شده] مشکل با ویندوز ۶۴ بیتی در ترفند حذف کپشن یک یوزرفرم

    سلام صبح همه اساتید و بازدید کنندگان محترم بخیر
    برای حذف کادر کپشن یک یوزر فرم دستوراتی رو در vb پیدا کردم. این دستوراتش اینه

    توی یه ماژول جدید کد زیر رو وارد میکنیم


    کد:
    [LEFT]
    Option Explicit
    
    
    Private Declare Function FindWindow Lib "User32" _
    Alias "FindWindowA" ( _
    ByVal lpClassName As String, _
    ByVal lpWindowName As String) As Long
    
    
    Private Declare Function GetWindowLong Lib "User32" _
    Alias "GetWindowLongA" ( _
    ByVal hwnd As Long, _
    ByVal nIndex As Long) As Long
    
    
    Private Declare Function SetWindowLong Lib "User32" _
    Alias "SetWindowLongA" (ByVal hwnd As Long, _
    ByVal nIndex As Long, _
    ByVal dwNewLong As Long) As Long
    
    
    Private Declare Function DrawMenuBar Lib "User32" ( _
    ByVal hwnd As Long) As Long
    
    
    Sub RemoveCaption(objForm As Object)
    
    
    Dim lStyle          As Long
    Dim hMenu           As Long
    Dim mhWndForm       As Long
    
    
    If Val(Application.Version) < 9 Then
    mhWndForm = FindWindow("ThunderXFrame", objForm.Caption)    'XL97
    Else
    mhWndForm = FindWindow("ThunderDFrame", objForm.Caption)    'XL2000+
    End If
    lStyle = GetWindowLong(mhWndForm, -16)
    lStyle = lStyle And Not &HC00000
    SetWindowLong mhWndForm, -16, lStyle
    DrawMenuBar mhWndForm
    
    
    End Sub
    
    
    Sub ShowForm()
    
    
    UserForm1.Show False
    
    
    End Sub
    [/LEFT]
    و در کد های USERFORM مون این کد ها رو وارد میکنیم


    کد:
    Option Explicit
    Private Sub UserForm_Initialize()
        Call RemoveCaption(Me)
    End Sub

    بعد کادر کپشن حذف میشه


    حالا مشکلم اینه که توی ویندوز های ۶۴ بیتی ه
    فایل تو ویندوز های ۶۴ بیتی پیام میده چه کنم که این پیام دیده نشه
    عکس خطا رو هم پیوست می*کنم
    فایل های پیوست شده
    Last edited by Imanfy; 2017/01/29, 11:31. دلیل: خطا در نوشتن کد-حذف کادر کد اضافه
  • elam

    • 2014/10/21
    • 67
    • 54.00

    #2
    هر کجا عبارت Declare را مشاهده کردید عبارت Ptrsafe را بعدش بنویسید.

    کامنت

    • Imanfy

      • 2011/07/16
      • 50
      • 56.00

      #3
      نوشته اصلی توسط elam
      هر کجا عبارت Declare را مشاهده کردید عبارت Ptrsafe را بعدش بنویسید.
      حالا تو ویندوز های ۳۲ بیتی خطا میده و خطوط رو قرمز میکنه
      Last edited by Imanfy; 2017/01/29, 18:43. دلیل: تکمیل شرح

      کامنت

      • elam

        • 2014/10/21
        • 67
        • 54.00

        #4
        عبارت شما باید به شکل زیر بشه
        Declare Ptrsafe Function

        تاکید میکنم هر کجا Declare را دیدید باید به شکل بالا تغغیر بدید

        کامنت

        • Imanfy

          • 2011/07/16
          • 50
          • 56.00

          #5
          نوشته اصلی توسط elam
          عبارت شما باید به شکل زیر بشه
          Declare Ptrsafe Function

          تاکید میکنم هر کجا Declare را دیدید باید به شکل بالا تغغیر بدید
          انجام دادم دوست من
          توی ویندوز های ۶۴ بیتی درست کار میکنه ولی توی ۳۲ بیتی مشکل داره

          کامنت

          • Imanfy

            • 2011/07/16
            • 50
            • 56.00

            #6
            نوشته اصلی توسط Imanfy
            سلام صبح همه اساتید و بازدید کنندگان محترم بخیر
            برای حذف کادر کپشن یک یوزر فرم دستوراتی رو در vb پیدا کردم. این دستوراتش اینه........

            حالا مشکلم اینه که توی ویندوز های ۶۴ بیتی ه
            فایل تو ویندوز های ۶۴ بیتی پیام میده چه کنم که این پیام دیده نشه
            عکس خطا رو هم پیوست می کنم
            دوستان من خودم یه راه حل پیدا کردم که جواب میده ولی یه مقدار سرعت فایل رو کم کرده، اگر دوستان راه حل بهتری دارند ممنون میشم که کمکم کنند

            برای اینکه فایل هایی که داری فراخوانی کتابخانه ی VBA هستند همزمان
            در ویندوز های ۳۲ بیتی و ۶۴ بیتی کار کنند کافیه که از دستورات زیر استفاده کنید

            در ابتدای فراخوانی باید از کد
            کد:
            #If Win64 Then
            استفاده کنیم.
            بعد با دستور
            کد:
            Declare PtrSafe
            کتابخانه هامون رو فراخونی میکنیم.
            بعد باید عبارت
            کد:
            #Else
            رو قرار بدیم و با استفاده از دستور
            کد:
            Declare
            کتابخونه ها رو فراخوانی کنیم
            در پایان فراخوانی هم از کد
            کد:
            #End If
            استفاده می کنیم

            این کد ها برای من کار کرد و روی ویندوز های ۳۲ بیتی و ۶۴ بیتی هم تست شد.
            این کد رو قرار دادم تا دوستان دیگه هم استفاده کنند.
            شاید به درد یکی دیگه هم خورد
            کماکان منتطر راه های سریعتر هستم
            شاد و سربلند و پیروز باشید

            کامنت

            چند لحظه..