FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» Logiciel de planétarium.
Outil de création d'info-bulles Emptypar Pedro Aujourd'hui à 10:37

» Un autre pense-bête...
Outil de création d'info-bulles Emptypar Froggy One Jeu 21 Nov 2024 - 15:54

» Récupération du contenu d'une page html.
Outil de création d'info-bulles Emptypar Pedro Sam 16 Nov 2024 - 14:04

» Décompilation
Outil de création d'info-bulles Emptypar JL35 Mar 12 Nov 2024 - 19:57

» Un album photos comme du temps des grands-mères
Outil de création d'info-bulles Emptypar jjn4 Mar 12 Nov 2024 - 17:23

» traitement d'une feuille excel
Outil de création d'info-bulles Emptypar jjn4 Jeu 7 Nov 2024 - 3:52

» Aide-mémoire mensuel
Outil de création d'info-bulles Emptypar jjn4 Lun 4 Nov 2024 - 18:56

» Des incomprèhension avec Timer
Outil de création d'info-bulles Emptypar Klaus Mer 30 Oct 2024 - 18:26

» KGF_dll - nouvelles versions
Outil de création d'info-bulles Emptypar Klaus Mar 29 Oct 2024 - 17:58

» instructions panoramic
Outil de création d'info-bulles Emptypar maelilou Lun 28 Oct 2024 - 19:51

» Figures fractales
Outil de création d'info-bulles Emptypar Marc Ven 25 Oct 2024 - 12:18

» Panoramic et Scanette
Outil de création d'info-bulles Emptypar Yannick Mer 25 Sep 2024 - 22:16

» Editeur d étiquette avec QR évolutif
Outil de création d'info-bulles Emptypar JL35 Lun 23 Sep 2024 - 22:40

» BUG QR Code DelphiZXingQRCode
Outil de création d'info-bulles Emptypar Yannick Dim 22 Sep 2024 - 11:40

» fichier.exe
Outil de création d'info-bulles Emptypar leclode Ven 20 Sep 2024 - 19:02

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Novembre 2024
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
252627282930 
CalendrierCalendrier
Le deal à ne pas rater :
Code promo Nike : -25% dès 50€ d’achats sur tout le site Nike
Voir le deal

 

 Outil de création d'info-bulles

Aller en bas 
4 participants
AuteurMessage
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Outil de création d'info-bulles Empty
MessageSujet: Outil de création d'info-bulles   Outil de création d'info-bulles EmptyVen 22 Juin 2012 - 15:35

Ma dll PrintScreen.dll contient des fonctions de manupulation d'images, et en particulier une fonction ModifyPicture qui permet de faire des incrustations d'images dans une autre, en respectant une couleur de transparence.

J'ai donc fait un utilitaire permettant de générer des info-bulles de façon interactive et visuelle, et de les sauvegarder dans un fichier JPG. Ce fichier peut ensuite être "incrusté" dans une autre image, à l'endroit voulu, à l'aide de la fonction ModifyPicture de PrintScreen.dll.

Voici le code:
Code:
' infobulle.bas

label labels : gosub labels
gosub constantes
gosub variables
gosub form0
gosub GUI

end

labels:
  label d_bulle, constantes, variables, form0, GUI
  label chg_bulle, chg_fond, dessiner, enregistrer
  return

constantes:
  return
 
form0:
  full_space 0
  caption 0,"Générateur de bulles d'information"
  return

variables:
  dim bulle_x%, bulle_y%, bulle_w%, bulle_h%
  dim bulle_pointe_org%, bulle_pointe_x%, bulle_pointe_y%
  dim bulle_color_R%, bulle_color_G%, bulle_color_B%
  dim fond_color_R%, fond_color_G%, fond_color_B%

  dim k%, x1%, x2%, y1%, y2%, fx%, fy%, xd%, yd%, f$

  dim no%, no1%, no_bulle%, no_picture_h%, no_picture_w%
  dim no_bulle_x%, no_bulle_y%, no_bulle_w%, no_bulle_h%
  dim no_pointe_x%, no_pointe_y%
  dim no_bulle_R%, no_bulle_G%, no_bulle_B%, no_apercu%
  dim no_fond_R%, no_fond_G%, no_fond_B%, no_fond%
  dim no_pointe_org%, no_save%, no_transp_color%
 
  return
 
GUI:
  no% = no% + 1 : save_dialog no% : no_save% = no%
    filter no%,"Fichier image|*.bmp"
 
  no% = no% + 1 : container no% : no1% = no% : caption no%,"Taille de l'image"
    top no%,10 : left no%,10 : width no%,160 : height no%,100
  no% = no% + 1 : alpha no% : parent no%,no1%
    top no%,20 : left no%,10 : caption no%,"Hauteur:"
  no% = no% + 1 : edit no% : parent no%,no1% : no_picture_h% = no%
    top no%,20 : left no%,80 : width no%,30 : text no%,"400"
  no% = no% + 1 : alpha no% : parent no%,no1%
    top no%,50 : left no%,10 : caption no%,"Largeur:"
  no% = no% + 1 : edit no% : parent no%,no1% : no_picture_w% = no%
    top no%,50 : left no%,80 : width no%,30 : text no%,"500"
   
  no% = no% + 1 : container no% : no1% = no% : caption no%,"Info-Bulle"
    top no%,120 : left no%,10 : width no%,160 : height no%,580
  no% = no% + 1 : alpha no% : parent no%,no1%
    top no%,20 : left no%,10 : caption no%,"Origine X:"
  no% = no% + 1 : edit no% : parent no%,no1% : no_bulle_x% = no%
    top no%,20 : left no%,80 : width no%,30 : text no%,"150"
  no% = no% + 1 : alpha no% : parent no%,no1%
    top no%,50 : left no%,10 : caption no%,"Origine Y:"
  no% = no% + 1 : edit no% : parent no%,no1% : no_bulle_Y% = no%
    top no%,50 : left no%,80 : width no%,30 : text no%,"150"
  no% = no% + 1 : alpha no% : parent no%,no1%
    top no%,90 : left no%,10 : caption no%,"Hauteur:"
  no% = no% + 1 : edit no% : parent no%,no1% : no_bulle_h% = no%
    top no%,90 : left no%,80 : width no%,30 : text no%,"100"
  no% = no% + 1 : alpha no% : parent no%,no1%
    top no%,120 : left no%,10 : caption no%,"Largeur:"
  no% = no% + 1 : edit no% : parent no%,no1% : no_bulle_w% = no%
    top no%,120 : left no%,80 : width no%,30 : text no%,"200"
  no% = no% + 1 : alpha no% : parent no%,no1%
    top no%,160 : left no%,10 : caption no%,"Dép. flèche"
  no% = no% + 1 : combo no% : parent no%,no1% : no_pointe_org% = no%
    top no%,160 : left no%,80 : width no%,70
    item_add no%,"Haut" : item_add no%,"Droite"
    item_add no%,"Bas" : item_add no%,"Gauche"
    text no%,"Bas"
  no% = no% + 1 : alpha no% : parent no%,no1%
    top no%,190 : left no%,10 : caption no%,"Pointe X:"
  no% = no% + 1 : edit no% : parent no%,no1% : no_pointe_x% = no%
    top no%,190 : left no%,80 : width no%,30 : text no%,"150"
  no% = no% + 1 : alpha no% : parent no%,no1%
    top no%,220 : left no%,10 : caption no%,"Pointe Y:"
  no% = no% + 1 : edit no% : parent no%,no1% : no_pointe_Y% = no%
    top no%,220 : left no%,80 : width no%,30 : text no%,"365"
  no% = no% + 1 : alpha no% : parent no%,no1%
    top no%,260 : left no%,10 : caption no%,"Bulle:"
  no% = no% + 1 : alpha no% : parent no%,no1%
    top no%,280 : left no%,10 : caption no%,"R"
  no% = no% + 1 : alpha no% : parent no%,no1%
    top no%,280 : left no%,30 : caption no%,"G"
  no% = no% + 1 : alpha no% : parent no%,no1%
    top no%,280 : left no%,50 : caption no%,"B"
  no% = no% + 1 : alpha no% : parent no%,no1%
    top no%,260 : left no%,90 : caption no%,"Fond:"
  no% = no% + 1 : alpha no% : parent no%,no1%
    top no%,280 : left no%,90 : caption no%,"R"
  no% = no% + 1 : alpha no% : parent no%,no1%
    top no%,280 : left no%,110 : caption no%,"G"
  no% = no% + 1 : alpha no% : parent no%,no1%
    top no%,280 : left no%,130 : caption no%,"B"
   
  no% = no% + 1 : scroll_bar no% : parent no%,no1% : no_bulle_R% = no%
    top no%,300 : left no%,10 : vertical no% : min no%,0 : max no%,255
    position no%,255 : on_change no%,chg_bulle
  no% = no% + 1 : scroll_bar no% : parent no%,no1% : no_bulle_G% = no%
    top no%,300 : left no%,30 : vertical no% : min no%,0 : max no%,255
    position no%,255 : on_change no%,chg_bulle
  no% = no% + 1 : scroll_bar no% : parent no%,no1% : no_bulle_B% = no%
    top no%,300 : left no%,50 : vertical no% : min no%,0 : max no%,255
    position no%,0 : on_change no%,chg_bulle
  no% = no% + 1 : picture no% : parent no%,no1% : no_apercu% = no%
    top no%,430 : left no%,10 : width no%,60 : height no%,50
    color no%,position(no_bulle_R%),position(no_bulle_G%),position(no_bulle_B%)

  no% = no% + 1 : scroll_bar no% : parent no%,no1% : no_fond_R% = no%
    top no%,300 : left no%,90 : vertical no% : min no%,0 : max no%,255
    position no%,127 : on_change no%,chg_fond
  no% = no% + 1 : scroll_bar no% : parent no%,no1% : no_fond_G% = no%
    top no%,300 : left no%,110 : vertical no% : min no%,0 : max no%,255
    position no%,127 : on_change no%,chg_fond
  no% = no% + 1 : scroll_bar no% : parent no%,no1% : no_fond_B% = no%
    top no%,300 : left no%,130 : vertical no% : min no%,0 : max no%,255
    position no%,127 : on_change no%,chg_fond
  no% = no% + 1 : picture no% : parent no%,no1% : no_fond% = no%
    top no%,430 : left no%,90 : width no%,60 : height no%,50
    color no%,position(no_fond_R%),position(no_fond_G%),position(no_fond_B%)

  no% = no% + 1 : button no% : parent no%,no1% : on_click no%,dessiner
    top no%,500 : left no%,10 : caption no%,"Dessiner"
  no% = no% + 1 : button no% : parent no%,no1% : on_click no%,enregistrer
    top no%,540 : left no%,10 : caption no%,"Enregistrer"

  no% = no% + 1 : alpha no% : no_transp_color% = no%
    top no%,10 : left no%,200
    f$ =            str$(position(no_fond_R%))
    f$ = f$ + "," + str$(position(no_fond_G%))
    f$ = f$ + "," + str$(position(no_fond_B%))
    caption no%,"Couleur fond: "+f$
  no% = no% + 1 : no_bulle% = no%
 
  return
 
chg_bulle:
  color no_apercu%,position(no_bulle_R%),position(no_bulle_G%),position(no_bulle_B%)
  return
 
chg_fond:
  color no_fond%,position(no_fond_R%),position(no_fond_G%),position(no_fond_B%)
  f$ =            str$(position(no_fond_R%))
  f$ = f$ + "," + str$(position(no_fond_G%))
  f$ = f$ + "," + str$(position(no_fond_B%))
  caption no_transp_color%,"Couleur fond: "+f$
  return

dessiner:
  if object_exists(no_bulle%)=1 then delete no_bulle%
  picture no_bulle% : top no_bulle%,40
                      left no_bulle%,200
    width no_bulle%,val(text$(no_picture_w%))
    height no_bulle%,val(text$(no_picture_h%))

bulle_x% = val(text$(no_bulle_x%))
bulle_y% = val(text$(no_bulle_y%))
bulle_w% = val(text$(no_bulle_w%))
bulle_h% = val(text$(no_bulle_h%))
bulle_pointe_org% = item_index(no_pointe_org%)
if bulle_pointe_org%=0 then bulle_pointe_org% = 3
bulle_pointe_x% = val(text$(no_pointe_x%))
bulle_pointe_y% = val(text$(no_pointe_y%))
bulle_color_R% = position(no_bulle_R%)
bulle_color_G% = position(no_bulle_G%)
bulle_color_B% = position(no_bulle_B%)
fond_color_R% = position(no_fond_R%)
fond_color_G% = position(no_fond_G%)
fond_color_B% = position(no_fond_B%)

gosub d_bulle

end

d_bulle:
  color no_bulle%,fond_color_R%,fond_color_G%,fond_color_B%
  2d_target_is no_bulle%
  2d_pen_width 1
  2d_fill_color bulle_color_R%, bulle_color_G%, bulle_color_B%
  2d_rectangle bulle_x%,bulle_y%,bulle_x%+bulle_w%-1,bulle_y%+bulle_h%-1

  select bulle_pointe_org%
    case 1 : ' ligne du haut
      k% = bulle_w%/7
      x1% = bulle_x% + 3*k%
      y1% = bulle_y%
      x2% = x1% + k%
      y2% = y1%
      fx% = x1% + k%/2
      fy% = y1% - 2
      xd% = 0
      yd% = 0
    case 2 : ' ligne à droite
      k% = bulle_h%/5
      x1% = bulle_x% + bulle_w% - 1
      y1% = bulle_y% + 2*k%
      x2% = x1%
      y2% = y1% + k%
      fx% = x1% + 2
      fy% = y1% + k%/2
      xd% = 0 - 1
      yd% = 0
    case 3 : ' ligne du bas
      k% = bulle_w%/7
      x1% = bulle_x% + 3*k%
      y1% = bulle_y% + bulle_h% - 1
      x2% = x1% + k%
      y2% = y1%
      fx% = x1% + k%/2
      fy% = y1% + 2
      xd% = 0
      yd% = 0 - 1
    case 4 : ' ligne à gauche
      k% = bulle_h%/5
      x1% = bulle_x%
      y1% = bulle_y% + 2*k%
      x2% = x1%
      y2% = y1% + k%
      fx% = x1% - 2
      fy% = y1% + k%/2
      xd% = 0
      yd% = 0
  end_select
 
  2d_poly_from x1%,y1%
  2d_poly_to bulle_pointe_x%,bulle_pointe_y%
  2d_poly_to x2%+xd%,y2%+yd%
  2d_flood fx%,fy%, bulle_color_R%, bulle_color_G%, bulle_color_B%
  2d_pen_color bulle_color_R%, bulle_color_G%, bulle_color_B%
  2d_line x1%+xd%,y1%+yd%, x2%+xd%,y2%+yd%
  2d_pen_color 0,0,0
  2d_target_is 0
  return
 
enregistrer:
  if object_exists(no_bulle%)=0
    message "Il n'y a rien à enregistrer."
    return
  end_if
  f$ = file_name$(no_save%)
  if f$="_" then return
  if right$(f$,4)<>".bmp" then f$ = f$ + ".bmp"
  file_save no_bulle%,f$
  return
 
 

Voici l'interface visuel, avec les valeurs par défaut:
Outil de création d'info-bulles A115

Le fichier généré contient l'image affichée à droite. On peut choisir la taille et la position relative de la bulle, le côté de départ de la flèche et le point d'arrivée, ainsi que la taille globale de l'image générée.

EDIT

J'ai ajouté un réglage de la couleur de fond.


Dernière édition par Klaus le Ven 22 Juin 2012 - 19:25, édité 3 fois
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

Outil de création d'info-bulles Empty
MessageSujet: Re: Outil de création d'info-bulles   Outil de création d'info-bulles EmptyVen 22 Juin 2012 - 15:48

Ce soir, j'essaye de faire parler un orc avec ces fonctions (image de fond + collage de la machoire qui bouge (d'accord, je pourrais le faire avec un sprite, mais bon)) + Bulle avec le texte et utilisation de ta dll pour le faire parler.
Merci pour ton kit Wink
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Outil de création d'info-bulles Empty
MessageSujet: Re: Outil de création d'info-bulles   Outil de création d'info-bulles EmptySam 23 Juin 2012 - 0:24

Nouvelle version, on peut maintenant choisir d'avoir des coins arrondis (rayon 10 pixels). Voici le dernier source:
Code:
' infobulle.bas

label labels : gosub labels
gosub constantes
gosub variables
gosub form0
gosub GUI

end

labels:
  label d_bulle, constantes, variables, form0, GUI
  label chg_bulle, chg_fond, dessiner, enregistrer
  return

constantes:
  return
 
form0:
  full_space 0
  caption 0,"Générateur de bulles d'information"
  return

variables:
  dim bulle_x%, bulle_y%, bulle_w%, bulle_h%, bulle_arrondi%
  dim bulle_pointe_org%, bulle_pointe_x%, bulle_pointe_y%
  dim bulle_color_R%, bulle_color_G%, bulle_color_B%
  dim fond_color_R%, fond_color_G%, fond_color_B%

  dim k%, x1%, x2%, y1%, y2%, fx%, fy%, xd%, yd%, f$

  dim no%, no1%, no_bulle%, no_picture_h%, no_picture_w%
  dim no_bulle_x%, no_bulle_y%, no_bulle_w%, no_bulle_h%
  dim no_pointe_x%, no_pointe_y%, no_bulle_arrondi%
  dim no_bulle_R%, no_bulle_G%, no_bulle_B%, no_apercu%
  dim no_fond_R%, no_fond_G%, no_fond_B%, no_fond%
  dim no_pointe_org%, no_save%, no_transp_color%
 
  return
 
GUI:
  no% = no% + 1 : save_dialog no% : no_save% = no%
    filter no%,"Fichier image|*.bmp"
 
  no% = no% + 1 : container no% : no1% = no% : caption no%,"Taille de l'image"
    top no%,10 : left no%,10 : width no%,160 : height no%,100
  no% = no% + 1 : alpha no% : parent no%,no1%
    top no%,20 : left no%,10 : caption no%,"Hauteur:"
  no% = no% + 1 : edit no% : parent no%,no1% : no_picture_h% = no%
    top no%,20 : left no%,80 : width no%,30 : text no%,"400"
  no% = no% + 1 : alpha no% : parent no%,no1%
    top no%,50 : left no%,10 : caption no%,"Largeur:"
  no% = no% + 1 : edit no% : parent no%,no1% : no_picture_w% = no%
    top no%,50 : left no%,80 : width no%,30 : text no%,"500"
   
  no% = no% + 1 : container no% : no1% = no% : caption no%,"Info-Bulle"
    top no%,120 : left no%,10 : width no%,160 : height no%,610
  no% = no% + 1 : alpha no% : parent no%,no1%
    top no%,20 : left no%,10 : caption no%,"Origine X:"
  no% = no% + 1 : edit no% : parent no%,no1% : no_bulle_x% = no%
    top no%,20 : left no%,80 : width no%,30 : text no%,"150"
  no% = no% + 1 : alpha no% : parent no%,no1%
    top no%,50 : left no%,10 : caption no%,"Origine Y:"
  no% = no% + 1 : edit no% : parent no%,no1% : no_bulle_Y% = no%
    top no%,50 : left no%,80 : width no%,30 : text no%,"150"
  no% = no% + 1 : alpha no% : parent no%,no1%
    top no%,90 : left no%,10 : caption no%,"Hauteur:"
  no% = no% + 1 : edit no% : parent no%,no1% : no_bulle_h% = no%
    top no%,90 : left no%,80 : width no%,30 : text no%,"100"
  no% = no% + 1 : alpha no% : parent no%,no1%
    top no%,120 : left no%,10 : caption no%,"Largeur:"
  no% = no% + 1 : edit no% : parent no%,no1% : no_bulle_w% = no%
    top no%,120 : left no%,80 : width no%,30 : text no%,"200"
  no% = no% + 1 : alpha no% : parent no%,no1%
    top no%,160 : left no%,10 : caption no%,"Dép. flèche"
  no% = no% + 1 : combo no% : parent no%,no1% : no_pointe_org% = no%
    top no%,160 : left no%,80 : width no%,70
    item_add no%,"Haut" : item_add no%,"Droite"
    item_add no%,"Bas" : item_add no%,"Gauche"
    text no%,"Bas"
  no% = no% + 1 : alpha no% : parent no%,no1%
    top no%,190 : left no%,10 : caption no%,"Pointe X:"
  no% = no% + 1 : edit no% : parent no%,no1% : no_pointe_x% = no%
    top no%,190 : left no%,80 : width no%,30 : text no%,"150"
  no% = no% + 1 : alpha no% : parent no%,no1%
    top no%,220 : left no%,10 : caption no%,"Pointe Y:"
  no% = no% + 1 : edit no% : parent no%,no1% : no_pointe_Y% = no%
    top no%,220 : left no%,80 : width no%,30 : text no%,"365"
  no% = no% + 1 : alpha no% : parent no%,no1%
    top no%,260 : left no%,10 : caption no%,"Bulle:"
  no% = no% + 1 : alpha no% : parent no%,no1%
    top no%,280 : left no%,10 : caption no%,"R"
  no% = no% + 1 : alpha no% : parent no%,no1%
    top no%,280 : left no%,30 : caption no%,"G"
  no% = no% + 1 : alpha no% : parent no%,no1%
    top no%,280 : left no%,50 : caption no%,"B"
  no% = no% + 1 : alpha no% : parent no%,no1%
    top no%,260 : left no%,90 : caption no%,"Fond:"
  no% = no% + 1 : alpha no% : parent no%,no1%
    top no%,280 : left no%,90 : caption no%,"R"
  no% = no% + 1 : alpha no% : parent no%,no1%
    top no%,280 : left no%,110 : caption no%,"G"
  no% = no% + 1 : alpha no% : parent no%,no1%
    top no%,280 : left no%,130 : caption no%,"B"
   
  no% = no% + 1 : scroll_bar no% : parent no%,no1% : no_bulle_R% = no%
    top no%,300 : left no%,10 : vertical no% : min no%,0 : max no%,255
    position no%,255 : on_change no%,chg_bulle
  no% = no% + 1 : scroll_bar no% : parent no%,no1% : no_bulle_G% = no%
    top no%,300 : left no%,30 : vertical no% : min no%,0 : max no%,255
    position no%,255 : on_change no%,chg_bulle
  no% = no% + 1 : scroll_bar no% : parent no%,no1% : no_bulle_B% = no%
    top no%,300 : left no%,50 : vertical no% : min no%,0 : max no%,255
    position no%,0 : on_change no%,chg_bulle
  no% = no% + 1 : picture no% : parent no%,no1% : no_apercu% = no%
    top no%,430 : left no%,10 : width no%,60 : height no%,50
    color no%,position(no_bulle_R%),position(no_bulle_G%),position(no_bulle_B%)

  no% = no% + 1 : scroll_bar no% : parent no%,no1% : no_fond_R% = no%
    top no%,300 : left no%,90 : vertical no% : min no%,0 : max no%,255
    position no%,127 : on_change no%,chg_fond
  no% = no% + 1 : scroll_bar no% : parent no%,no1% : no_fond_G% = no%
    top no%,300 : left no%,110 : vertical no% : min no%,0 : max no%,255
    position no%,127 : on_change no%,chg_fond
  no% = no% + 1 : scroll_bar no% : parent no%,no1% : no_fond_B% = no%
    top no%,300 : left no%,130 : vertical no% : min no%,0 : max no%,255
    position no%,127 : on_change no%,chg_fond
  no% = no% + 1 : picture no% : parent no%,no1% : no_fond% = no%
    top no%,430 : left no%,90 : width no%,60 : height no%,50
    color no%,position(no_fond_R%),position(no_fond_G%),position(no_fond_B%)
   
  no% = no% + 1 : check no% : parent no%,no1% : no_bulle_arrondi% = no%
    top no%,500 : left no%,10 : caption no%,"Arrondi"

  no% = no% + 1 : button no% : parent no%,no1% : on_click no%,dessiner
    top no%,530 : left no%,10 : caption no%,"Dessiner"
  no% = no% + 1 : button no% : parent no%,no1% : on_click no%,enregistrer
    top no%,570 : left no%,10 : caption no%,"Enregistrer"

  no% = no% + 1 : alpha no% : no_transp_color% = no%
    top no%,10 : left no%,200
    f$ =            str$(position(no_fond_R%))
    f$ = f$ + "," + str$(position(no_fond_G%))
    f$ = f$ + "," + str$(position(no_fond_B%))
    caption no%,"Couleur fond: "+f$
  no% = no% + 1 : no_bulle% = no%
 
  return
 
chg_bulle:
  color no_apercu%,position(no_bulle_R%),position(no_bulle_G%),position(no_bulle_B%)
  return
 
chg_fond:
  color no_fond%,position(no_fond_R%),position(no_fond_G%),position(no_fond_B%)
  f$ =            str$(position(no_fond_R%))
  f$ = f$ + "," + str$(position(no_fond_G%))
  f$ = f$ + "," + str$(position(no_fond_B%))
  caption no_transp_color%,"Couleur fond: "+f$
  return

dessiner:
  if object_exists(no_bulle%)=1 then delete no_bulle%
  picture no_bulle% : top no_bulle%,40
                      left no_bulle%,200
    width no_bulle%,val(text$(no_picture_w%))
    height no_bulle%,val(text$(no_picture_h%))

bulle_x% = val(text$(no_bulle_x%))
bulle_y% = val(text$(no_bulle_y%))
bulle_w% = val(text$(no_bulle_w%))
bulle_h% = val(text$(no_bulle_h%))
bulle_pointe_org% = item_index(no_pointe_org%)
if bulle_pointe_org%=0 then bulle_pointe_org% = 3
bulle_pointe_x% = val(text$(no_pointe_x%))
bulle_pointe_y% = val(text$(no_pointe_y%))
bulle_color_R% = position(no_bulle_R%)
bulle_color_G% = position(no_bulle_G%)
bulle_color_B% = position(no_bulle_B%)
fond_color_R% = position(no_fond_R%)
fond_color_G% = position(no_fond_G%)
fond_color_B% = position(no_fond_B%)
bulle_arrondi% = checked(no_bulle_arrondi%)

gosub d_bulle

end

d_bulle:
  color no_bulle%,fond_color_R%,fond_color_G%,fond_color_B%
  2d_target_is no_bulle%
  2d_pen_width 1
  2d_fill_color bulle_color_R%, bulle_color_G%, bulle_color_B%
  if bulle_arrondi%=0
    2d_rectangle bulle_x%,bulle_y%,bulle_x%+bulle_w%-1,bulle_y%+bulle_h%-1
  else
    2d_circle bulle_x%+10,bulle_y%+10,10
    2d_circle bulle_x%+bulle_w%-1-10,bulle_y%+10,10
    2d_circle bulle_x%+10,bulle_y%+bulle_h%-1-10,10
    2d_circle bulle_x%+bulle_w%-1-10,bulle_y%+bulle_h% -1-10,10
    2d_rectangle bulle_x%+10,bulle_y%,bulle_x%+bulle_w% -1-10,bulle_y%+bulle_h%-1
    2d_rectangle bulle_x%,bulle_y%+10,bulle_x%+bulle_w% -1,bulle_y%+bulle_h%-1-10
    2d_pen_color bulle_color_R%, bulle_color_G%, bulle_color_B%
    2d_line bulle_x%+10,bulle_y%+1,bulle_x%+10,bulle_y%+bulle_h%-1-1
    2d_line bulle_x%+bulle_w%-1-10-1,bulle_y%+1,bulle_x%+bulle_w%-1-10-1,bulle_y%+bulle_h%-1-1
    2d_line bulle_x%+1,bulle_y%+10,bulle_x%+bulle_w%-1-1,bulle_y%+10
    2d_line bulle_x%+1,bulle_y%+bulle_h%-1-10-1,bulle_x%+bulle_w%-1-1,bulle_y%+bulle_h%-10-1-1
    2d_pen_color 0,0,0
  end_if

  select bulle_pointe_org%
    case 1 : ' ligne du haut
      k% = bulle_w%/7
      x1% = bulle_x% + 3*k%
      y1% = bulle_y%
      x2% = x1% + k%
      y2% = y1%
      fx% = x1% + k%/2
      fy% = y1% - 2
      xd% = 0
      yd% = 0
    case 2 : ' ligne à droite
      k% = bulle_h%/5
      x1% = bulle_x% + bulle_w% - 1
      y1% = bulle_y% + 2*k%
      x2% = x1%
      y2% = y1% + k%
      fx% = x1% + 2
      fy% = y1% + k%/2
      xd% = 0 - 1
      yd% = 0
    case 3 : ' ligne du bas
      k% = bulle_w%/7
      x1% = bulle_x% + 3*k%
      y1% = bulle_y% + bulle_h% - 1
      x2% = x1% + k%
      y2% = y1%
      fx% = x1% + k%/2
      fy% = y1% + 2
      xd% = 0
      yd% = 0 - 1
    case 4 : ' ligne à gauche
      k% = bulle_h%/5
      x1% = bulle_x%
      y1% = bulle_y% + 2*k%
      x2% = x1%
      y2% = y1% + k%
      fx% = x1% - 2
      fy% = y1% + k%/2
      xd% = 0
      yd% = 0
  end_select
 
  2d_poly_from x1%,y1%
  2d_poly_to bulle_pointe_x%,bulle_pointe_y%
  2d_poly_to x2%+xd%,y2%+yd%
  2d_flood fx%,fy%, bulle_color_R%, bulle_color_G%, bulle_color_B%
  2d_pen_color bulle_color_R%, bulle_color_G%, bulle_color_B%
  2d_line x1%+xd%,y1%+yd%, x2%+xd%,y2%+yd%
  2d_pen_color 0,0,0
  2d_target_is 0
  return
 
enregistrer:
  if object_exists(no_bulle%)=0
    message "Il n'y a rien à enregistrer."
    return
  end_if
  f$ = file_name$(no_save%)
  if f$="_" then return
  if right$(f$,4)<>".bmp" then f$ = f$ + ".bmp"
  file_save no_bulle%,f$
  return

et voici le résultat avec coins arrondis:
Outil de création d'info-bulles A116
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Outil de création d'info-bulles Empty
MessageSujet: Re: Outil de création d'info-bulles   Outil de création d'info-bulles EmptySam 23 Juin 2012 - 14:36

Et un autre outil, à utiliser avec les info-bulles ou pas.

Comment déterminer l'endroit EXACT où insérer la vignette dans une grande image ? Il faut calculer les pixels, mais ce n'est pas simple.

