Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
Immagini di sfondo su form in vs 2008 crea problemi
venerdì 04 dicembre 2009 - 09.41
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
basicdany
Profilo
| Expert
590
messaggi | Data Invio:
ven 4 dic 2009 - 09:41
Scusate se ho rimesso lo stesso thread, come spiegavo caricando un immagine come sfondo a un form, rallenta il caricamento della form, qualcuno puoi darmi una mano?
grazie a tutti
freeteo
Profilo
| Guru
6.542
messaggi | Data Invio:
ven 4 dic 2009 - 09:46
Ciao,
che il caricamento sia lento è inevitabile, deve disegnare tutti i vari pixel dell'immagine.
Poi che sia "troppo" lento probabilmente lo si deve ad un problema di qualità dell'immagine, che formato hai? Quanto occupa l'immagine sul disco?
Ciao.
Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo
basicdany
Profilo
| Expert
590
messaggi | Data Invio:
ven 4 dic 2009 - 10:39
ciao, gentilissimo, allora carico l'immagine dalla proprieta del form (bakgroudimage),lo sfondo che carico e di solo 1k con estensione jpg.
utilizzo vs 2008, vb.
grazie un utente mi ha postato un esempio in c ma non riesco a tradurlo e inserirlo:
http://www.bloginformatico.net/2009/03/12/diminuire-leffetto-flickering-aumentando-le-prestazioni-in-gdi/
Luigi Di Biasi
aspetto risposta ciao grazie tanto
freeteo
Profilo
| Guru
6.542
messaggi | Data Invio:
ven 4 dic 2009 - 11:02
Ciao,
in quell'esempio ti basta sostituire alla parola "this" la parola "Me" che in vb vuol dire la classe che sono io.
Per l'evento invece è l'evento Paint, ti basta andare negli eventi della form (da designer aperto) e nella voce eventi (il fulmine arancione) fare doppio click in concomitanza con l'evento paint.
Dentro ci scrivi il codice tradotto con questo traduttore:
http://www.carlosag.net/Tools/CodeTranslator/
Ciao.
Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo
basicdany
Profilo
| Expert
590
messaggi | Data Invio:
ven 4 dic 2009 - 14:03
ho inserito nel form load:
Me.InitializeComponent()
Me.SetStyle(ControlStyles.UserPaint, True)
Me.SetStyle(ControlStyles.AllPaintingInWmPaint, True)
Me.SetStyle(ControlStyles.DoubleBuffer, True)
Me.SetStyle(ControlStyles.ResizeRedraw, True)
Me.SetStyle(ControlStyles.OptimizedDoubleBuffer, True)
Me.UpdateStyles()
'carica immagini nelle form
Me.BackgroundImage = New Bitmap(Application.StartupPath & "\Sfondo.jpg")
nell'evento paint
If True Then
Dim buffer As New Bitmap(Me.Width, Me.Height)
Using graphics As Graphics = graphics.FromImage(buffer)
End Using
e.Graphics.Clear(Me.BackColor)
e.Graphics.DrawImage(buffer, 0, 0, buffer.Width, buffer.Height)
End If
non funziona non carica l'immagine, è lento nel caricare il form
perche??
ciao
freeteo
Profilo
| Guru
6.542
messaggi | Data Invio:
ven 4 dic 2009 - 15:53
Allega un esempio che indaghiamo sul codice.
ps: meglio se metti anche l'immagine come file singolo così provo a fare qualche conversione di formato...
Ciao.
Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo
basicdany
Profilo
| Expert
590
messaggi | Data Invio:
ven 4 dic 2009 - 20:06
1217_Sfondo.zip
Ti passo l'immagine per il codice non e altro che questo metodo:
nel form load di qualsiasi form:
Me.InitializeComponent()
Me.SetStyle(ControlStyles.UserPaint, True)
Me.SetStyle(ControlStyles.AllPaintingInWmPaint, True)
Me.SetStyle(ControlStyles.DoubleBuffer, True)
Me.SetStyle(ControlStyles.ResizeRedraw, True)
Me.SetStyle(ControlStyles.OptimizedDoubleBuffer, True)
Me.UpdateStyles()
Me.BackgroundImage = New Bitmap(Application.StartupPath & "\Sfondo.jpg")
evento paint di qualsiasi form
If True Then
Dim buffer As New Bitmap(Me.Width, Me.Height)
Using graphics As Graphics = graphics.FromImage(buffer)
End Using
e.Graphics.Clear(Me.BackColor)
e.Graphics.DrawImage(buffer, 0, 0, buffer.Width, buffer.Height)
End If
grazie aspetto risposta
freeteo
Profilo
| Guru
6.542
messaggi | Data Invio:
ven 4 dic 2009 - 21:38
Ciao,
perchè non lo usi come risorsa del progetto invece di caricarlo ogni volta dal disco?
Io se lo imposto da designer della form (che automaticamente poi lo aggiunge alle risorse del progetto) non vedo questa lentezza.
Il file effettivamente è piccolo, non può essere così lento come dici...dovrebbe essere appena percettibile.
Prova a fare così e vedi se è lento...se ancora è lento potrebbe essere un problema della tua macchina, hai provato in qualche altro pc? magari è un problema di Directx o cose di questo genere legate alla scheda video...
Ciao.
Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo
basicdany
Profilo
| Expert
590
messaggi | Data Invio:
sab 5 dic 2009 - 07:22
ok gentilmente mi dici come fare questa operazione:
perchè non lo usi come risorsa del progetto invece di caricarlo ogni volta dal disco?
Io se lo imposto da designer della form (che automaticamente poi lo aggiunge alle risorse del progetto) non vedo questa lentezza
ciao grazie
freeteo
Profilo
| Guru
6.542
messaggi | Data Invio:
sab 5 dic 2009 - 15:36
>ok gentilmente mi dici come fare questa operazione:
allora apri la form dentro a visual studio, vai nella finestra delle sue proprietà (equivalente del pulsante F4) e vai nella proprietà "BackgroundImage".
La selezioni, premi il pulsantino ".." vicino al valore di questa, ti si apre una maschera, scegli "Project Resource File", e poi premi "import" e aggiungi il file immagine al tuo progetto.
Se non cambia spesso il file, ti conviene fare così, in modo che poi sia già caricato in memoria con il progetto stesso (in quanto viene poi agganciato dentro) e quindi visualizzato sfruttando la cache tra le varie aperture della form.
Ciao.
Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo
basicdany
Profilo
| Expert
590
messaggi | Data Invio:
sab 5 dic 2009 - 16:15
1218_ProveSfondo.zip
ciao,la tua soluzione e buona ma il problema è nella quantita di controlli che si caricano nel form, ti allego un progetto dove vedrai l'effetto ottico e la differenza tra un form con dei controlli e uno senza controlli
e incredibile!!!! vedi ilprogetto che ti ho allegato
non so che fare comunque, se hai qualche idea al merito
ciao e grazie tanto.
basicdany
Profilo
| Expert
590
messaggi | Data Invio:
lun 7 dic 2009 - 14:03
ciao, t ho inviato un email con progetto di esempio, puoi aiutarmi?
freeteo
Profilo
| Guru
6.542
messaggi | Data Invio:
mar 8 dic 2009 - 22:26
Ciao,
effettivamente il problema è che hai usato troppi controlli, tutti su una stessa maschera.
Puoi tentare di migliorare qualcosa togliendo i groupbox e usando al loro posto dei panel che hanno meno pesantezza, ma siamo veramente alle briciole...il problema sta nell'elevato numero di controlli (150 circa) dentro un'unica maschera, sinceramente mi sembra che siano troppi.
Chiaramente i valori e quei controlli ti servono, non intendo che devi usarne meno, ma intendo che dovresti usare una tecnica diversa, ossia dei tab che ti raggruppino alcune tipologie di controlli, se vuoi migliorare.
Io ti suggerisco di usare cominciare usando un tabControl, usare una tab per ogni groupbox (quindi 3 tab) anche perchè ne guadagni di layout, ossia puoi ad esempio mettere i controlli anche uno sotto all'altro perchè ogni tab ha tutto lo spazio della form a disposizione...
Purtroppo però non c'è il background transparent nella tabcontrol normale, dovresti usare qualche trucchetto come questo:
http://homepage.ntlworld.com/mdaudi100/alternate/tabcontrols.html
ma io mi concentrerei sul dare un'interfaccia migliore ed un tempo di caricamento decente piuttosto che sul colore di sfondo...
Ciao.
Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !