🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.bazy-danych.msaccess
Article #137039

Re: Otwarcie accessa w małym oknie tylko z wymiarami formularza startowego

#137039
From: Zbigniew Bratko
Date: Wed, 18 Nov 2015 19:11
194 lines
6920 bytes

Użytkownik "MaciejF"  napisał w wiadomości grup 
dyskusyjnych:0e2b6492-921d-45e6-af54-429a8bcbfb86@googlegroups.com...

Witam
Zbigniew byłbym zainteresowany.
Może będzie od Ciebie coś zgrabniejszego...

[...]

Sprawdź, czy poniższy przykład jest zgrabniejszy ;-)

Option Compare Database
Option Explicit

#If VBA7 Then
  Private Declare PtrSafe Function SystemParametersInfo Lib "user32" _
          Alias "SystemParametersInfoA" _
          (ByVal uAction As Long, _
          ByVal uParam As Long, _
          ByRef lpvParam As Any, _
          ByVal fuWinIni As Long) As Long

  Private Declare PtrSafe Function GetWindowRect Lib "user32" _
          (ByVal hwnd As LongPtr, _
          lpRect As RECT) As Long

  Private Declare PtrSafe Function SetWindowPos Lib "user32" _
          (ByVal hwnd As LongPtr, _
          ByVal hWndInsertAfter As LongPtr, _
          ByVal x As Long, _
          ByVal y As Long, _
          ByVal cx As Long, _
          ByVal cy As Long, _
          ByVal wFlags As Long) As Long

  Private Declare PtrSafe Function GetParent Lib "user32" _
          (ByVal hwnd As LongPtr) As LongPtr
#Else
    Private Declare Function SystemParametersInfo Lib "user32" _
          Alias "SystemParametersInfoA" _
          (ByVal uAction As Long, _
          ByVal uParam As Long, _
          ByRef lpvParam As Any, _
          ByVal fuWinIni As Long) As Long

  Private Declare Function GetWindowRect Lib "user32" _
          (ByVal hwnd As Long, _
          lpRect As RECT) As Long

  Private Declare Function SetWindowPos Lib "user32" _
          (ByVal hwnd As Long, _
          ByVal hWndInsertAfter As Long, _
          ByVal x As Long, _
          ByVal y As Long, _
          ByVal cx As Long, _
          ByVal cy As Long, _
          ByVal wFlags As Long) As Long
#End If

Private Type RECT
        Left As Long
        Top As Long
        Right As Long
        Bottom As Long
End Type

Private Type POINTAPI
        x As Long
        y As Long
End Type

' SystemParametersInfo
Private Const SPI_GETWORKAREA = 48
' SetWindowPos
Private Const HWND_TOP = 0
Private Const SWP_NOSIZE = &H1
Private Const SWP_NOZORDER = &H4
Private Const SWP_NOMOVE = &H2
Private Const SWP_SHOWWINDOW = &H40
Private Const SWP_HIDEWINDOW = &H80

' Chowa okno MS Access i ustawia formularz typu PopUp (podręczny)
' w narożnikach dostępnego obszaru pulpitu lub centralnie.
' lPos - dla wartości od 1 do 4 ustawia formularz kolejno w narożniku:
' 1 - lewy górny, 2 - prawy górny, 3 - prawy dolny, 4 - lewy dolny,
' dla innych wartości centruje formularz
'______________________________________
Private Sub MovePopUpForm(lPos As Long)

#If VBA7 Then
  Dim hWind   As LongPtr
#Else
  Dim hWind   As Long
#End If

Dim lRet      As Long
Dim x         As Long
Dim y         As Long
Dim rctFrm    As RECT
Dim rctScreen As RECT

  If Me.PopUp = False Then
    MsgBox "Niestety, przykład dotyczy formularza PopUp !" & vbNewLine & _
           "Na stronie: www.faq.accdb.pl/11a_VbaWinFrmFaq.htm#vba11a_05" & 
vbNewLine & _
           "znajduje się przykład:" & vbNewLine & vbNewLine & _
           "Jak ustawić formularz w/m wolnej dostępnej przestrzeni w oknie 
Accessa"
    Exit Sub
  End If

  ' ukryj okno MS Access nie zmieniając jego rozmiaru i położenia
  lRet = SetWindowPos( _
                Application.hWndAccessApp, _
                0&, 0&, 0&, 0&, 0&, _
                SWP_NOZORDER Or SWP_NOSIZE Or _
                SWP_NOMOVE Or SWP_HIDEWINDOW)

  ' pobierz dostępny obszar pulpitu
  lRet = SystemParametersInfo(SPI_GETWORKAREA, vbNull, rctScreen, 0&)

  ' pobierz rozmiar i położenie okna formularza
  lRet = GetWindowRect(Me.hwnd, rctFrm)

    Select Case lPos
      Case 1  'lewy górny róg
          x = rctScreen.Left
          y = rctScreen.Top
      Case 2  ' prawy górny róg
          x = (rctScreen.Right - rctScreen.Left) - (rctFrm.Right - 
rctFrm.Left)
          y = rctScreen.Top
      Case 3  'prawy dolny róg
          x = (rctScreen.Right - rctScreen.Left) - (rctFrm.Right - 
rctFrm.Left)
          y = (rctScreen.Bottom - rctScreen.Top) - (rctFrm.Bottom - 
rctFrm.Top)
      Case 4   ' lewy dolny róg
          x = rctScreen.Left
          y = rctScreen.Bottom - (rctFrm.Bottom - rctFrm.Top)
      Case Else ' centralnie
          x = (rctScreen.Right - rctScreen.Left) / 2 - (rctFrm.Right - 
rctFrm.Left) / 2
          y = (rctScreen.Bottom - rctScreen.Top) / 2 - (rctFrm.Bottom - 
rctFrm.Top) / 2
    End Select

    ' przesuń formularz
    lRet = SetWindowPos(Me.hwnd, HWND_TOP, x, y, 0&, 0&, SWP_NOSIZE)

End Sub

'_____________________
Private Sub ShowAccess()
    ' odkryj okno MS Access w poprzednim miejscu i rozmiarze
    SetWindowPos Application.hWndAccessApp, _
                HWND_TOP, _
                0&, 0&, 0&, 0&, _
                SWP_NOZORDER Or SWP_NOSIZE Or _
                SWP_NOMOVE Or SWP_SHOWWINDOW

End Sub

'____________________
Private Sub Form_Load()
  Me.TimerInterval = 300
  ' niestety w Access 2007 nie za bardzo działa. Znika wszystko
  ' Call MovePopUpForm(2)
End Sub

'_____________________
Private Sub Form_Timer()
  Me.TimerInterval = 0
  Call MovePopUpForm(2)
End Sub

'______________________________________
Private Sub Form_Unload(Cancel As Integer)
  Call ShowAccess
End Sub

Formularz musi mieć ustawioną właściwość  "Podręczny" = TRUE (PopUp),
ale nic nie stoi na przeszkodzie by mu dołożyć właściwość Modal.
Będzie wtedy zawsze na wierzchu.

U mnie działa na Win 7 64bit i Acc2010-64bit  oraz  Acc2007-32bit.

-- 
Pozdrowienia
BraZby
www.faq.accdb.pl/
www.acc97.accdb.pl/ 
Technical Details
Message-ID: <n2iii0$qt2$1@node1.news.atman.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!.POSTED!not-for-mail
References: <d85542ad-65fa-49b1-a2ab-91ed8c36389b@googlegroups.com> <0e2b6492-921d-45e6-af54-429a8bcbfb86@googlegroups.com>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!.POSTED!not-for-mail
From: "Zbigniew Bratko" <admin@ToNieTo.pl>
Newsgroups: pl.comp.bazy-danych.msaccess
Subject: Re: Otwarcie accessa w małym oknie tylko z
 wymiarami formularza startowego
Date: Wed, 18 Nov 2015 20:11:53 +0100
Organization: ATMAN - ATM S.A.
Lines: 195
Message-ID: <n2iii0$qt2$1@node1.news.atman.pl>
References: <d85542ad-65fa-49b1-a2ab-91ed8c36389b@googlegroups.com> <0e2b6492-921d-45e6-af54-429a8bcbfb86@googlegroups.com>
NNTP-Posting-Host: 5.172.234.159
Mime-Version: 1.0
X-Trace: node1.news.atman.pl 1447873920 27554 5.172.234.159 (18 Nov 2015 19:12:00 GMT)
X-Complaints-To: usenet@atman.pl
NNTP-Posting-Date: Wed, 18 Nov 2015 19:12:00 +0000 (UTC)
In-Reply-To: <0e2b6492-921d-45e6-af54-429a8bcbfb86@googlegroups.com>
X-Priority: 3
X-MSMail-Priority: Normal
Importance: Normal
X-Newsreader: Microsoft Windows Live Mail 15.4.3555.308
X-MimeOLE: Produced By Microsoft MimeOLE V15.4.3555.308
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit