Newsgroup: it.comp.appl.access
Titolo: Posizionamento di una maschera

In Access 2000 il DoCmd.MoveSize permette di modificare la posizione di
una maschera aperta.
C'è modo, se si sposta la maschera, di rilevarne la nuova posizione
per registrare i dati da qualche parte? In questo modo potrei farla
aprire, la volta successiva, nella posizione scelta dall'utente.
Grazie e ciao.
Riccardo Baldinotti

Riccardo Baldinotti ha scritto:

Direi che invece che rilevare l'Evento Move della Maschera che non
esiste
in modo nativo potresti effettuare il controllo su Evento Unload o
Close.
Recuperi la posizione e la puoi salvare in una voce di registro con
SaveSetting
e recuperarla con GetSetting.
Ciao
@Alex

Riccardo Baldinotti ha scritto:

non c'è un modo, che io sappia, per sapere quando si sposta una
maschera in Access (in effetti non esiste un evento relativo allo
spostamento del form ma solo al ridimensionamento). Potresti però
salvare le proprietà WindowLeft e WindowTop del form sull'evento
close.
ciao

wlady ha scritto:

Si può fare solo SubClassando la Form ed intercettando il messaggio
WM_MOVE.
Trovi un demo quì:
http://www.alessandrobaraldi.it/DettaglioFaq.asp?IdFAQ=40
Ciao
@Alex

 ciao
Ho cercato le proprietà WindowLeft e WindowTop  ma non le ho trovate.
Se batto "Me." l'autocomposizione mi suggerisce di tutto ma non quello;
scrivendo "WindowLeft" e premendo F1 ottengo "Impossibile trovare la
parola chiave".
Ci sono le proprietà WindowHeight e WindiwWidth, che però non mi
servono.
Ho provato a fare finta di niente e scrivere un'istruzione ma ho
ottenuto un errore.
Ciao
Riccardo

 @Alex
Purtroppo non ho io, e non li hanno i colleghi, privilegi per
modificare il registro di Windows.
Ciao
Riccardo

 Riccardo
QUal'è il problema, salva in un File INI....!
Ciao
@Alex

 Riccardo
@Alex

Alessandro Baraldi ha scritto:

a mio giudizio non dovrebbero esserci problemi nell'utilizzo del
comando savesetting. Le protezioni impostate sulle chiavi di registro
utilizzate da Access per i propri DB consentono all'utente del pc la
scrittura.
ciao

 ciao
Confermo quanto dici, ho fatto un test su una macchina in cui l'Utente
non è Admin, e funziona.
Tra le altre cose nell'Help c'è l'esempio di come si salòvano le
Coordinate...
e di come si recuperano...!
@Alex

 >
Sarà il caldo...
Ho provato a vedere il collegamento
http://www.alessandrobaraldi.it/DettaglioFaq.asp?IdFAQ=40
ma ho avuto questo errore
---
Microsoft JET Database Engine error '80004005'
Operation must use an updateable query.
/index.asp, line 24
---
Cosi se cerco di entrare in qualche voce del sito.
Ho provato a guardare l'esempio di SaveSetting.
Nel mio caso, poiché l'applicazione si chiama Ora2.mdb, la maschera si
chiama Maschera1, scriverei
SaveSetting appname := "Ora2.mdb", section := "Maschera1", _
            key := "Top", setting := 75
ma il problema è proprio quel 75. Cioè: io, alla chiusura della
maschera, non conosco le sue coordinate, altrimenti mi basterebbe
scriverle in una casella di testo prima di salvare la maschera e con un
MoveSize recuperarle all'apertura successiva.
Già che ci siamo. Dove trovo un elenco dei possibili "Key"?
"Calorosi" saluti
Riccardo Baldinotti

 Riccardo Baldinotti
Ciao
@Alex

 non le trovi...!
Giurin giuretta, non ci sono WindowTop e WindowLeft. Non è che mi
serve qualche riferimento? Però vedo WindowWidth e WindowHeight. O è
A2000 sprovvisto?
Saluti umidi (il primo che dice "meno male che piove" me lo mangio)
Riccardo

 Riccardo
@Alex

[CUT]
Ho una piccola applicazione che apre una sola maschera, in modalità
PopUp con la funzione di DonKarl "1.11 Nascondere la finestra
principale di Access".
Alla chiusura della maschera uso la funzione GETWINDOWRECT così
    Call GetWindowRect(Me.hWnd, pos)
    DoCmd.OpenForm "maschera1", acDesign
    Forms!maschera1!Testo63.DefaultValue = pos.Top
    Forms!maschera1!Testo64.DefaultValue = pos.Left
per avere i valori pos.Left e pos.Top. Questi mi servono perché li
salvo in due caselle di testo della maschera. Alla successiva apertura,
uso la funzione
    Call MoveWindow(Me.hWnd, Testo64, Testo63, 150, 132, False)
per posizionarla dove l'avevo lasciata l'ultima volta.
Ora i problemi.
Come si vede, la MoveWindow usa le due caselle di testo, mentre le
dimensioni della maschera (150, 132) sono forzate.
Avevo infatti provato il codice trovato in
http://www.alessandrobaraldi.it/DettaglioFaq.asp?IdFAQ=103
http://www.alessandrobaraldi.it/DettaglioFaq.asp?IdFAQ=36
come suggeritomi (perché Alessandro Baraldi è una miniera!).
Riporto:
' Recupera l'Handle della Finestra MDI.
    hWndParent = GetParent(Me.hWnd)
' Se la Form non è MDI allora hwndParent<>0 e coinciderà con l'Handle
' dell'applicazione, altrimenti la Form è Popup.
    If hWndParent <> Application.hWndAccessApp Then
        Call GetWindowRect(hWndParent, pas)
    Else
' Essendo POPUP recupera le coordinate del desktop.
        Call GetWindowRect(GetDesktopWindow(), pas)
    End If
' Calcola width/height della Parent (indifferentemente che sia Access
MDI,
' oppure lo schermo(se Popup).
    intParentWidth = pas.Right - pas.Left
    intParentHeight = pas.Bottom - pas.Top
§§§
    MsgBox "left=" & pas.Left & "; right=" & pas.Right & "; top=" &
pas.Top & "; bottom=" & pas.Bottom
§§§
    Call GetWindowRect(Me.hWnd, pos)
***
    MsgBox "left=" & pos.Left & "; right=" & pos.Right & "; top=" &
pos.Top & "; bottom=" & pos.Bottom
***
    Call MoveWindow(Me.hWnd, _
        Testo64, _
        Testo63, _
        intParentWidth - pos.Left - pos.Right, _
        intParentHeight - pos.Top - pos.Bottom, _
        False)
'    Call MoveWindow(Me.hWnd, Testo64, Testo63, 150, 132, False)
ebbene, dopo avere spostato la maschera più o meno a tre quarti in
basso a destra, l'istruzione segnata con (***) mi dà i seguenti
valori:
left=545; right=705; top=478; bottom=619
il che, con uno schermo di 1024 x 768, risulta errato, e infatti la
maschera non compare nemmeno, benché il TaskManager dica che il
processo è attivo.
Dopo avere ripristinato la MoveWindow "taroccata" ho riaperto
l'applicazione, spostato la maschera in alto a sinistra, riaperto con
l'altra Call e i valori erano:
left=142; right=302; top=108; bottom=249
Con questi risultati la maschera risulta mooolto più larga.
È a questo punto che ho inserito l'istruzione segnata con (§§§)
dalla quale ottengo i valori
left=0; right=1024; top=0; bottom=768
come è giusto che sia.
Sembra perciò che i top, left, ecc della funzione GetWindowRect non
facciano riferimento alla dimensione dello schermo, ma a chissà che
altro.
A questo punto avrei anche un altro ohibò ma preferisco fermarmi a
questo, scusandomi anche per la lunga esposizione.
La domanda: dove sbaglio i calcoli?
Grazie per la pazienza.
Riccardo Baldinotti

Riccardo Baldinotti ha scritto:

Prima di imbattermi nel leggere tutto e capire il tuo errore di
concetto prova avedere
questo:
http://www.alessandrobaraldi.it/DettaglioFaq.asp?IdFAQ=232
con il Demo allegato.
Personalmente invece di usare 2 TextBox avrei usato il Registro di WIN
con i metodi
SaveSetting e GetSetting.
@Alex

 @Alex
Ciao e grazie.
Riccardo Baldinotti

Riccardo Baldinotti ha scritto:

Mandami una mail, ti invio un Demo proprio sul salvataggio della
posizione
già fatto per A2000, poi vedi tu.
i k 2 z o k @ l i b e r o . i t
@Alex