Gambas-it

Gambas3 => Programmazione => Topic aperto da: Lux - 20 Febbraio 2011, 19:17:47

Titolo: Scrivere un testo in una drawing area
Inserito da: Lux - 20 Febbraio 2011, 19:17:47
Ciao a tutti! Eccomi tornato, mi godo questo po' di libertà prima di assentarmi nuovamente....
Allora come ormai avrete imparato, ad ogni mio ritorno mi tocca ricordare quanto imparato nelle volte precedenti e cercare di inserire qualcosa di nuovo.
il mio problema è questo, guardando il codice del programma di esempio "painting" mi è venuta voglia di imparare a scrivere un testo...ma credo di non avre afferrato bene il concetto...mi date una mano?
ho una form co un pulsate ed una drawing area, vorrei, al click sul pulsante che apparisse la scritta "Ciao" sulla drawing area in una determinata posizione.
ecco le due riga di codice che ho scritto:
Codice: [Seleziona]
Public Sub ToolButton1_Click()
  Dim x, y As Integer
  x = 20
  y = 100
  Paint.Font.Name = "Sans"
  Paint.Font.Size = 90
  Paint.Font.Bold = True
  Paint.MoveTo(x, y)
  Paint.Text("Ciao")
  Paint.Fill
  DrawingArea1.Refresh
End
Perdonatemi se il codice conterrà molte sciocchezzuole, ma è da tanto che non uso il gambero.... :evil:
Titolo: Re: Scrivere un testo in una drawing area
Inserito da: milio - 20 Febbraio 2011, 20:49:56
Codice: [Seleziona]
Public Sub ToolButton1_Click()

  DrawingArea1.Refresh()

End

Public Sub DrawingArea1_Draw()
Dim x, y As Integer

  x = 20
  y = 100
  Paint.Begin(DrawingArea1)
    Paint.Font.Name = "Sans"
    Paint.Font.Size = 90
    Paint.Font.Bold = True
    Paint.Text("Ciao",x,y)
    Paint.Fill()
  Paint.End()

End
Titolo: Re: Scrivere un testo in una drawing area
Inserito da: Lux - 22 Febbraio 2011, 19:40:01
Ho scritto tutto in maniera molto semplice ma non va.
Il mio codice:
Codice: [Seleziona]
Public Sub ToolButton1_Click()
  DrawingArea1.Refresh
End

Public Sub DrawingArea1_Draw()
  Dim x, y As Integer
  x = 10
  y = 10
  Paint.Begin(DrawingArea1)
    Paint.Text("Ciao")
    Paint.Color(2)
    Paint.MoveTo(x, y)
    Paint.Fill
  Paint.End 
End
L'errore:
Codice: [Seleziona]
warning: unable to load Qt translation: it_IT.utf8
Curiosità: Ma in questo modo utilizzo la libreria cairo e quindi la grafica vettoriale?
Titolo: Re: Scrivere un testo in una drawing area
Inserito da: fsurfing - 22 Febbraio 2011, 20:06:50
ricordati di dare a true la proprietà cached e la proprietà painted della drawingarea
Titolo: Re: Scrivere un testo in una drawing area
Inserito da: Lux - 22 Febbraio 2011, 20:30:13
ricordati di dare a true la proprietà cached e la proprietà painted della drawingarea
Si si, già fatto! :P
Titolo: Re: Scrivere un testo in una drawing area
Inserito da: fsurfing - 22 Febbraio 2011, 20:52:15
il metodo paint è diverso dal draw

il codice che hai postato è relativo al draw

per il painting devi prma definire un brusch

Codice: gambas [Seleziona]

 Public Sub ToolButton1_Click()

  Dim x, y As Integer
  x = 10
  y = 20
  Paint.Begin(DrawingArea1)
     Paint.Brush = Paint.Color(Color.Black)
   
     Paint.Text("Ciao", x, y)
     Paint.fill
     
   
     
     Paint.Rectangle(x + 100, y + 50, 50, 50)
     
     Paint.Fill
     
      Paint.Rectangle(x + 200, y + 50, 50, 50)
      Paint.stroke
     
      Paint.Brush = Paint.Color(2143514591)
      Paint.Rectangle(x + 120, y + 75, 50, 50)
      Paint.Fill
     
  Paint.End 
End
Titolo: Re: Scrivere un testo in una drawing area
Inserito da: Lux - 23 Febbraio 2011, 19:54:04
ok, ho fatto delle correzioni ed ho aggiunto un fontchooser nella form
Codice: [Seleziona]
Public Sub ToolButton1_Click()
  DrawingArea1.Refresh
End

Public Sub DrawingArea1_Draw()
  Dim x, y As Integer
  x = 150
  y = 150
  
  Paint.Begin(DrawingArea1)
    Paint.Brush = Paint.Color(Color.DarkBlue)
    Paint.Text("Hello!", x, y)
    Paint.Font.Name = FontChooser1.SelectedFont
    Paint.Fill
  Paint.End
End
Però non mi lascia utilizzare il font scelto dal fontchooser...
inoltre all'avvio della form mi scrive già il testo, ma io vorrei che il testo sia scritto al click del mouse e non all'avvio...
la differenza tra draw e paint é soltanto quella del brush oppure paint è vettoriale (usando la libreria cairo) e l'altro no?
Titolo: Re: Scrivere un testo in una drawing area
Inserito da: fsurfing - 23 Febbraio 2011, 20:02:41
il nome lo devi idicare prima dell' istruzione testo

per disegnare solo al clic del mouse devi inserire il codice di disegno nella funzione del pulsente e non in "Public Sub DrawingArea1_Draw()"

le diversita tra paint e draw sono molte.. una per tutte la possibilità di gestire le trasparenze e i file svg , non saprei dirti se è vettoriale ...
Titolo: Re: Scrivere un testo in una drawing area
Inserito da: Lux - 23 Febbraio 2011, 20:13:53
il nome lo devi idicare prima dell' istruzione testo

per disegnare solo al clic del mouse devi inserire il codice di disegno nella funzione del pulsente e non in "Public Sub DrawingArea1_Draw()"

le diversita tra paint e draw sono molte.. una per tutte la possibilità di gestire le trasparenze e i file svg , non saprei dirti se è vettoriale ...

ho una serie di errori..
Codice: [Seleziona]
warning: unable to load Qt translation: it_IT.utf8
QPainter::begin: Widget painting can only begin as a result of a paintEvent
QPainter::setRenderHint: Painter must be active to set rendering hints
QPainter::setRenderHint: Painter must be active to set rendering hints
QPainter::setRenderHint: Painter must be active to set rendering hints
QPainter::pen: Painter not active
QPainter::setPen: Painter not active
QPainter::setBrush: Painter not active
QPainter::font: Painter not active
QPainter::setFont: Painter not active
QPainter::setBrush: Painter not active
QPainter::pen: Painter not active
QPainter::setPen: Painter not active
QPainter::fontMetrics: Painter not active
QPainter::font: Painter not active
QPainter::brush: Painter not active
QPainter::fillPath: Painter not active
ecco il codice corretto inserendo anche un colorchooser
Codice: [Seleziona]
Public Sub ToolButton1_Click()
  Dim x, y As Integer
  x = 150
  y = 150
  Paint.Begin(DrawingArea1)
    Paint.Font.Name = FontChooser1.SelectedFont
    Paint.Brush = Paint.Color(Color.Blue)
    Paint.Text("Hello!", x, y)
    Paint.Fill
  Paint.End
  DrawingArea1.Refresh
End
Titolo: Re: Scrivere un testo in una drawing area
Inserito da: fsurfing - 23 Febbraio 2011, 21:22:40
il codice che hai inserito a me  funziona , anche se non ci metterei proprio l' ultima riga:

Codice: [Seleziona]
  DrawingArea1.Refresh
non ti  serve fare un refresch della drawing, l' hai già disegnata nel codice prima
Titolo: Re: Scrivere un testo in una drawing area
Inserito da: Lux - 23 Febbraio 2011, 21:27:04
il codice che hai inserito a me  funziona , anche se non ci metterei proprio l' ultima riga:

Codice: [Seleziona]
  DrawingArea1.Refresh
non ti  serve fare un refresch della drawing, l' hai già disegnata nel codice prima
a me no :-\
Titolo: Re: Scrivere un testo in una drawing area
Inserito da: fsurfing - 23 Febbraio 2011, 21:42:40
sei sicuro di avere solo quel codice nel progetto?
Titolo: Re: Scrivere un testo in una drawing area
Inserito da: Lux - 23 Febbraio 2011, 21:46:42
Ho modificato ancora ma non va ecco tutto il progetto:
Codice: [Seleziona]
Public a As Integer
Public b As Integer

Public Sub _new()

End

Public Sub Form_Open()
  Me.Center
End

Public Sub ToolButton1_Click()
  Paint.Begin(DrawingArea1)
    Paint.Brush = Paint.Color(ColorChooser1.SelectedColor)
    Paint.Font.Name = FontChooser1.SelectedFont
    Paint.Text("Hello!", a, b)
    Paint.Fill
  Paint.End
End

Public Sub DrawingArea1_MouseMove()
  a = Mouse.X
  b = Mouse.Y
  ValueBox1.Value = a
  ValueBox2.Value = b
End
La form ha un fontchooser per la scelta del font ed un colorchooser per il colore.. :hatecomputer:
Titolo: Re: Scrivere un testo in una drawing area
Inserito da: fsurfing - 23 Febbraio 2011, 22:00:54
ch ecomponenti hai attivi?

io ho solo

gb
gb.gui
gb.image
Titolo: Re: Scrivere un testo in una drawing area
Inserito da: Lux - 26 Febbraio 2011, 19:47:19
Ecco tutti i componenti attivi:
gb
gb.cairo
gb.form
gb.form.dialog
gb.form.midi
gb.image
gb.qt4
gb.qt4.ext
gb.settings
Titolo: Re: Scrivere un testo in una drawing area
Inserito da: vuott - 20 Marzo 2012, 17:58:59
Ho notato che se uso Paint.Stroke (necessario con Paint.Text e con Paint.RichText), il testo è come posto in grassetto. Ottengo, invece, un aspetto normale se uso Paint.Fill.

Vi risulta questa cosa ?
Titolo: Re: Scrivere un testo in una drawing area
Inserito da: fsurfing - 20 Marzo 2012, 19:55:28
certo ,perchè con stroke viene disegnato solo il contorno che quindi con un size piccolo sembra quasi un grassetto, con fill viene fatto il riempimento e quindi si vede normale
Titolo: Re: Scrivere un testo in una drawing area
Inserito da: vuott - 20 Marzo 2012, 19:57:56
certo ,perchè con stroke viene disegnato solo il contorno che quindi con un size piccolo sembra quasi un grassetto, con fill viene fatto il riempimento e quindi si vede normale

Ah, capisco. Grazie per la spiegazione, fsurfing.  :ciao:





Riguardo in generale alla discussione segnalerei questa pagina della nostra WIKI:
http://www.gambas-it.org/wiki/index.php/Scrivere_del_testo_in_una_DrawingArea