Newsgroup: it.comp.lang.visual-basic
Titolo: creare form in basso a destra del monitor

vorrei visualizzare una form temporaneamente per poi nasconderla
ma vorrei visualizzarla nell'angolo in basso a destra a prescindere dalla 
risoluzione dell'utente
qualcuno sa aiutami?
grazie.



In Vb6 Screen.Width .Height ti danno la dimensione dello schermo (in twips
mi pare).
Qualcosa tipo:
    Me.Top = Screen.Height - Me.Height
    Me.Left = Screen.Width - Me.Width
Tieni presente che c'è l'eventuale barra Start di windows non tutti la
tengono standard. Io ad. esempio la utilizzo a due livelli, quindi circa
1cm di form non lo vedrei.

Nicolas73 wrote:

Ma dai ? il codice vecchio torna utile :)
avevo il tuo problema e ho usato il metodo suggerito da Andrea, ma
poi oltre al problema della dimensione dello schermo e della
tray bar c'e' anche il problema della sua posizione (es. se uno lo mette
a destra, o in alto come sui mac), si puo' usare l'OCX sysinfo per
determinare la posizione della barra, ma io sono allergico agli OCX
e mi ero fatto la routine con le API sviluppando uno stralcio trovato
sul web:
crea un form, mettici un bottone, incolla il codice nella form
Option Explicit
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Integer
Private Declare Function GetWindowRect Lib "user32" _
(ByVal hwnd As Long, lpRect As RECT) As Long
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type
Private Enum TrayPos
  Top
  Left
  Right
  Bottom
End Enum
Private Sub PosizionaBassoDx()
    Dim hWndTray As Integer, iTBHgt As Integer
    Dim hWndDesktop As Long
    Dim Rec As RECT
    Dim Desk As RECT
    Dim TrayBarPos As TrayPos
    hWndDesktop = GetDesktopWindow
    hWndTray = FindWindow("Shell_traywnd", "")
    GetWindowRect hWndTray, Rec
    GetWindowRect hWndDesktop, Desk
    If Rec.Top < 0 And Rec.Left < 0 Then
      If Rec.Right > Desk.Right Then
         TrayBarPos = Top
       Else
         TrayBarPos = Left
      End If
     End If
    If Rec.Top < 0 And Rec.Left > 0 Then TrayBarPos = Right
    If Rec.Top > 0 And Rec.Left < 0 Then TrayBarPos = Bottom
    Select Case TrayBarPos
      Case Top
        Me.Left = Screen.Width - Me.Width
        Me.Top = Screen.Height - Me.Height
      Case Left
        Me.Left = Screen.Width - Me.Width
        Me.Top = Screen.Height - Me.Height
      Case Right
        Me.Left = (Rec.Left * 15) - Me.Width
        Me.Top = Screen.Height - Me.Height
      Case Bottom
        Me.Left = Screen.Width - Me.Width
        Me.Top = (Rec.Top * 15) - Me.Height
    End Select
End Sub
Private Sub Command1_Click()
 PosizionaBassoDx
End Sub

Nicolas73 ha scritto:

vb6:
Type RECT
  Left As Long
  Top As Long
  Right As Long
  Bottom As Long
End Type
Const SPI_GETWORKAREA& = 48
Declare Function SystemParametersInfo Lib "user32" _
Alias "SystemParametersInfoA" (ByVal uAction As Long, _
ByVal uParam As Long, lpvParam As Any, _
ByVal fuWinIni As Long) As Long
Sub ChkScrDims()
     Dim RC As RECT
     Dim R As Long
     Dim MSG As String
     R = SystemParametersInfo(SPI_GETWORKAREA, 0&, RC, 0&)
     ScrMinX = RC.Left * Screen.TwipsPerPixelX
     ScrMaxX = RC.Right * Screen.TwipsPerPixelX
     ScrMinY = RC.Top * Screen.TwipsPerPixelY
     ScrMaxY = RC.Bottom * Screen.TwipsPerPixelY
End Sub
in questo modo dovresti ottenere l'area realmente utilizzabile. io di
solito tengo la barra a sinistra, a volte in alto, e ti cambierebbero x e
y.
hth, ciao, a.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 sul web:
mi sembra solo un po' complesso. quello che ho postato e' codice del 1999.
quest'anno l'avevo velocemente adattato a un prog che ora uso molto, piu'
o meno cosi':
Private Sub mnuWindPosBL_Click()
    ChkScrDims
    Left = ScrMinX
    Top = ScrMaxY - Height
End Sub
Private Sub mnuWindPosBR_Click()
    ChkScrDims
    Left = ScrMaxX - Width
    Top = ScrMaxY - Height
End Sub
Private Sub mnuWindPosCent_Click()
    ChkScrDims
    Left = (((ScrMaxX - ScrMinX) - Width)  2) + ScrMinX
    Top = (((ScrMaxY - ScrMinY) - Height)  2) + ScrMinY
End Sub
Private Sub mnuWindPosTL_Click()
    ChkScrDims
    Left = ScrMinX
    Top = ScrMinY
End Sub
Private Sub mnuWindPosTR_Click()
    ChkScrDims
    Left = ScrMaxX - Width
    Top = ScrMinY
End Sub
nel programma originario c'era un timer che ogni secondo calcolava l'area
utilizzabile e riposizionava il form.
ah, si', e' sul web:
http://www.sundaysw.com/sw/cod_palarm/index.html
fa schifino, ma considera che stavo imparando vb :)


 molto, piu' o meno cosi':
    Left = ScrMinX
    Top = ScrMaxY
[snip]
E queste due variabili come le ottenevi ?

 E queste due variabili come le ottenevi ?
con la chiamata abbastanza breve del mio primo post.


Grazie mille a tutti. 

 come determini posizione e dimensione della traybar ?
non fai prima a provare?
prendi il codice che ho postato, ci ragioni un attimo, crei un vbp in cui lo 
usi, poi magari segnali cosa non va.
ciao, a. 

andrea palazzi wrote:

Va' bene se mi limito a citarti ?


 1cm di form non lo vedrei."
no, non va bene.
prima di postare ieri, ho provato col programma in cui ora uso quelle 
chiamate. quando dal menu l'ho settato top left, si e' piazzato subito a 
destra della barra, che in quel momento era appunto a sinistra.
cosa che per esempio non fa excel 2000, che ogni volta che lo apro ha la 
parte sinistra della barra del titolo sotto la taskbar, perche' segna le 
coordinate alla chiusura ma poi quando si apre le usa in modo assoluto e non 
relativo.
quella breve chiamata api serve appunto a questo.
ripeto, se ti interessa, prendi il codice e usalo, poi eventualmente abbiamo 
qualcosa su cui discutere ancora. cosi' e' abbastanza inutile.
ciao, a.

 quella breve chiamata api serve appunto a questo.
vabbe'.. inutile continuare.

 1cm di form non lo vedrei."
Quello ero io, non <andrea palazzi> :)

 Quello ero io, non <andrea palazzi> :)
Ah ecco :)
Rimane allora solo da capire quale fosse la chiamata " nel suo primo post"
alla quale il palazzi faceva riferimento, di API non ne ha scritte, dice
che il mio metodo e' complicato ma del suo metodo quel poco postato
riferisce a non-meglio-precisati-controlli...
ma come ho gia' scritto, mi sa che nn vale la pena :D 

 qualche parte
Apporc.... da guggl grups lo vedo, dal caccoprovider al lavoro no.
demando scusa. 

> quella breve chiamata api serve appunto a questo.
Chiedo venia, il merdserver al lavoro non mi ha passato il tuo post
del 28 alle 17.15.
sorry :/

 sorry :/
nessun problema.
adesso hai tutti gli elementi per provare un vbp :)
ciao, a.