J'ai fait un outil qui permet ceci:
- charger une grande image qui sera affichée avec stretch_on (BMP ou JPG)
- charger à-côté jusqu'à 3 vignettes (BMP ou JPG)
- coller une ou plusieurs vignettes dans la grande image
- sauvegarder l'image résultante dans un fichier (BMP)

Les vignettes sont elles-mêmes des images qui peuvent être fabriquées par mon outil InfoBulle, mais peuvent aussi provenir de toute autre source (clip-art télé-chargée, autre photo plus petite, ...)

Pour coller une vignette, on procède comme suit:
- clic gauche dans la vignette à un endroit précis
- clic gauche dans la grande image à l'endroit précis où l'on voudrait caler l'endroit de la vignette cliqué

Et, comme par magie, la vignette apparait, SANS son fond qui agit comme couleur transparente ! En fait, on prend la couleur du pixel du coin en bas à gauche de la vignette.

Pour ce faire, j'ai ajouté 4 nouvelles fonctions à PrintScreen.dll:
n% = dll_call0("GetPictureHeight")
n% = dll_call0("GetPictureWidth")
Ces deux fonctions retournent les dimensions REELLES de l'image chargée par LoadPicture
n% = dll_call0("GetClipboardPictureWidth")
n% = dll_call0("GetClipboardPictureHeight")
Ces deux fonctions retournent les dimensions REELLES de n'importe quelle image chargée dans le presse-papier, par exemple par CLIBOARD_COPY.

Et voici le source:

Code:
' incruster.bas
 
label labels : gosub labels
gosub constantes
gosub variables
gosub form0
gosub menu
gosub GUI
gosub initialisations

end

labels:
  label constantes, variables, form0, menu, GUI, initialisations
  label load_p0, load_p1, load_p2, load_p3, selpicx, load, clickpic
  label save_p0
  return
 
constantes:
  dim dll$ : dll$ = "PrintScreen.dll"
  dim rep$ : rep$ = "c:\DOCUME~1\klaus\MESDOC~1\MESPRO~2\INFOBU~1\"
  return

variables:
  dim no%, no1%, n%, f$, tcR%, tcG%, tcB%, x%, y%, xp%, yp%
  dim pic_w%, pic_h%, pic_x_w%, pic_x_h%
  dim no_pic%, no_vert%, no_hor%
  dim no_pic1%, no_pic2%, no_pic3%
  dim no_open%, no_save%
  dim sel_pic%, sel_pic_x%, sel_pic_y%
  return

form0:
  full_space 0
  caption 0,"Incruster des vignettes dans une image"
  return

menu:
  return

GUI:
  no% = no% + 1 : open_dialog no% : no_open% = no%
    filter no%,"Fichier image|*.jpg;*.bmp"
  no% = no% + 1 : save_dialog no% : no_save% = no%
    filter no%,"Fichier image|*.bmp"

  no% = no% + 1 : picture no% : no_pic% = no%
    top no%,40 : left no%,40 : on_click no%,clickpic
    width no%,900 : height no%,600 : stretch_on no%
  no% = no% + 1 : button no% : caption no%,"..."
    top no%,660 : left no%,40 : width no%,40 : on_click no%,load_p0
  no% = no% + 1 : button no% : caption no%,"Sauver"
    top no%,660 : left no%,100 : width no%,40 : on_click no%,save_p0

  no% = no% + 1 : picture no% : no_pic1% = no%
    top no%,40 : left no%,960 : on_click no%,selpicx
    width no%,200 : height no%,200 : stretch_on no%
    color no%,255,127,127
  no% = no% + 1 : picture no% : no_pic2% = no%
    top no%,250 : left no%,960 : on_click no%,selpicx
    width no%,200 : height no%,200 : stretch_on no%
    color no%,127,255,127
  no% = no% + 1 : picture no% : no_pic3% = no%
    top no%,460 : left no%,960 : on_click no%,selpicx
    width no%,200 : height no%,200 : stretch_on no%
    color no%,127,127,255

  no% = no% + 1 : button no% : caption no%,"..."
    top no%,40 : left no%,1170 : width no%,40 : on_click no%,load_p1
  no% = no% + 1 : button no% : caption no%,"..."
    top no%,250 : left no%,1170 : width no%,40 : on_click no%,load_p2
  no% = no% + 1 : button no% : caption no%,"..."
    top no%,460 : left no%,1170 : width no%,40 : on_click no%,load_p3

  return

initialisations:
  dll_on rep$+dll$
  return

load_p0:
  n% = no_pic%
  gosub load
  return

load_p1:
  n% = no_pic1%
  gosub load
  return

load_p2:
  n% = no_pic2%
  return

load_p3:
  n% = no_pic3%
  return
 
load:
  f$ = file_name$(no_open%)
  if f$<>"_" then file_load n%,f$
  return

save_p0:
  f$ = file_name$(no_save%)
  if f$="_" then return
  if lower$(right$(f$,4))<>".bmp" then f$ = f$ + ".bmp"
  file_save no_pic%,f$
  return
 
selpicx:
  sel_pic% = number_click
  clipboard_copy sel_pic%
  pic_x_w% = dll_call0("GetClipboardPictureWidth")
  pic_x_h% = dll_call0("GetClipboardPictureHeight")
  xp% = mouse_x_left_down(sel_pic%)*pic_x_w%/width(sel_pic%)
  yp% = mouse_y_left_down(sel_pic%)*pic_x_h%/height(sel_pic%)
  return
 
clickpic:
  tcR% = color_pixel_red(sel_pic%,0,height(sel_pic%)-1)
  tcG% = color_pixel_green(sel_pic%,0,height(sel_pic%)-1)
  tcB% = color_pixel_blue(sel_pic%,0,height(sel_pic%)-1)
  ' ici, incruster cette image
  clipboard_copy no_pic%
  n% = dll_call0("LoadPicture")
  pic_w% = dll_call0("GetPictureWidth")
  pic_h% = dll_call0("GetPictureHeight")
  clipboard_copy sel_pic%

  x% = mouse_x_left_down(no_pic%)*pic_w%/width(no_pic%) - xp%
  y% = mouse_y_left_down(no_pic%)*pic_h%/height(no_pic%) - yp%

  n% = dll_call5("ModifyPicture",x%,y%,tcR%,tcG%,tcB%)
  n% = dll_call0("SavePicture")
  clipboard_paste no_pic%
  return

Maintenant, on a une chaîne complète pour manipuler des images et faire des incrustations !

Attention: il faut reprendre PrintScreen.dll sur mon WebDav !

Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
papydall

papydall


Nombre de messages : 7017
Age : 74
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

Outil de création d'info-bulles Empty
MessageSujet: Re: Outil de création d'info-bulles   Outil de création d'info-bulles EmptySam 23 Juin 2012 - 19:45

Ça nous manque un dessinateur et un scénariste pour se lancer dans la bande dessinée !

Plus sérieusement, Klaus tu es génial !

king
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Jean Claude

Jean Claude


Nombre de messages : 5950
Age : 70
Localisation : 83 Var
Date d'inscription : 07/05/2009

Outil de création d'info-bulles Empty
MessageSujet: Re: Outil de création d'info-bulles   Outil de création d'info-bulles EmptySam 23 Juin 2012 - 21:01

Papydall a écrit:
Plus sérieusement, Klaus tu es génial !

Ben... whoai, c'est bien çà qui m'enerve, si seulement un jour j'arrivais à ce niveau... Very Happy

Mais on ne change rien, c'est bien ainsi (sauf à ce que je m'améliore Razz ) et on en profite...

A+
Revenir en haut Aller en bas
papydall

papydall


Nombre de messages : 7017
Age : 74
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

Outil de création d'info-bulles Empty
MessageSujet: Re: Outil de création d'info-bulles   Outil de création d'info-bulles EmptySam 23 Juin 2012 - 22:11

Jean Claude, il n’y a pas de quoi t’énerver.

Toi-même tu as dit que tu t’améliores : donc aujourd’hui, tu es mieux qu’hier
et demain tu seras meilleur qu’aujourd’hui.
Et puis qui a dit que tu n’es pas génial aussi ?
Moi-même, on m’a qualifié, autrefois de génial
et je pense qu’aujourd’hui encore, je le suis …dans mon domaine.

Je te salue génialement

sunny sunny sunny

Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Outil de création d'info-bulles Empty
MessageSujet: Re: Outil de création d'info-bulles   Outil de création d'info-bulles EmptySam 23 Juin 2012 - 23:12

Merci pour les fleurs ! Ce qui m'importe, c'est que l'un ou l'autre parmi vous trouvera ces outils utiles.

D'ailleurs, il manquait un léger détail: le texte des info-bulles ! Voilà qui est corrigé: Le programme a un bouton en haut libellé "Texte". Un clic sur ce bouton affiche une form dans laquelle on peut saisir un texte dans un mémo et régler ses attributs (police, taille, gras, ...) Les tailles sont limitées entre 8 et 16.

Le tout premier champ est un CHECK qui permet d'activer ou désactiver l'édition du texte. Par défaut, c'est désactivé. Et si le programme détecte une anomalie, il va le signaler et décocher automatiquement cette case.

Cette fenêtre montre 3 boutons:
"Abandon" sort de cette fenêtre en désactivant le texte à éditer.
"Montrer" applique les attributs choisis au mémo, pour visualiser l'effet.
"Valider" ne fait rien si la case d'activation est décochée. Mais si elle est cochée, ce bouton vérifie d'abord si le texte peut réellement être imprimé dans l'info-bulle. On vérifie si le texte tient à l'intérieur, aussi bien en hauteur qu'en largeur. Et seulement si c'est bon, le programme signale que le texte sera imprimé. Sinon, il donne un message d'erreur clair et désactive le texte. La form se ferme alors et on continue dans le programme principal.

Le bouton "Dessiner" montre alors l'info-bulle AVEC le texte, qui sera centré dans la bulle, verticalement et horizontalement. On peut reprendre le bouton "Texte" pour changer le texte ou ses attributs, puis valider. Il faut alors cliquer à nouveau sur "Dessiner" pour voir l'effet.

Voici le code:
Code:
' infobulle.bas

label labels : gosub labels
gosub constantes
gosub variables
gosub form0
gosub GUI

end

labels:
  label d_bulle, d_texte, constantes, variables, form0, GUI
  label chg_bulle, chg_fond, dessiner, enregistrer
  label texte, close_texte, texte_ok, texte_no, texte_show
  return

constantes:
  return
 
form0:
  full_space 0
  caption 0,"Générateur de bulles d'information"
  return

variables:
  dim bulle_x%, bulle_y%, bulle_w%, bulle_h%, bulle_arrondi%
  dim bulle_pointe_org%, bulle_pointe_x%, bulle_pointe_y%
  dim bulle_color_R%, bulle_color_G%, bulle_color_B%
  dim fond_color_R%, fond_color_G%, fond_color_B%

  dim k%, x1%, x2%, y1%, y2%, fx%, fy%, xd%, yd%, f$, n%

  dim no%, no1%, no_bulle%, no_picture_h%, no_picture_w%
  dim no_bulle_x%, no_bulle_y%, no_bulle_w%, no_bulle_h%
  dim no_pointe_x%, no_pointe_y%, no_bulle_arrondi%
  dim no_bulle_R%, no_bulle_G%, no_bulle_B%, no_apercu%
  dim no_fond_R%, no_fond_G%, no_fond_B%, no_fond%
  dim no_pointe_org%, no_save%, no_transp_color%
  dim no_texte%, texte_ok%, no_essai%
  dim no_texte_go%, no_texte_memo%, no_texte_font%, no_texte_size%
  dim no_texte_bold%, no_texte_ital%, no_texte_under%
  dim texte_h%, texte_w%

  return
 
