64 bit de access penceresini gizleme

1 2
04/12/2013, 17:28

Hakan Tuna

Mehmet Bey Aynı Sorun ben de de var ama bir türlü yapamadım Sizin önerdiğiniz yolların hepsini denedim ama hata veriyor [code]Option Compare Database
Private Declare Function IsWindowVisible Lib "user32" (ByVal hwnd As Long) As Long
Dim dwReturn As Long
Const SW_HIDE = 0
Const SW_SHOWNORMAL = 1
Const SW_SHOWMINIMIZED = 2
Const SW_SHOWMAXIMIZED = 3
Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, _
ByVal nCmdShow As Long) As Long

Public Function fAccessWindow(Optional Procedure As String, Optional SwitchStatus As Boolean, Optional StatusCheck As Boolean) As Boolean
If Procedure = "Hide" Then
dwReturn = ShowWindow(Application.hWndAccessApp, SW_HIDE)
End If
If Procedure = "Show" Then
dwReturn = ShowWindow(Application.hWndAccessApp, SW_SHOWMAXIMIZED)
End If
If Procedure = "Minimize" Then
dwReturn = ShowWindow(Application.hWndAccessApp, SW_SHOWMINIMIZED)
End If
If SwitchStatus = True Then
If IsWindowVisible(hWndAccessApp) = 1 Then
dwReturn = ShowWindow(Application.hWndAccessApp, SW_HIDE)
Else
dwReturn = ShowWindow(Application.hWndAccessApp, SW_SHOWMAXIMIZED)
End If
End If
If StatusCheck = True Then
If IsWindowVisible(hWndAccessApp) = 0 Then
fAccessWindow = False
End If
If IsWindowVisible(hWndAccessApp) = 1 Then
fAccessWindow = True
End If
End If
End Function
04/12/2013, 17:52

yorum70

Sn.Mehmet DEMİRAL hocanın bir yorumundan araklanmıştır.

Ayrıca bu konuda ki, 1.sayfa yorumunu okuyunuz.

Alıntı:Modüllerdeki api declaration satırlarında PTRSAFE deyimini kullanmalısınız. Hem 32 hem de 64 bit'te çalışması için mesela aşağıdaki biçimde olan kodları
Visual Basic Application Kod
Private Declare Function apiShowWindow Lib "user32" Alias "ShowWindow" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long


şu şekilde değiştirin:
Visual Basic Application Kod
#If VBA7 Then Private Declare PtrSafe Function apiShowWindow Lib "user32" Alias "ShowWindow" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long #Else Private Declare Function apiShowWindow Lib "user32" Alias "ShowWindow" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long #End If

Böylece 32 bit için de 64 bit içinm de sorun ortadan kalkar.

Bunu eklemeniz gerektiğini nereden mi anlayacaksınız?
Modüllerde "private declare" ile başlayan kodlarda api kullanıldığı için 64 bit için sorun çıkar. Çünkü iki işletim sisteminde kullanılan api mantığı farklıdır. 32 bitlik işletim sisteminde kullanılan kodları yukarda verdiğim biçime dönüştürdüğünüzde her iki sistemde de sorunsuz çalışacaktır.

Bir uyarı: Eğer modülde Declare Function biçimi başında "private" olmadan kullanıldıysa o zaman da yine ptrsafe deyimini declare komutundan hemen sonra kullanmalısınız. Bir örnek vereyim:

kodumuz şöyle olsun
Visual Basic Application Kod
Declare Function LoadCursorBynum Lib "user32" Alias "LoadCursorA" _ (ByVal hInstance As Long, ByVal lpCursorName As Long) As Long

Bu durumda ptrsafe nereye gelecek? Private declare'de hemen declare'den sonra kullanmıştık. Burada da aynı şekilde
Visual Basic Application Kod

#If VBA7 Then Declare PtrSafe Function LoadCursorBynum Lib "user32" Alias "LoadCursorA" _ (ByVal hInstance As Long, ByVal lpCursorName As Long) As Long #Else Declare Function LoadCursorBynum Lib "user32" Alias "LoadCursorA" _ (ByVal hInstance As Long, ByVal lpCursorName As Long) As Long #End If


Sonuçta her iki kullanımda da unutmamamanız gereken şey ptrsafe'yi declare sözcüğünden sonra kullanmak.
24/12/2013, 12:54

huramiral

merhaba
burada yazılanları yaptım ama malesef 64 bitte program sorunu bir türlü gideremedim belli bir seviye üstü kullanıcılar için bu olay belki çok kolay ama benim gibi olanlarda bunu yapma olasılığı biraz zor sanki
teşekkürler.
24/12/2013, 15:14

ozanakkaya

(24/12/2013, 12:54)huramiral yazdı: merhaba
burada yazılanları yaptım ama malesef 64 bitte program sorunu bir türlü gideremedim belli bir seviye üstü kullanıcılar için bu olay belki çok kolay ama benim gibi olanlarda bunu yapma olasılığı biraz zor sanki
teşekkürler.

Aldığınız hatayı belirtirseniz yardımcı olmaya çalışırız.
1 2