Autore Topic: Scrivere un testo in una drawing area  (Letto 1440 volte)

Offline Lux

  • Maestro Gambero
  • ****
  • Post: 417
    • Mostra profilo
Scrivere un testo in una drawing area
« il: 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:

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.273
  • Chi parla poco dice tanto...
    • Mostra profilo
Re: Scrivere un testo in una drawing area
« Risposta #1 il: 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
« Ultima modifica: 20 Febbraio 2011, 21:01:19 da milio »

Offline Lux

  • Maestro Gambero
  • ****
  • Post: 417
    • Mostra profilo
Re: Scrivere un testo in una drawing area
« Risposta #2 il: 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?

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.484
    • Mostra profilo
Re: Scrivere un testo in una drawing area
« Risposta #3 il: 22 Febbraio 2011, 20:06:50 »
ricordati di dare a true la proprietà cached e la proprietà painted della drawingarea

Offline Lux

  • Maestro Gambero
  • ****
  • Post: 417
    • Mostra profilo
Re: Scrivere un testo in una drawing area
« Risposta #4 il: 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

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.484
    • Mostra profilo
Re: Scrivere un testo in una drawing area
« Risposta #5 il: 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
« Ultima modifica: 22 Febbraio 2011, 20:54:47 da fsurfing »

Offline Lux

  • Maestro Gambero
  • ****
  • Post: 417
    • Mostra profilo
Re: Scrivere un testo in una drawing area
« Risposta #6 il: 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?

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.484
    • Mostra profilo
Re: Scrivere un testo in una drawing area
« Risposta #7 il: 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 ...

Offline Lux

  • Maestro Gambero
  • ****
  • Post: 417
    • Mostra profilo
Re: Scrivere un testo in una drawing area
« Risposta #8 il: 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

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.484
    • Mostra profilo
Re: Scrivere un testo in una drawing area
« Risposta #9 il: 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

Offline Lux

  • Maestro Gambero
  • ****
  • Post: 417
    • Mostra profilo
Re: Scrivere un testo in una drawing area
« Risposta #10 il: 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 :-\

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.484
    • Mostra profilo
Re: Scrivere un testo in una drawing area
« Risposta #11 il: 23 Febbraio 2011, 21:42:40 »
sei sicuro di avere solo quel codice nel progetto?

Offline Lux

  • Maestro Gambero
  • ****
  • Post: 417
    • Mostra profilo
Re: Scrivere un testo in una drawing area
« Risposta #12 il: 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:

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.484
    • Mostra profilo
Re: Scrivere un testo in una drawing area
« Risposta #13 il: 23 Febbraio 2011, 22:00:54 »
ch ecomponenti hai attivi?

io ho solo

gb
gb.gui
gb.image

Offline Lux

  • Maestro Gambero
  • ****
  • Post: 417
    • Mostra profilo
Re: Scrivere un testo in una drawing area
« Risposta #14 il: 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