GUI:
  no% = no% + 1 : save_dialog no% : no_save% = no%
    filter no%,"Fichier image|*.bmp"
  no% = no% + 1 : picture no% : hide no% : no_essai% = no%
 
  no% = no% + 1 : container no% : no1% = no% : caption no%,"Taille de l'image"
    top no%,10 : left no%,10 : width no%,160 : height no%,100
  no% = no% + 1 : alpha no% : parent no%,no1%
    top no%,20 : left no%,10 : caption no%,"Hauteur:"
  no% = no% + 1 : edit no% : parent no%,no1% : no_picture_h% = no%
    top no%,20 : left no%,80 : width no%,30 : text no%,"400"
  no% = no% + 1 : alpha no% : parent no%,no1%
    top no%,50 : left no%,10 : caption no%,"Largeur:"
  no% = no% + 1 : edit no% : parent no%,no1% : no_picture_w% = no%
    top no%,50 : left no%,80 : width no%,30 : text no%,"500"
   
  no% = no% + 1 : container no% : no1% = no% : caption no%,"Info-Bulle"
    top no%,120 : left no%,10 : width no%,160 : height no%,610
  no% = no% + 1 : alpha no% : parent no%,no1%
    top no%,20 : left no%,10 : caption no%,"Origine X:"
  no% = no% + 1 : edit no% : parent no%,no1% : no_bulle_x% = no%
    top no%,20 : left no%,80 : width no%,30 : text no%,"150"
  no% = no% + 1 : alpha no% : parent no%,no1%
    top no%,50 : left no%,10 : caption no%,"Origine Y:"
  no% = no% + 1 : edit no% : parent no%,no1% : no_bulle_y% = no%
    top no%,50 : left no%,80 : width no%,30 : text no%,"150"
  no% = no% + 1 : alpha no% : parent no%,no1%
    top no%,90 : left no%,10 : caption no%,"Hauteur:"
  no% = no% + 1 : edit no% : parent no%,no1% : no_bulle_h% = no%
    top no%,90 : left no%,80 : width no%,30 : text no%,"100"
  no% = no% + 1 : alpha no% : parent no%,no1%
    top no%,120 : left no%,10 : caption no%,"Largeur:"
  no% = no% + 1 : edit no% : parent no%,no1% : no_bulle_w% = no%
    top no%,120 : left no%,80 : width no%,30 : text no%,"200"
  no% = no% + 1 : alpha no% : parent no%,no1%
    top no%,160 : left no%,10 : caption no%,"Dép. flèche"
  no% = no% + 1 : combo no% : parent no%,no1% : no_pointe_org% = no%
    top no%,160 : left no%,80 : width no%,70
    item_add no%,"Haut" : item_add no%,"Droite"
    item_add no%,"Bas" : item_add no%,"Gauche"
    text no%,"Bas"
  no% = no% + 1 : alpha no% : parent no%,no1%
    top no%,190 : left no%,10 : caption no%,"Pointe X:"
  no% = no% + 1 : edit no% : parent no%,no1% : no_pointe_x% = no%
    top no%,190 : left no%,80 : width no%,30 : text no%,"150"
  no% = no% + 1 : alpha no% : parent no%,no1%
    top no%,220 : left no%,10 : caption no%,"Pointe Y:"
  no% = no% + 1 : edit no% : parent no%,no1% : no_pointe_Y% = no%
    top no%,220 : left no%,80 : width no%,30 : text no%,"365"
  no% = no% + 1 : alpha no% : parent no%,no1%
    top no%,260 : left no%,10 : caption no%,"Bulle:"
  no% = no% + 1 : alpha no% : parent no%,no1%
    top no%,280 : left no%,10 : caption no%,"R"
  no% = no% + 1 : alpha no% : parent no%,no1%
    top no%,280 : left no%,30 : caption no%,"G"
  no% = no% + 1 : alpha no% : parent no%,no1%
    top no%,280 : left no%,50 : caption no%,"B"
  no% = no% + 1 : alpha no% : parent no%,no1%
    top no%,260 : left no%,90 : caption no%,"Fond:"
  no% = no% + 1 : alpha no% : parent no%,no1%
    top no%,280 : left no%,90 : caption no%,"R"
  no% = no% + 1 : alpha no% : parent no%,no1%
    top no%,280 : left no%,110 : caption no%,"G"
  no% = no% + 1 : alpha no% : parent no%,no1%
    top no%,280 : left no%,130 : caption no%,"B"
   
  no% = no% + 1 : scroll_bar no% : parent no%,no1% : no_bulle_R% = no%
    top no%,300 : left no%,10 : vertical no% : min no%,0 : max no%,255
    position no%,255 : on_change no%,chg_bulle
  no% = no% + 1 : scroll_bar no% : parent no%,no1% : no_bulle_G% = no%
    top no%,300 : left no%,30 : vertical no% : min no%,0 : max no%,255
    position no%,255 : on_change no%,chg_bulle
  no% = no% + 1 : scroll_bar no% : parent no%,no1% : no_bulle_B% = no%
    top no%,300 : left no%,50 : vertical no% : min no%,0 : max no%,255
    position no%,0 : on_change no%,chg_bulle
  no% = no% + 1 : picture no% : parent no%,no1% : no_apercu% = no%
    top no%,430 : left no%,10 : width no%,60 : height no%,50
    color no%,position(no_bulle_R%),position(no_bulle_G%),position(no_bulle_B%)

  no% = no% + 1 : scroll_bar no% : parent no%,no1% : no_fond_R% = no%
    top no%,300 : left no%,90 : vertical no% : min no%,0 : max no%,255
    position no%,127 : on_change no%,chg_fond
  no% = no% + 1 : scroll_bar no% : parent no%,no1% : no_fond_G% = no%
    top no%,300 : left no%,110 : vertical no% : min no%,0 : max no%,255
    position no%,127 : on_change no%,chg_fond
  no% = no% + 1 : scroll_bar no% : parent no%,no1% : no_fond_B% = no%
    top no%,300 : left no%,130 : vertical no% : min no%,0 : max no%,255
    position no%,127 : on_change no%,chg_fond
  no% = no% + 1 : picture no% : parent no%,no1% : no_fond% = no%
    top no%,430 : left no%,90 : width no%,60 : height no%,50
    color no%,position(no_fond_R%),position(no_fond_G%),position(no_fond_B%)
   
  no% = no% + 1 : check no% : parent no%,no1% : no_bulle_arrondi% = no%
    top no%,500 : left no%,10 : caption no%,"Arrondi"

  no% = no% + 1 : button no% : parent no%,no1% : on_click no%,dessiner
    top no%,530 : left no%,10 : caption no%,"Dessiner"
  no% = no% + 1 : button no% : parent no%,no1% : on_click no%,enregistrer
    top no%,570 : left no%,10 : caption no%,"Enregistrer"

  no% = no% + 1 : button no% : caption no%,"Texte"
    top no%,10 : left no%,200 : on_click no%,texte
  no% = no% + 1 : alpha no% : no_transp_color% = no%
    top no%,10 : left no%,320
    f$ =            str$(position(no_fond_R%))
    f$ = f$ + "," + str$(position(no_fond_G%))
    f$ = f$ + "," + str$(position(no_fond_B%))
    caption no%,"Couleur fond: "+f$
   
  no% = no% + 1 : form no% : hide no% : no1% = no% : no_texte% = no%
    top no%,100 : left no%,300
    width no%,300 : height no%,400 : on_close no%,close_texte
    caption no%,"Texte à placer dans l'Info-Bulle"
  no% = no% + 1 : check no% : parent no%,no1% : width no%,250 : no_texte_go% = no%
    top no%,10 : left no%,10 : caption no%,"Placer le texte dans la bulle"
  no% = no% + 1 : memo no% : parent no%,no1%  : no_texte_memo% = no%
    top no%,40 : left no%,10 : width no%,250 : height no%,200
  no% = no% + 1 : combo no% : parent no%,no1%  : no_texte_font% = no%
    top no%,250 : left no%,10 : font_names_load no%
    text no%,"Courier"
  no% = no% + 1 : combo no% : parent no%,no1% : no_texte_size% = no%
    top no%,250 : left no%,160 : width no%,40
    item_add no%,"8" : item_add no%,"10" : item_add no%,"12" : item_add no%,"16"
    text no%,"10"
  no% = no% + 1 : check no% : parent no%,no1%  : no_texte_bold% = no%
    top no%,280 : left no%,10 : caption no%,"Gras"
  no% = no% + 1 : check no% : parent no%,no1% : no_texte_ital% = no%
    top no%,280 : left no%,80 : caption no%,"Italique"
  no% = no% + 1 : check no% : parent no%,no1% : no_texte_under% = no%
    top no%,280 : left no%,160 : caption no%,"Souligné"
  no% = no% + 1 : button no% : parent no%,no1%: on_click no%,texte_no
    top no%,320 : left no%,10 : caption no%,"Abandon"
  no% = no% + 1 : button no% : parent no%,no1% : on_click no%,texte_show
    top no%,320 : left no%,100 : caption no%,"Montrer"
  no% = no% + 1 : button no% : parent no%,no1% : on_click no%,texte_ok
    top no%,320 : left no%,190 : caption no%,"Valider"

  no% = no% + 1 : no_bulle% = no%
 
  return
 
chg_bulle:
  color no_apercu%,position(no_bulle_R%),position(no_bulle_G%),position(no_bulle_B%)
  return
 
chg_fond:
  color no_fond%,position(no_fond_R%),position(no_fond_G%),position(no_fond_B%)
  f$ =            str$(position(no_fond_R%))
  f$ = f$ + "," + str$(position(no_fond_G%))
  f$ = f$ + "," + str$(position(no_fond_B%))
  caption no_transp_color%,"Couleur fond: "+f$
  return

dessiner:
  if object_exists(no_bulle%)=1 then delete no_bulle%
  picture no_bulle% : top no_bulle%,40
                      left no_bulle%,200
    width no_bulle%,val(text$(no_picture_w%))
    height no_bulle%,val(text$(no_picture_h%))

bulle_x% = val(text$(no_bulle_x%))
bulle_y% = val(text$(no_bulle_y%))
bulle_w% = val(text$(no_bulle_w%))
bulle_h% = val(text$(no_bulle_h%))
bulle_pointe_org% = item_index(no_pointe_org%)
if bulle_pointe_org%=0 then bulle_pointe_org% = 3
bulle_pointe_x% = val(text$(no_pointe_x%))
bulle_pointe_y% = val(text$(no_pointe_y%))
bulle_color_R% = position(no_bulle_R%)
bulle_color_G% = position(no_bulle_G%)
bulle_color_B% = position(no_bulle_B%)
fond_color_R% = position(no_fond_R%)
fond_color_G% = position(no_fond_G%)
fond_color_B% = position(no_fond_B%)
bulle_arrondi% = checked(no_bulle_arrondi%)

gosub d_bulle
gosub d_texte

end

d_bulle:
  color no_bulle%,fond_color_R%,fond_color_G%,fond_color_B%
  2d_target_is no_bulle%
  2d_pen_width 1
  2d_fill_color bulle_color_R%, bulle_color_G%, bulle_color_B%
  if bulle_arrondi%=0
    2d_rectangle bulle_x%,bulle_y%,bulle_x%+bulle_w%-1,bulle_y%+bulle_h%-1
  else
    2d_circle bulle_x%+10,bulle_y%+10,10
    2d_circle bulle_x%+bulle_w%-1-10,bulle_y%+10,10
    2d_circle bulle_x%+10,bulle_y%+bulle_h%-1-10,10
    2d_circle bulle_x%+bulle_w%-1-10,bulle_y%+bulle_h% -1-10,10
    2d_rectangle bulle_x%+10,bulle_y%,bulle_x%+bulle_w% -1-10,bulle_y%+bulle_h%-1
    2d_rectangle bulle_x%,bulle_y%+10,bulle_x%+bulle_w% -1,bulle_y%+bulle_h%-1-10
    2d_pen_color bulle_color_R%, bulle_color_G%, bulle_color_B%
    2d_line bulle_x%+10,bulle_y%+1,bulle_x%+10,bulle_y%+bulle_h%-1-1
    2d_line bulle_x%+bulle_w%-1-10-1,bulle_y%+1,bulle_x%+bulle_w%-1-10-1,bulle_y%+bulle_h%-1-1
    2d_line bulle_x%+1,bulle_y%+10,bulle_x%+bulle_w%-1-1,bulle_y%+10
    2d_line bulle_x%+1,bulle_y%+bulle_h%-1-10-1,bulle_x%+bulle_w%-1-1,bulle_y%+bulle_h%-10-1-1
    2d_pen_color 0,0,0
  end_if

  select bulle_pointe_org%
    case 1 : ' ligne du haut
      k% = bulle_w%/7
      x1% = bulle_x% + 3*k%
      y1% = bulle_y%
      x2% = x1% + k%
      y2% = y1%
      fx% = x1% + k%/2
      fy% = y1% - 2
      xd% = 0
      yd% = 0
    case 2 : ' ligne à droite
      k% = bulle_h%/5
      x1% = bulle_x% + bulle_w% - 1
      y1% = bulle_y% + 2*k%
      x2% = x1%
      y2% = y1% + k%
      fx% = x1% + 2
      fy% = y1% + k%/2
      xd% = 0 - 1
      yd% = 0
    case 3 : ' ligne du bas
      k% = bulle_w%/7
      x1% = bulle_x% + 3*k%
      y1% = bulle_y% + bulle_h% - 1
      x2% = x1% + k%
      y2% = y1%
      fx% = x1% + k%/2
      fy% = y1% + 2
      xd% = 0
      yd% = 0 - 1
    case 4 : ' ligne à gauche
      k% = bulle_h%/5
      x1% = bulle_x%
      y1% = bulle_y% + 2*k%
      x2% = x1%
      y2% = y1% + k%
      fx% = x1% - 2
      fy% = y1% + k%/2
      xd% = 0
      yd% = 0
  end_select
 
  2d_poly_from x1%,y1%
  2d_poly_to bulle_pointe_x%,bulle_pointe_y%
  2d_poly_to x2%+xd%,y2%+yd%
  2d_flood fx%,fy%, bulle_color_R%, bulle_color_G%, bulle_color_B%
  2d_pen_color bulle_color_R%, bulle_color_G%, bulle_color_B%
  2d_line x1%+xd%,y1%+yd%, x2%+xd%,y2%+yd%
  2d_pen_color bulle_color_R%, bulle_color_G%, bulle_color_B%
  2d_point 0,val(text$(no_picture_h%))
  2d_pen_color 0,0,0
  2d_target_is 0
  return
 
d_texte:
  if checked(no_texte_go%)=0 then return
  print_target_is no_bulle%
  font_name no_bulle%,text$(no_texte_font%)
  font_size no_bulle%,val(text$(no_texte_size%))
  if checked(no_texte_bold%)=1
    font_bold no_bulle%
  else
    font_bold_off no_bulle%
  end_if
  if checked(no_texte_ital%)=1
    font_italic no_bulle%
  else
    font_italic_off no_bulle%
  end_if
  if checked(no_texte_under%)=1
    font_underline no_bulle%
  else
    font_underline_off no_bulle%
  end_if
  y1% = (val(text$(no_bulle_h%))-texte_h%)/2 + val(text$(no_bulle_y%))
  x1% = (val(text$(no_bulle_w%))-texte_w%)/2 + val(text$(no_bulle_x%))
  print_locate x1%,y1%
  for k%=1 to count(no_texte_memo%)
    print item_read$(no_texte_memo%,k%)
    print_x_locate x1%
  next k%
  print_target_is 0
  return
 
enregistrer:
  if object_exists(no_bulle%)=0
    message "Il n'y a rien à enregistrer."
    return
  end_if
  f$ = file_name$(no_save%)
  if f$="_" then return
  if right$(f$,4)<>".bmp" then f$ = f$ + ".bmp"
  file_save no_bulle%,f$
  return

texte:
  inactive 0
  texte_ok% = 0
  show no_texte%
  return
 
close_texte:
  if texte_ok%=1 then gosub texte_ok
  active 0
  to_foreground 0
  return
 
texte_ok:
  if checked(no_texte_go%)=0
    hide no_texte%
    active 0
    to_foreground 0
    return
  end_if
  if count(no_texte_memo%)=0
    message "Il n'y a pas de texte à placer."
    mark_off no_texte_go%
    hide no_texte%
    active 0
    to_foreground 0
    return
  end_if
  font_name no_essai%,text$(no_texte_font%)
  font_size no_essai%,val(text$(no_texte_size%))
  if checked(no_texte_bold%)=1
    font_bold no_essai%
  else
    font_bold_off no_essai%
  end_if
  if checked(no_texte_ital%)=1
    font_italic no_essai%
  else
    font_italic_off no_essai%
  end_if
  if checked(no_texte_under%)=1
    font_underline no_essai%
  else
    font_underline_off no_essai%
  end_if
  texte_h% = 0
  texte_w% = 0
  for k%=1 to count(no_texte_memo%)
    f$ = item_read$(no_texte_memo%,k%)
    n% = text_height(f$,no_essai%)
    if n%>texte_h% then texte_h% = n%
    n% = text_width(f$,no_essai%)
    if n%>texte_w% then texte_w% = n%
  next k%
  texte_h% = (texte_h%+2)*count(no_texte_memo%) - 2
  if texte_h%>val(text$(no_bulle_h%))-4
    message "Le texte est trop haut."
    mark_off no_texte_go%
    return
  end_if
  if texte_w%>val(text$(no_bulle_w%))-4
    message "Le texte est trop large."
    mark_off no_texte_go%
    return
  end_if
  message "Le texte sera intégré."
  hide no_texte%
  active 0
  to_foreground 0
  return
 
texte_no:
  hide no_texte%
  mark_off no_texte_go%
  active 0
  to_foreground 0
  return
 
texte_show:
  font_name no_texte_memo%,text$(no_texte_font%)
  font_size no_texte_memo%,val(text$(no_texte_size%))
  if checked(no_texte_bold%)=1
    font_bold no_texte_memo%
  else
    font_bold_off no_texte_memo%
  end_if
  if checked(no_texte_ital%)=1
    font_italic no_texte_memo%
  else
    font_italic_off no_texte_memo%
  end_if
  if checked(no_texte_under%)=1
    font_underline no_texte_memo%
  else
    font_underline_off no_texte_memo%
  end_if
  return

D'ailleurs, voici l'application d'une info-bulle avec texte à la capture d'écran du programme InfoBulle:
Outil de création d'info-bulles Captur10

Joli, non ?

EDIT

J'ai intégré une modif qui permet de reconnaitre la couleur de fond comme couleur de transparence, MEME si le pixel en bas à gauche est touché par le dessin.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Contenu sponsorisé





Outil de création d'info-bulles Empty
MessageSujet: Re: Outil de création d'info-bulles   Outil de création d'info-bulles Empty

Revenir en haut Aller en bas
 
Outil de création d'info-bulles
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Eclater les bulles
» Un outil de blockage de pop-up et pop-under
» Annoter une image avec des bulles de texte
» Outil de surveillance de l'activité WEB
» Outil de distribution protégée de logiciels

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos sources, vos utilitaires à partager-
Sauter vers: