Aide - Recherche - Membres - Calendrier
Version complète : field transparent
Les Forums de PalmAttitude.org > GENERAL PalmOS > Développement sous PalmOS > Développement HB++
hugonoof
Bonjours, une petites questions et un conseil:
-Peux t'on rendre un field tranparent (couleur de fond)?

Ensuite, dans mon forms j'ai un User control qui fait la moitié de l'ecran dans le quel je dessine avec mon stylet (un peu a la maniere du ucDraw du sample autograph), par dessus mon User control j'ai mis quelques fields:
Ainsi lorsque je dessine si je dessine là ou il y a un field forcement le penDown du UserControl perd la main et c'est le penDown du Field qui prend la main (donc je ne peux plus dessiner).
Voila, seulement j'aimerais en faite que lorsque je passe au dessus d'un des fields je continu a rentrer dans mon penDown de mon user control.
En gros j'aimerais que mon field apparaise, mais soit comme placé derriere mon UserControl (de plus j'ai une image de fond dans mon Usercontrol ce qui n'arrange rien et donc je ne peux mettre mon field derriere sans le faire disparaitre).

Voila si vous avez des suggestions, n'hesitez pas.

Joyeux noel et en avance bonne année.
jpa
Hello,

CITATION
-Peux t'on rendre un field tranparent (couleur de fond)?
,

Non, PalmOS, jusqu'a la version actuelle, ne le permet pas. Cependant tu peux modifier la couleur de fond du field (voir la propiete UIColors dans la doc).

CITATION
par dessus mon User control j'ai mis quelques fields


Hmmm..Mausaise idee, car comme tu l'as constate, les evenements seront recus par les dits controls plutot que ton user control....De plus, rien ne garantie que tes fields s'affiche bien au premier plan sur toutes les versions de PalmOS.

CITATION
En gros j'aimerais que mon field apparaise, mais soit comme placé derriere mon UserControl (de plus j'ai une image de fond dans mon Usercontrol ce qui n'arrange rien et donc je ne peux mettre mon field derriere sans le faire disparaitre).


Ton field sert-il a l'utilisateur pour saisir du texte? Si ce n'est pas le cas, je te conseille plutot de gerer l'affichage du texte directement depuis l'event Paint de ton usercontrol (en utilisant DrawText)...tu pourra gerer la transparence, les events, etc.... Je ne sais pas exactement ce que ton usercontrol doit faire, mais a mon avis, tu devrais changer ton approche globale par rapport a la structure de ton usercontrol. Si tu decris ce que dois faire ton usercontrol/soft (sans devoiler ts les secrets bien sur), nous pourrons plus facilement t'aider.

JPA
hugonoof
Oui mes fields servent a saisir des données, en faite, mon userControle note des actions (realiser avec le stylet) et les interpretes pour stoker des stats dans une base donnée.
En faite je fais un soft de prise de donnée (statistique) pour le volley-ball.
En gros mes fields me servent a saisir le numero des joueurs et les placer sur un terrain, et le user control (qui a le terrain en fond) sert a noter les deplacement du ballons, et en fonction d'où est le ballons et de où sont les joueurs il en tirent des statistiques assez précise.
Mais le probleme c'est qu'effectivement quand le ballons passe au dessu d'un joueur (donc un fields) mon userControl ne le trace plus.

Je veux bien changer d'approche mais je n'en vois pas d'autre pour l'instant.
Payalba
J'ai fait cela en vitesse : tout est gégé dans le user control.

C'est faire à l'arrache (méthode apprise sur PA).

C'est peut être un début pour toi.

code du uc UserCOntrol1

CODE
dim x(1 to 4) as Integer
dim y(1 to 4) as integer
dim vlettre(1 to 4) as String

dim b  as new Bitmap
dim b1  as new Bitmap

dim dessine as boolean
dim bouge as boolean
dim enCOurs as Integer

    dim x0 as Integer
    dim y0 as Integer

public property let lettre(byref l as String)
    
    if encours <>0 and l <> vlettre(encours) then
            vlettre(encours) = l
            repaint

    end if
    
End property



Private Sub UserControl_Load()
    x(1) = 0
    y(1) = 0

    vlettre(1) = "A"
    
    x(2) = width-13
    y(2) = 0
    vlettre(2) = "B"

    x(3) = 0
    y(3) = Height-13
    vlettre(3) = "C"

    x(4) = width-13
    y(4) = height-13
    vlettre(4) = "D"

    b.create width,height
    b1.create width,height

    dessine =  false
    bouge = false
    enCOurs = 0
            
End Sub




Private Sub UserControl_Paint()
    b.CopyArea 0,0,width,Height,b1,0,0
    
    dim i as Integer
    b.BackColor = Htmlcolor("black")
    b.TextColor = htmlColor("Red")
    b.DrawFont = hbFontStandard
    
    for i=1 to 4
      b.Forecolor = b.BackColor

        b.Rectangle x(i),y(i),x(i)+12,y(i)+12,hbRectBorderSolid+hbRectFillNone
        b.backcolor = htmlColor("white")

        b.TextOut x(i)+6,y(i)+6,vlettre(i),hbTextAlignCenter+hbTextAlignVCenter
      b.BackColor = Htmlcolor("black")
        if i=encours then

            b.Rectangle x(i),y(i),x(i)+3,y(i)+3,hbRectFillSolid+hbRectBorderSolid,2
        end if    
    next i
    
    copyarea 0,0,Width,Height,b,0,0,hbDrawPaint
End Sub


Private Sub UserControl_PenDown(ByVal xp As Integer, ByVal yp As Integer)
    encours = 0
    bouge = false
    dessine = false
    dim i as Integer
    if xp<0 or yp<0 or xp>Width or yp>Height then exit sub
        
    for i=1 to 4
        if x(i) < xp and y(i)  yp then
            encours = i
            bouge = true
        end if
    next i

    if not bouge then
        dessine = true
        x0 = xp
        y0 = yp
    end if
    repaint
End Sub


Private Sub UserControl_PenMove(ByVal xp As Integer, ByVal yp As Integer)
    if xp<0 or yp<0 or xp>Width or yp>Height then exit sub

    if bouge then
        x(encours) = xp
        y(encours) = yp
    end if
    
    if dessine then
        b.Forecolor = b.BackColor
        b1.Line x0,y0,xp,yp
        x0 = xp
        y0 = yp
    end if
    repaint
End Sub


Private Sub UserControl_PenUp(ByVal x As Integer, ByVal y As Integer)

    UserControl_PenMove x ,y
    bouge = false
    dessine = false
    
    
        
End Sub


Dans ma fenetre j'ai mis un user control : UserControl11, mettre un truc assez grand.

Et le code de la fenetre :

CODE
Private Sub Form_KeyPress(ByRef iChar As Integer, ByRef iKeyCode As Integer, ByRef eModifiers As HbKeyModifier, ByRef bForward As Boolean)
    if iChar >= asc("A") and iChar <= asc("I") or  iChar >= asc("a") and iChar <= asc("i") then
        UserControl11.lettre = chr(iChar)
    end if
End Sub


On peut changer la lettre du carré en ecrivant dans la zone graphitti.
On peut dessiner dans le user control
On peut déplacer les joueurs (carrés) en les sélectionnant et en faisant glisser le stylet.


Si ca t'aide, tant mieux.
hugonoof
je vais regarder cela, merci d'avance.
hugonoof
C'est effectivement pas trés loin de ce que je veux faire.
Moi lorsque je clique sur un joueur, j'ai un nouveau form qui me propose tout une liste de joueur, mais bon j'ai effectivement viré mes fields et j'ai géré mes joueurs avec des textout et des rectangle dans mon userControl, cependant j'ai toujours le meme probleme de background Color a savoir j'aimerais que le fond de mon TextOut soit transparent.
Payalba
Pour les textout transparent, c'est très facile à faire.

Je passe par une image dans laquel j'écris mon texte et pour laquelle je définis une couleur pour la transparence.



Si tu veux je regarde pour te donner un exemple.





Pour la form aec les noms, il suffirait le la gerer avec un tap dans un endroit particulier du rectangle.
hugonoof
Je veux bien un exemple, car j'ai essayer, mais ca me donne pas exactement ce que je voudrais, par contre ca ma donnée autre choses, donc je m'eclate en ce moment.
Depuis le debut j'ai un probleme avec mon image de fond qui apparait pixélisé, comme s'il ne trouvé pas la bonne density, j'ai essayé tout ce que j'ai pu lire sur le forum (changement de "screenmode", ...) mais rien a faire, et là hier en rajoutant cette ligne de code dans le paint de mon userControl:
bm.TransparencyColor = ...
Eh bien lorsque j'ouvre et ferme ma zone Graffiti eh bien mon image de fond apparait super bien.

Je ne dois pas tout comprendre, mais je m'amuse comme un fou a tester dans tous les sens.



