🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.bazy-danych.msaccess
15 messages
15 total messages Started by MaciejF Wed, 18 Nov 2015 08:41
Otwarcie accessa w małym oknie tylko z wymiarami formularza startowego
#137034
Author: MaciejF
Date: Wed, 18 Nov 2015 08:41
10 lines
1391 bytes
Witam,
niestety nie wiem jak
ustawić aplikację
na otwarcie w małym oknie tylko z wymiarami formularza startowego
na dodatek gdzieś z boku ekranu.

Muszę zrobić coś na kształt kalkulatora, który będzie
coś wyliczał dla innej aplikacji.

MF
Re: Otwarcie accessa w małym oknie tylko z wymiarami formularza startowego
#137035
Author: Maciej Tokarz
Date: Wed, 18 Nov 2015 10:04
3 lines
1439 bytes
Witaj,
Zerknij na takie tematy: https://www.google.pl/#q=ms+access+startup+position+move
M.
Re: Otwarcie accessa w małym oknie tylko z wymiarami formularza startowego
#137036
Author: MaciejF
Date: Wed, 18 Nov 2015 10:36
51 lines
2642 bytes
Wygooglałem coś takiego:
Option Compare Database
Option Explicit

Declare Function GetSystemMetrics32 Lib "user32" _
    Alias "GetSystemMetrics" (ByVal nIndex As Long) As Long

Declare Sub SetWindowPos Lib "user32" (ByVal hWnd&, _
ByVal hWndInsertAfter&, _
ByVal X&, ByVal Y&, ByVal cX&, _
ByVal cY&, ByVal wFlags&)

Global Const HWND_TOP = 0 'Moves MS Access window to top
'of Z-order.

'Values for wFlags.

Global Const SWP_NOZORDER = &H4 'Ignores the hWndInsertAfter.


Function SizeAccess(cX As Long, cY As Long, cWidth As Long, cHeight As Long)

Dim h As Long
'Get handle to Microsoft Access.
h = Application.hWndAccessApp

'Position Microsoft Access.
SetWindowPos h, HWND_TOP, cX, cY, cWidth, cHeight, SWP_NOZORDER
Application.RefreshDatabaseWindow
End Function

Function ScreenRL(cRight As Boolean)

'pick up the current monitor height and width
Dim w As Long, h As Long
    w = GetSystemMetrics32(0) ' width in points
    h = GetSystemMetrics32(1) ' height in points
    w = w / 2
    h = h - 30

'set the Access window Size using SizeAccess function
If cRight = True Then
    'position the access window to take up the Left half of the desktop
    SizeAccess w, 0, w, h
    Else
    'position the access window to take up the Left half of the desktop
    SizeAccess 0, 0, w, h
    End If


End Function
Re: Otwarcie accessa w małym oknie tylko z wymiarami formularza startowego
#137037
Author: Maciej Tokarz
Date: Wed, 18 Nov 2015 12:26
4 lines
1638 bytes
Chyba butów nie wiąże ten kod :)
Nawet OnTop masz...
Pozdrawiam,
M.
Re: Otwarcie accessa w małym oknie tylko z wymiarami formularza startowego
#137042
Author: Zbigniew Bratko
Date: Wed, 18 Nov 2015 13:38
29 lines
1851 bytes

Użytkownik "MaciejF"  napisał w wiadomości grup 
dyskusyjnych:d85542ad-65fa-49b1-a2ab-91ed8c36389b@googlegroups.com...

Witam,
niestety nie wiem jak
ustawić aplikację
na otwarcie w małym oknie tylko z wymiarami formularza startowego
na dodatek gdzieś z boku ekranu.

Muszę zrobić coś na kształt kalkulatora, który będzie
coś wyliczał dla innej aplikacji.

[...]

A co sądzisz o ustawieniu formularza startowego jako PopUp, lub Modal i 
wtedy ukrywasz okno Access'a.
Formularz pozostaje widoczny i przesuwasz go gdzie chcesz.
Odpada Ci zabawa oknem Accessa, ribbonem itp.

Jeżeli jesteś zainteresowany, to mogę się pobawić w tym temacie.
Dawno na grupie nie było nic o API  ;-)

-- 
Pozdrowienia
BraZby
www.faq.accdb.pl/
www.acc97.accdb.pl/
Re: Otwarcie accessa w małym oknie tylko z wymiarami formularza startowego
#137038
Author: MaciejF
Date: Wed, 18 Nov 2015 16:17
6 lines
1419 bytes
Witam
Zbigniew byłbym zainteresowany.
Może będzie od Ciebie coś zgrabniejszego...

/
MF
Re: Otwarcie accessa w małym oknie tylko z wymiarami formularza startowego
#137039
Author: 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/ 
Re: Otwarcie accessa w małym oknie tylko z wymiarami formularza startowego
#137040
Author: MaciejF
Date: Wed, 18 Nov 2015 21:19
3 lines
1457 bytes
Potrzebuję podpowiedzi jak odkryć menu Accessa gdyż teraz to ukryłem skutecznie wszystko łącznie z formularzem pop-up.

Help!
Re: Otwarcie accessa w małym oknie tylko z wymiarami formularza startowego
#137041
Author: Zbigniew Bratko
Date: Wed, 18 Nov 2015 21:42
26 lines
1766 bytes

Użytkownik "MaciejF"  napisał w wiadomości grup 
dyskusyjnych:28afdb4e-0351-499c-b81d-670bffd69f9c@googlegroups.com...

Potrzebuję podpowiedzi jak odkryć menu Accessa gdyż teraz to ukryłem 
skutecznie wszystko łącznie z formularzem pop-up.

Przechodząc do widoku projekt formularza pokazywane jest okno Accessa.
Jeżeli cały Access się schował, to pozostaje Ctrl+Alt+Del,  zabić proces MS 
Access
i ponownie uruchomić bazę.

W celach testowych zrób sobie przycisk:

Private Sub btnShowAcc_Click()
  Call ShowAccess
End Sub

będzie łatwiej.

-- 
Pozdrowienia
BraZby
www.faq.accdb.pl/
www.acc97.accdb.pl/ 
Re: Otwarcie accessa w małym oknie tylko z wymiarami formularza startowego
#137043
Author: MaciejF
Date: Thu, 19 Nov 2015 10:06
28 lines
2308 bytes

Poniższy fragment kodu jest podświetlany na czerwono.  


#VBA7
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
Re: Otwarcie accessa w małym oknie tylko z wymiarami formularza startowego
#137044
Author: MaciejF
Date: Fri, 20 Nov 2015 07:47
19 lines
1827 bytes
Witaj Zbigniew,
Niestety nie panuję nad Twoim kodem.
Wszystko się ukrywa w moim AC2003.
Niestety po uruchomieniu nie widzę okna PopUP z moim formularzem.
Oprócz tego fragment kodu:
#If VBA7
...
do
#Else
jest podświetlony na czerwono w edytorze VBA.
Po usunięciu tego fragmentu
i usunięciu bloku #IF END If aplikacja działa.
Niemniej ukrywa wszystko łącznie z formularzem startowym.

Czy można jeszcze coś poprawić w twoim kodzie?
Używam MS Access 2003.

Pozdrawiam
MF
Re: Otwarcie accessa w małym oknie tylko z wymiarami formularza startowego
#137045
Author: Zbigniew Bratko
Date: Fri, 20 Nov 2015 09:50
45 lines
2814 bytes
W dniu środa, 18 listopada 2015 09:41:54 UTC+1 użytkownik MaciejF napisał:
> Witam,
> niestety nie wiem jak
> ustawić aplikację
> na otwarcie w małym oknie tylko z wymiarami formularza startowego
> na dodatek gdzieś z boku ekranu.
> 
> Muszę zrobić coś na kształt kalkulatora, który będzie
> coś wyliczał dla innej aplikacji.

Nie odpowiadałem, ponieważ miałem i mam dalej problemy z Win 10, a właściwie pocztą w tym systemie.

Jeżeli chodzi o kod podświetlony kod na czerwono, to jedna część powinna pracować w  Accesie 32-bitowym, a druga w 64-bitowym. Kod na czerwono powinien być ignorowany przez aktualnie uruchomioną wersję Accessa.

Jeżeli chodzi o chowanie się wszystkiego, to u mnie też tak było w Access 2007


Private Sub Form_Load() 
  Me.TimerInterval = 300 
  ' niestety w Access 2007 nie za bardzo działa. Znika wszystko
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
  ' Call MovePopUpForm(2) 
End Sub 
i dlatego przeniosłem Call MovePopUpForm(2) do Timera formularza. 

Wydłuż czas Timera, lub w celach testowych zrezygnuj z procedury OnLoad formularza, na rzecz przycisków:

Private Sub btnMoveForm_Click() 
  Call MovePopUpForm(2)  
End Sub 

Private Sub btnShowAcc_Click() 
  Call ShowAccess 
End Sub 


i sprawdź, czy działa.

Tak z ciekawości pytam:
Czy kod nie działał przed usunięciem bloku "podświetlonego na czerwono"


--
Pozdrawiam
BraZby
Re: Otwarcie accessa w małym oknie tylko z wymiarami formularza startowego
#137046
Author: MaciejF
Date: Fri, 20 Nov 2015 11:35
13 lines
1770 bytes
Tak jest zgłaszany błąd w momencie, w którym jest dokonywana kompilacja.
Jak rozumiem w momencie otwarcia formularza.

Informacja brzmi jak dobrze pamiętam:
"Wystąpił błąd w module lub funkcji formularza" ...

Chyba tak to brzmiało.

Więc pousuwałem deklaracje tak jak napisałeś powyżej Accessa 64 Bitowego.
Błąd zniknął ale tak jak pisałem występują problemy z wywołaniem formularza.

Pozdrawiam
MF
Re: Otwarcie accessa w małym oknie tylko z wymiarami formularza startowego
#137047
Author: adsense
Date: Fri, 20 Nov 2015 20:29
20 lines
2484 bytes
W dniu piątek, 20 listopada 2015 12:35:06 UTC+1 użytkownik MaciejF napisał:
> Tak jest zgłaszany błąd w momencie, w którym jest dokonywana kompilacja.
> Jak rozumiem w momencie otwarcia formularza.
> 
> Informacja brzmi jak dobrze pamiętam:
> "Wystąpił błąd w module lub funkcji formularza" ...
> 
> Chyba tak to brzmiało.
> 
> Więc pousuwałem deklaracje tak jak napisałeś powyżej Accessa 64 Bitowego.
> Błąd zniknął ale tak jak pisałem występują problemy z wywołaniem formularza.

[...]

Powiem szczerze, masz bardzo dziwne problemy z uruchomieniem mojego kodu.
Udałem się na strych, wygrzebałem starego "laptoka" z Windows XP i Access 2000. Skopiowałem kod z mojego postu do formularza i uruchomiłem bazę. Wszystko jest OK. Kod się kompiluje (oczywiście wszystkie funkcje API deklarowane dla Office 64-bit z atrybutem  PtrSafe są podświetlone na czerwono) ale to nie ma znaczenie. Tak naprawdę Access (kompilator) nie wie co jest po instrukcji #If VBA7, ważne są dla niego deklaracje po #Else. (Dla kompilatora A2k stała kompilacji VBA7 jest FALSE, bo A2k nic o niej nie wie.)

-- 
Pozdrowienia
BraZby
Re: Otwarcie accessa w małym oknie tylko z wymiarami formularza startowego
#137048
Author: adsense
Date: Fri, 20 Nov 2015 21:00
15 lines
1931 bytes
W dniu piątek, 20 listopada 2015 21:29:58 UTC+1 użytkownik ads...@bratko.eu napisał:

[ciach]

Aby nie przedłużać tematu.
Pobierz bazę: 
http://www.accdb.pl/tmp/dbMoveSize2000.zip
i sprawdź, czy działa.

Być może, przez najbliższe kilka dni będę nieosiągalny. Do Win XP już nie wracam, ale stary, poczciwy Win 7 wart jest przeprosin. Jak dla mnie Win 10 64-bit jest prawie dobry, tylko nie wszystko działa, a zwłaszcza tzw. "Internet".  


> -- 
> Pozdrowienia
> BraZby
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads