Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1
    Utente di HTML.it L'avatar di fu510n
    Registrato dal
    Sep 2005
    Messaggi
    137

    [VB.NET] Usare immagini PNG per la forma delle finestre (con alpha blending)

    Ciao a tutti. Ho girato parecchio per trovare una soluzione ma... tutte quelle proposte lasciano parecchio a desiderare.
    Si, è possibile creare finestre dalle forme più strane e con zone in trasparenza, nonchè ombre (gestite direttamente a livello di immagine PNG) ma... non mi viene mai visualizzato alcun controllo sulla form.

    Ho visto su CodeProject e su tanti altri siti e ho trovato soluzioni apparentemente differenti tra loro ma tutte utilizzano le stesse API e con tutte ho lo stesso problema.
    Il form rispecchia la forma della mia PNG ma... il disegno della PNG è come se "coprisse" il disegno dei controlli (niente pulsanti, etichette, caselle di testo... niente di niente).

    Qualcuno ha già provato uno di questi metodi e sa come risolvere?

    A me servirebbe solo per la splash screen e la About Box (per il resto non lo utilizzerei mai per non appesantire il programma).
    Fusion

    Currency Text Box (Updated: 16 Maggio 2008): http://digilander.libero.it/cmfusion/CurrencyTextBox.html

  2. #2
    Premetto che non ho mai dovuto fare quello che dici... però ricordo che una volta trovai un esempio sull'msdn che faceva (mi pare) l'override del paint della form e con l'oggetto graphics arrotondava uno spigolo della form. Sicuro che sia proprio necessario usare delle api?

  3. #3
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Mah...
    Ma di quali metodi parli?

    Se non mostri il codice che usi, per quale strana alchimia noi del forum dovremmo indovinare qual'è il problema e perchè?

    Ciao

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2007
    Messaggi
    134
    allora un metodo abbastanza veloce è questo...
    disegna la tua finestra con un programma di disegno qualsiasi.... supponiamo sia di forma ovale... ora l'immagine che salvi è pur sempre un rettangolo, per cui lo sfondo al di fuori dell'ovale fallo di un colore ben preciso, uno di quelli che sono selezionabili da Visual Studio quando imposti un qualsiasi colore. deve essere quella tonalità esatta però!

    la form che vuoi fare "strana" impostala senza bordi e metti come backgroundImage l'immagine che hai disegnato...
    imposta come TransparencyKey il colore "di sfondo" che hai inserito nell'immagine ed hai finito.

    non so se sn stato chiaro, in caso chiedi...

  5. #5
    Utente di HTML.it L'avatar di fu510n
    Registrato dal
    Sep 2005
    Messaggi
    137
    Ciao a tutti. Grazie per le risposte.

    Dunque. Il mio problema non è quello di disegnare una form con una forma particolare e basta... io vorrei evitare il fastidiosissimo effetto che si viene a creare nei bordi quando si usa il trasparencykey. Inoltre vorrei che l'ombra della finestra venisse mostrata in modo corretto quindi con il giusto grado di trasparenza rispetto a tutto quanto possa esserci sullo sfondo.

    Il codice che ho trovato su internet fa uso delle seguenti API:

    codice:
    	[DllImport("gdi32.dll", ExactSpelling = true, SetLastError = true)]
    	public static extern IntPtr CreateCompatibleDC(IntPtr hDC);
    
    	[DllImport("user32.dll", ExactSpelling = true, SetLastError = true)]
    	public static extern IntPtr GetDC(IntPtr hWnd);
    
    	[DllImport("gdi32.dll", ExactSpelling = true)]
    	public static extern IntPtr SelectObject(IntPtr hDC, IntPtr hObj);
    
    	[DllImport("user32.dll", ExactSpelling = true)]
    	public static extern int ReleaseDC(IntPtr hWnd, IntPtr hDC);
    
    	[DllImport("gdi32.dll", ExactSpelling = true, SetLastError = true)]
    	public static extern int DeleteDC(IntPtr hDC);
    
    	[DllImport("gdi32.dll", ExactSpelling = true, SetLastError = true)]
    	public static extern int DeleteObject(IntPtr hObj);
    
    	[DllImport("user32.dll", ExactSpelling = true, SetLastError = true)]
    	public static extern int UpdateLayeredWindow(IntPtr hwnd, IntPtr hdcDst, ref Point pptDst, ref Size psize, IntPtr hdcSrc, ref Point pptSrc, Int32 crKey, ref BLENDFUNCTION pblend, Int32 dwFlags);
    
    	[DllImport("gdi32.dll", ExactSpelling = true, SetLastError = true)]
    	public static extern IntPtr ExtCreateRegion(IntPtr lpXform, uint nCount, IntPtr rgnData);
    Non vi posto tutto il codice perchè è lunghetto. Al max vi rimando a link se necessario.


    Che ne pensate? Nessuno ha mai voluto abbellire la propria applicazione con una Splash e un AboutBox di forma particolare e con ombreggiatura?
    Fusion

    Currency Text Box (Updated: 16 Maggio 2008): http://digilander.libero.it/cmfusion/CurrencyTextBox.html

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2007
    Messaggi
    134
    di quale effetto fastidioso parli? forse il fatto ke viene un po' seghettato?
    mmm, parli di ombra poi... nn capisco..
    cmq, buon divertimento con le API :-/
    me ne tiro fuori :-P

  7. #7
    Utente di HTML.it L'avatar di fu510n
    Registrato dal
    Sep 2005
    Messaggi
    137
    Bravo bravo il mio ponzio pilato Te ne lavi le mani!!! E pure con il sapone per pelli delicate a PH neutro, profumo di pesche, effetto seta!


    Ecco un esempio di ciò che voglio:

    http://www.codeproject.com/KB/miscctrl/AlphaForm.aspx


    Però io ho provato ad utilizzare questa DLL ma non mi funza. Mi disegna lo sfondo e tutto quanto con le trasparenze corrette ma non disegna nemmeno un controllo (label, button, textbox, ecc)
    Fusion

    Currency Text Box (Updated: 16 Maggio 2008): http://digilander.libero.it/cmfusion/CurrencyTextBox.html

  8. #8

  9. #9
    Utente di HTML.it L'avatar di fu510n
    Registrato dal
    Sep 2005
    Messaggi
    137
    logicamente si. Però la domanda era: esiste un modo per ottenere lo stesso effetto senza l'utilizzo di API e insetti vari?
    Fusion

    Currency Text Box (Updated: 16 Maggio 2008): http://digilander.libero.it/cmfusion/CurrencyTextBox.html

  10. #10
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Originariamente inviato da fu510n
    logicamente si. Però la domanda era: esiste un modo per ottenere lo stesso effetto senza l'utilizzo di API e insetti vari?
    No.

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.