Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di ghini76
    Registrato dal
    Jun 2003
    Messaggi
    560

    [VB.NET] Il color.transparent è trasparente per modo di dire?!!

    Ciao a tutti,
    volevo posizionare una label sopra ad un controllo picture che visualizza un'immagine JPG in modo che il testo della label potesse cambiare senza cambiare ogni volta l'immagine.
    Ho impostato il label1.backcolor=color.transparent ma questa istruzione a quanto mi sembra non fa altro che impostare lo sfondo del controllo come il colore del form... quando la posiziono sull'immagine c'è sempre il suo riquadro del colore del form.

    Come posso fare per visualizzare questi testi dinamici sulla mia JPG?

    Grazie

  2. #2
    La proprietà BackColor non supporta i colori trasparenti a meno che il bit di stile di ControlStyles.SupportsTransparentBackColor non sia impostato su true.
    Quindi l'unica è creare una classe che erediti da System.Windows.Forms.Label e che imposti il bit in questione.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it L'avatar di ghini76
    Registrato dal
    Jun 2003
    Messaggi
    560
    Grazie...

    io intanto ho risolto sovrapponendo un form senza cornice, dando al backcolor del form il colore 'Bianco' e poi impostando la proprietà TransparencyKey su 'Bianco'. In questo modo tutto quello che è bianco sul form diventa trasparente. Il risultato è quello che volevo. Lievemente più complicato da gestire ma più che altro è il testo che non viene di ottima qualità in quanto si vede il contorno bianco come se fosse scontornato a mano...

    Provo a cercare qualcosa sul sistema che mi hai consigliato te... non è che hai un esempio?

    grazie ancora

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2003
    Messaggi
    7
    Ciao, tempo fa ebbi a cimentarmi con lo stesso problema. La soluzione di MItaly è sicuramente la migliore però potresti considerare un'altro approccio: invece di usare una label, recuperi l'oggetto Graphics della picturebox e usi quello per "disegnare il testo".

    Mi spiego meglio. Supponiamo che tu voglia che quando premi il button1 all'immagine venga "sovraimpressa" una scritta:

    codice:
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
         Dim g As Graphics = Me.PictureBox1.CreateGraphics
         g.DrawString("CIAO", New Font("Arial", 30, FontStyle.Bold), Brushes.Black, 30, 30)
    End Sub
    Volendo poi si può far tornare in scena la label, basta usare la DrawString quando viene gestito l'evento paint della picturebox e prelevare i parametri da una label:

    codice:
    Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
            e.Graphics.DrawString(Me.Label1.Text, Me.Label1.Font, New SolidBrush(Me.Label1.ForeColor), Me.Label1.Left, Me.Label1.Top)
    End Sub
    In questo modo testo, font, colori, e posizione vengono letti direttamente dalla label1. Quindi puoi modificare direttamente la label (ovviamente il suo backcolor non ha più nessuna importanza) basta che ti ricordi di impostare la sua proprietà visible su false.

    Ciao

  5. #5
    Utente di HTML.it L'avatar di ghini76
    Registrato dal
    Jun 2003
    Messaggi
    560
    Grazie VB80 il tuo approccio è simile a qualcosa che stavo pensando proprio ieri sera. Mi ero buttato sulla label perchè il suo valore viene aggiornato ogni secondo con un nuovo valore. Ho pensato di stressare un po' il PC se ogni secondo gli faccio caricare l'immagine (circa 200 Kb) e poi sovrapporre 4 scritte, deve fare questo lavoro ogni secondo, tutti i giorni per qualche anno!
    Te che dici, mi preoccupo troppo?

    Grazie

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.