Arkadaşlar bir raporun açık olup olmadığını runtime olarak kontrol edebiliyoruz. Ancak benim aradığım açık olan rapor tam ekran mı, normal mi, yoksa simge durumunda mı? bunu öğrenmek istiyorum. Yardımcı olacak arkadaşlarara teşekkür ederim.
Sayın mesudi
Sizin sorunuzla ilgili bulabildiğim tek kodu aşağıya ekliyorum. Bu kodda formun koordinatları veriliyor. Siz bunu rapora uyarlarsınız. Deneme şansım olmadı, inşallah çalışıyordur.
Formun boyutlarını veren kod:
Kod:
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Private Declare Function InflateRect Lib "user32" (lpRect As RECT, ByVal x As Long, ByVal y As Long) As Long
Private Sub Form_Load()
Dim R As RECT
'initialize the rectangle
R.Right = 100
R.Bottom = 200
R.Top = 20
R.Left = 30
'increase the width and height of the specified rectangle
InflateRect R, 60, 50
'show the result
MsgBox "New rectangle's co-ordinates: (" + CStr(R.Left) + "," + CStr(R.Top) + ")-(" + CStr(R.Right) + "," + CStr(R.Bottom) + ")."
End Sub
Mutlaka raporun tam ekran mı simge durumunda mı yoksa normal mi olduğunu veren bir api de mevcuttur ama sanırım bulamadım. Bir de ne işe yarayacağını söyleseniz belki başka öneriler gelebilir.
Bu arada raporun açık mı kapalı mı olduğunu veren kodlar eminim sizde mevcuttur, bizim online
Kod Bankasında da var. Ama yine de hazır bulmuşken yapıştırayım dedim
))
Kod:
If SysCmd(acSysCmdGetObjectState, acForm, "Form1") <> 0 Then
MsgBox "Form açık."
Else
MsgBox "Form kapalı."
End If
Örnek, Form1 adlı formun açık olup olmadığını araştırıyor. Raporlar için "acForm" deyimini "acReport" olarak değiştirmelisiniz.
ALTERNATİF YÖNTEM:
Kod:
If CurrentProject.AllForms("AFormu").IsLoaded = True Then
...
End If
If CurrentProject.AllForms("BFormu").IsLoaded = True Then
...
End If
ALTERNATİF 2:
Kod:
Kod:
Private Function isFormLoaded(strFormName As String)
isFormLoaded = SysCmd(SYSCMD_GETOBJECTSTATE, A_FORM, strFormName)
End Function
isimli fonksiyonu ekleyip, kodun çalışmasını istediğin olaya aşağıdakini yaz
Kod:
Const FRM_A = "FORM1"
Const FRM_B = "FORM2"
Dim strArgs As String
If isFormLoaded(FRM_A) Then
'Form1 açık ise yapılacak işlem.
End If
If isFormLoaded(FRM_B) Then
'Form2 açık ise yapılacak işlem.
End If
Hocam cevap için çok teşekkürler. Malesef işimi görmedi. Böyle bir şeye neden ihtiyacım olduğunu sormuşsunuz. Şöyleki; başlık çubuğu ve kenarlığı olmayan, yani herşeyi en baştan tasarladığım bir formum var. Bu formu kendi yaptığım üst menüden çalıştırıyorum. Ancak bu formu çalıştırınca öncesinde tam ekran boyutunda bir rapor açıksa bizim formda tam ekran boyutunda açılıyor. Buraya kadar sorun yok. Ancak bizim formu normalleştirmek veya kapatmak istediğim zaman uygulama kitlenip kalıyor. Bende çözüm olarak bu formun open olayına eğer bir rapor açıksa önce onu kapatan bir kod yazdım. Fakat takdir edersinizki çok makul bir çözüm değil. Bende bunun yerine tam ekran olan rapor varsa restore yapıp formu öyle açmayı düşündüm. Tabi diyeceksinizki bu formun raporlarla ne alıp veremediğini araştırsak daha iyi olmazmı. Ben çok araştırdım. Fırsat bulursam bir konu açıp bu anlaşamayan form-rapor
meselesini masaya yatıralım istiyecem.
Yayınladığım bir örnek vardı. O örnekte
Access penceresi gizleniyordu. Fakat eğer rapor çalışacaksa o zaman rapor tam ekran açılıyordu. Belki onu inceleseniz işinize yarar kodlar bulabilirsiniz. Tam hatırlamıyorum ama accessi gizleme 2 veya 3 olması lazım..
Teşekkürler hocam, sanırım ben bu arıza çıkaran formla biraz uğraşsam daha iyi olacak. Çünkü asıl problemin kaynağı o. Ama çok eskiden tasarladığım bir dünya kod olduğu için incelemekten korkmuştum. Mecbur gözden geçirecez.