souligner un caractère dans un texte du canvas

 

ulis, 2006-02-11. Une procédure qui souligne un caractère dans le texte d'un canvas.


Pourquoi

Pour aider ceux qui voudraient faire un bouton à partir du canvas (si, si, il y en a). Ou qui auraient besoin de souligner un caractère pour une raison quelconque.


Comment

En utilisant font measure et l'opération bbox du canvas pour positionner le souligné.


Utilisation

  underline w ttag utag n
  # w : le canvas
  # ttag : le tag du texte (déja créé)
  # utag : le tag du souligné (à créer).
  # n : l'index du caractère à souligner dans le texte.

La procédure

  proc underline {w ttag utag n} \
  {
    # create line utag to underline char at n in text ttag
    set font [$w itemcget $ttag -font]
    set text [$w itemcget $ttag -text]
    set char [string index $text $n]
    set p $n; incr p -1
    # compute x0, x1 & y for the underline
    set bbox [$w bbox $ttag]
    # compute x0 (the start)
    set x0 [lindex $bbox 0]
    incr x0
    if {$p > -1} \
    {
      set prev [string range $text 0 $p]
      incr x0 [font measure $font $prev]
    }
    # compute x1 (the end)
    set x1 $x0
    incr x1 [font measure $font $char]
    # compute y (the y coordinate)
    set y [lindex $bbox 3]
    # create the underline
    $w create line $x0 $y $x1 $y -tags $utag
  }

La démo

  package require Tk

  wm title . underline
  canvas .c -width 200 -height 100
  .c create text 100 50 -text abraCadabra \
    -font {Arial 15} -tags text
  underline .c text under 4
  .c itemconfig under -fill red
  pack .c

Voir aussi


Discussion

ulis : je n'ai trouvé aucun exemple sur Internet


Catégorie Exemple | Catégorie Interface utilisateur