Newsgroup: it.comp.lang.visual-basic
Titolo: Ottenere l'immagine da una Label

Ciao.
Ho un applicativo in cui l'utente imposta contenuto, font, dimensione e
colore di un testo in una Label.
Adesso ho l'esigenza di copiare nella clipboard il contenuto di questa
label, però sotto forma di Bitmap, e non di testo formattato.
Con altri controlli, avevo trovato una proprietà image che mi restituiva un
handle utilizzabile allo scopo. Nella label non ho trovato la stessa cosa.
Qualcuno sa darmi una mano?
Ciao e grazie.
Alberto

 ha scritto nel messaggio
news:Q4XZ8.5814$s74.1...@twister1.libero.it...

Ti appoggi ad una picture nascosta, imposti per essa tutti i parametri che
l'utente ha settato sulla label, ci copi il testo della label (che a quasto
punto dovrebbe essere identico in tutto e per tutto), ridimensioni
correttamente la picture con TextHeight e textwidth e salvi la tu aimmagine.
--
Ciao
   Sharkman
-----------------------------
Rimuovere NOSPAM per risposte

 correttamente la picture con TextHeight e textwidth e salvi la tu
aimmagine.
Ho provato a fare questo (se ho capito bene quanto da te consigliato), ma
nella picturebox non appare niente.
Se uso vbCFBitmap nel setText, mi dà errore di formato appunti.
Se uso SetData, mi dice tipo non corrispondente (personalmente credevo che
la strada fosse proprio questa...)
Questo è il codice che non dà errore, ma che non mi copia niente nella
picturebox:
Clipboard.SetText Label1.Caption
Picture1.Picture = Clipboard.GetData(vbCFBitmap)
Intanto grazie per la dritta. Spero di arrivare a qualcosa di funzionante...
Ciao
Alberto

 ha scritto nel messaggio
news:fgT_8.16371$GV2.4...@twister2.libero.it...

Sarà più chiaro (spero :-)):
Testo da inserire nella label: Pippo
Carattere: Arial
Dimensione: 18
Corsivo e Grassetto: ON
(il codice è scritto a mano quindi quasi sicuramente dovrà essere
revisionato"
with Picture1
    .font="Arial"
    .font.size="18"
    .Font.bold=True
    .Font.Italic=True
    label1.width= .textwidth("Pippo")+100 (il + 100 è a caso l'ho inserito
per dare un pò di respiro alla label)
    label1.height= .textheight("Pippo")+50 (Come sopra)
end with
with Label1
    .Font="Arial"
    .Font.size="18"
    .Font.bold=True
    .Font.Italic=True
    .caption="Pippo"
End with
Saluti


 ha scritto

con l'aiuto di franco languasco, mi ero fatto un db di emoticons
visualizzandoli con un label e, per ruotarli come si deve, con un picture
con le stesse caratteristiche, che puo' essere salvato come bmp. non e' un
granche', ma direi che +- funzionasse, se credi te lo mando. 430k col db,
non so se senza riesci a usare il codice. purtroppo non ho tempo di
riguardare il tutto con calma.
--
ciao, j.
www.sundaysw.com

 revisionato"
[cut]
Il tuo codice era perfetto.
Purtroppo però non riesco a capire in che punto avvenga la trasformazione,
del testo della label, in un bitmap.
Pensavo, leggendo il tuo post, che in qualche modo la picturebox nascosta
fosse in grado di "intercettare" quello che vi si trova sopra (nel caso, la
label).
Invece la clipboard rimane vuota, anche dopo avervi forzato la picturebox
(o, per essere più precisi, viene riempita con la picturebox senza alcun
testo sopra).
Situazione: sul form ho una picturebox con visible=false (ma non funziona
neppure con visible=true), e esattamente sopra alla picturebox si trova la
label. Il codice in un commandbutton è:
Private Sub Command1_Click()
With Picture1
    .Font = "Arial"
    .Font.Size = "18"
    .Font.Bold = True
    .Font.Italic = True
    Label1.Width = .TextWidth("Pippo") + 100
    Label1.Height = .TextHeight("Pippo") + 50
End With
With Label1
    .Font = "Arial"
    .Font.Size = "18"
    .Font.Bold = True
    .Font.Italic = True
    .Caption = "Pippo"
End With
Clipboard.Clear
Clipboard.SetData Picture1.Image, vbCFBitmap
End Sub
Se invece di SetData uso SetText, ottengo nella clipboard un long che credo
sia il valore numerico di qualche puntatore.
Comunque grazie per l'impegno.
Vedrò di aggiustarmi la testa prima di continuare :-(((
Alberto

 Alberto
Non trovi nessuna picture, ne nella label ne nella clipboard, perchè... non
viene creata da nessuna parte un'immagine. Semplicemnete le funzione
TextHeight e textWidth restituiscono un valore numerico calcolato (non mi
chiedere come perchè non lo so) della dimensione del testo partendo dalle
impostazioni del testo stesso nel controllo.
Comunque non vedo cosa potresti fartene dell'immagine visto che in una label
non è possibile assegnare una picture.
Se, comunque, ti dovesse interessare l'immagine, converti il codice che ti
ho postato per far si che sia la Picture a ridimensionarsi (escludendo in
tutto e per tutto la label dal tuo programma), poi con il medoto
Picture1.Print "Pippo" inserisci il testo e poi salvi l'immagine (e non la
picture) che si è creata dove vuoi (file di testo, altra picture, stampante,
ecc.)


 con il medoto Picture1.Print "Pippo" inserisci il testo e poi salvi
l'immagine
Sarò cocciuto io, ma il metodo Print della PictureBox non lo trovo proprio.
Eppure sarebbe la soluzione alla mia necessità: se riuscissi a scrivere un
testo dentro ad una picturebox, mi basterebbe copiare la image della
picturebox nella clipboard, e avrei ottenuto quello che mi serve.
Ciao
Alberto

 Alberto
il core e' di franco languasco. se scrivo in txtsmiley, mi cambiano label e
picture. qui il pic e' ruotato tipo emoticon. command1 l'ho aggiunto in
questo momento: in irfanview ho incollato la bmp.
--
ciao, j.
www.sundaysw.com
Sub PrintEx(obj As Object, defFont As StdFont, _
        angolo As Integer, strOut As String)
    Dim void As Long
    Dim newFont As Long
    Dim oldFont As Long
    Dim fontHeight As Long
    Dim fontWidth As Long
    obj.ScaleMode = vbPixels
    Set obj.Font = defFont
    fontHeight = obj.TextHeight(strOut)
    fontWidth = obj.TextWidth(strOut)
    newFont = CreateFont(fontHeight, 0, angolo * 10, 0, _
        defFont.Weight, defFont.Italic, defFont.Underline, _
        defFont.Strikethrough, ANSI_CHARSET, _
        OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, _
        PROOF_QUALITY, DEFAULT_PITCH, defFont.Name)
    oldFont = SelectObject(obj.hdc, newFont)
    obj.CurrentX = (obj.ScaleWidth - fontHeight) / 2 + fontHeight
    obj.CurrentY = (obj.ScaleHeight - fontWidth) / 2
    obj.Print strOut
    void = SelectObject(obj.hdc, oldFont)
    void = DeleteObject(newFont)
End Sub
Private Sub txtSmiley_Change()
    If txtSmiley <> "" And txtDesc <> "" Then
        cmdAddDB.Enabled = True
    Else
        cmdAddDB.Enabled = False
    End If
    With lblSmiley
        .Caption = txtSmiley
    End With
    Dim defFont As New StdFont
    defFont.Name = lblSmiley.Font
    defFont.Size = lblSmiley.FontSize
    defFont.Bold = lblSmiley.FontBold
    defFont.Italic = lblSmiley.FontItalic
    picSmiley.Cls
        picSmiley.Width = lblSmiley.Height
        picSmiley.Height = lblSmiley.Width
        PrintEx picSmiley, defFont, -90, lblSmiley
End Sub
Private Sub Command1_Click()
    Clipboard.SetData picSmiley.Image, vbCFBitmap
End Sub

 ha scritto nel messaggio
news:ahj618$skejn$1...@ID-51318.news.dfncis.de...
[cut]
Risolto.
Il problema principale era che nella picturebox non era impostato
l'AutoRedraw.
Il secondo problema è che il metodo Print della picturebox non è
documentato, e dà anche errore in compilazione, a meno che non lo si faccia
chiamare da un oggetto Object generico, che solo a runtime sarà una
picturebox.
Il codice qui sotto nasce da un mix dei consigli pazienti di Sharkman e
Javalab.
Ciao e grazie.
Alberto
Private Sub Command1_Click()
With Label1
    .Font = "Arial"
    .Font.Size = "18"
    .Font.Bold = True
    .Font.Italic = True
    .Caption = "Pippo"
End With
Call Trasferisci_Immagine(picture1, Label1)
Clipboard.Clear
Clipboard.SetData picture1.Image, vbCFBitmap
End Sub
Private Sub Trasferisci_Immagine(ByRef Pic As Object, ByRef Testo As Object)
With Pic
    .Font = Testo.Font
    .Font.Size = Testo.Font.Size
    .Font.Bold = Testo.Font.Bold
    .Font.Italic = Testo.Font.Italic
    .Width = Testo.Width
    .Height = Testo.Height
    .Top = Testo.Top
    .Left = Testo.Left
End With
Pic.Print Testo.Caption
End Sub