Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    56

    [Vb.Net] Skin personalizzata in una form

    Ciao a tutti, ho un problema nel mettere una skin personalizzata ad una form. Ho provato programmi come IrisSkin o OpenThemes ma non sono riuscito a fare ciò che volevo:
    Non voglio solo modificare bottoni o altri elementi grafici ma modificare completamente la forma del "form".
    Mi spiego meglio: le form normali sono rettangolari, o quadrate, con i bordi arrotondati, io però vorrei che prendesse una forma strana, come, per esempio, quella di un triangolo. E' possibile? Se si come?

  2. #2
    Per fare ciò che chiedi, in un'applicazione WindowsForms, di solito, si lavora impostando la proprietà TransparencyKey con il valore del backColor del Form ed inserendo un'immagine,all'interno del Form, con un BackColor differente.
    L'effetto, sarebbe la sparizione del Form e, di conseguenza la sola visualizzazione dell'immagine(ma questo porta a delle conseguenze che capirai in seguito ).

    Ma sei sei orientato ad applicazione con una grafica particolarmente accattivante, forse sarebbe meglio se ti orientassi ad una applicazione WPF.

    Facci sapere...
    Ciao

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    56
    Ti ringrazio per la risposta ma non va. In pratica il BackColor è impostato su "Control" e io imposto anche la TrasparencyKey su "Control" e imposto una immagine di sfondo ma vedo sempre il form con i bordi predefiniti e come sfondo l'immagine.

  4. #4
    Scusa .... dimentico sempre di specificare che va impostata anche la proprietà KeyPreview=True.

    Facci sapere...
    Ciao

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    56
    Il problema persiste ( si vedono ancora i bordi, che sono quelli che vorrei modificare ), ecco un esempio di come mi viene:



    Sarà colpa dell'immagine? Perchè in ogni caso i file png non li prende quindi non saprei come fare...

  6. #6
    codice:
            Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None
            Me.KeyPreview = True
            Me.TransparencyKey = System.Drawing.SystemColors.Control
    Questo è tutto quello che puoi fare con WindowsForms .... ovviamente, i bordi li devi re-disegnare tu a tuo piacimento.

    Per qualcosa di più particolare .... devi passare a WPF(tutto un'altro mondo dal punto di vista grafico)

    Facci spaere...
    Ciao

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    56
    Si così funziona, ti ringrazio. Ora faccio qualche altro tentativo con delle immagini!

    Comunque si ho dato una occhiata al Wpf e ho visto che si può fare di tutto e di più ma non so bene come funziona... magari più in la provo a metterci mano.

    Grazie di nuovo

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    56
    Scusate ancora per il disturbo ma vorrei chiedere ora: il form va benissimo e se metto una png si vede perfettamente l'immagine e togliendo i bordi è tutto come avevo richiesto ma ora c'è un problema:
    Come farebbe l'utente a spostare il form? Vorrei che se ci clicca sopra e tiene premuto spostando il mouse si sposta anche la form.. è possibile? O devo trovare qualche altro modo?

  9. #9
    (ma questo porta a delle conseguenze che capirai in seguito ).


    Potresti intercettare l'evento MouseDown della PictureBox e spostare il Form(trasparente) seguendo il Mouse.
    Oppure, se non ricordo male, dovrebbe esserci un API che ti permette di forzare la posizione del click del mouse sui bordi del Form(anche se non ci sono) ... prova a fare una ricerca con Google .... eventualmente, facci sapere...
    Ciao

  10. #10
    L'ho trovata .... non è un API, ma semplicemnte l'overrides di WndProc

    codice:
    codice:Public Class Form1
    
        Const WM_NCHITTEST As Long = &H84
        Const HTCAPTION As Long = 2
        Const HTCLIENT As Long = 1
    
    
        Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
            MyBase.WndProc(m)
            Select Case m.Msg
                Case WM_NCHITTEST
                    If m.Result.ToInt32 = HTCLIENT Then
                        m.Result = New IntPtr(HTCAPTION)
                    End If
            End Select
        End Sub
    
        Private Sub btnChiudi_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnChiudi.Click
            Me.Close()
        End Sub
    End Class
    Facci sapere...
    Ciao

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.