CITATION(Payalba @ 04/01/2007 à 16:52 ) *
Pour la form aec les noms, il suffirait le la gerer avec un tap dans un endroit particulier du rectangle.


C'est ce que j'ai fais, et je desactive le tap quand je suis dans un certain mode (mode saisie stat) pour pouvoir dessiner tranquil sur mon UserControl.
Payalba
Voila le code du user avec le text en transparent

CODE
dim x(1 to 4) as Integer
dim y(1 to 4) as integer
dim vlettre(1 to 4) as String

dim b  as new Bitmap
dim b1  as new Bitmap
dim b2  as new Bitmap

dim dessine as boolean
dim bouge as boolean
dim enCOurs as Integer

dim x0 as Integer
dim y0 as Integer

dim dx0 as Integer
dim dy0 as Integer

public property let lettre(byref l as String)

    if encours <>0 and l <> vlettre(encours) then
            vlettre(encours) = l
            repaint

    end if

End property



Private Sub UserControl_Load()
    Clear
End Sub




Private Sub UserControl_Paint()
    b.CopyArea 0,0,width,Height,b1,0,0

    dim i as Integer

    for i=1 to 4
        b.Rectangle x(i),y(i),x(i)+12,y(i)+12,hbRectBorderSolid+hbRectFillNone
        'b.backcolor = htmlColor("white")
        'b.TextOut x(i)+6,y(i)+6,vlettre(i),hbTextAlignCenter+hbTextAlignVCenter
      'b.BackColor = Htmlcolor("black")

        b2.TransparencyColor = -1
        b2.rectangle 0,0,Width,Height,hbRectBorderSolid+hbRectFillSolid
        b2.textout 6,6,vlettre(i),hbTextAlignCenter+hbTextAlignVCenter
        b2.TransparencyColor = b2.backcolor
            
        b.CopyArea x(i),y(i),11,11,b2,0,0,hbDrawPaint

        if i=encours then
            b.Rectangle x(i)+1,y(i)+1,x(i)+11,y(i)+11,hbRectFillNone+hbRectBorderSolid,2
        end if
    next i

    copyarea 0,0,Width,Height,b,0,0,hbDrawPaint
End Sub


Private Sub UserControl_PenDown(ByVal xp As Integer, ByVal yp As Integer)
    encours = 0
    bouge = false
    dessine = false
    dim i as Integer

    if xp<0 or yp<0 or xp>Width or yp>Height then exit sub

    for i=1 to 4
        if x(i) < xp and y(i)  yp then
            encours = i
            bouge = true
          dx0 = x(encours) - xp
          dy0 = y(encours) - yp

        end if
    next i

    if not bouge then
        dessine = true

        x0 = xp
        y0 = yp
    end if
    repaint
End Sub


Private Sub UserControl_PenMove(ByVal xp As Integer, ByVal yp As Integer)

    if xp<0 or yp<0 or xp>Width or yp>Height then exit sub

    if bouge then

        x(encours) = xp+dx0
        y(encours) = yp+dy0
    end if

    if dessine then
        b1.Line x0,y0,xp,yp
        x0 = xp
        y0 = yp
    end if
    repaint
End Sub


Private Sub UserControl_PenUp(ByVal x As Integer, ByVal y As Integer)

    UserControl_PenMove x ,y
    bouge = false
    dessine = false

End Sub

Public Sub Clear()
    x(1) = 0
    y(1) = 0

    vlettre(1) = "A"

    x(2) = width-13
    y(2) = 0
    vlettre(2) = "B"

    x(3) = 0
    y(3) = Height-13
    vlettre(3) = "C"

    x(4) = width-13
    y(4) = height-13
    vlettre(4) = "D"

    dessine =  false
    bouge = false
    enCOurs = 0



    b.destroy
    b1.Destroy
    b2.Destroy

    b.create width,height
    b1.create width,height
    b2.Create 11,11
    
    b.BackColor = Htmlcolor("black")
    b.ForeColor = b.BackColor
    b.TextColor = htmlColor("Red")
    b.DrawFont = hbFontStandard

    b1.BackColor = Htmlcolor("black")
    b1.ForeColor = b1.BackColor

    b2.BackColor = Htmlcolor("white")
    b2.ForeColor = b2.BackColor
    b2.TextColor = Htmlcolor("red")
    
    
    repaint
End Sub

Private Sub UserControl_Unload()
    b.Destroy
    b1.Destroy
    b2.destroy
End Sub
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.
Invision Power Board © 2001-2008 Invision Power Services, Inc.