Aide - Recherche - Membres - Calendrier
Version complète : Couleurs sur T5
Les Forums de PalmAttitude.org > GENERAL PalmOS > Développement sous PalmOS > Développement HB++
PM_PalM
Bonjour à tous

Je souhaite mettre des couleurs de backcolor sur des controles, jusque là, pas de problème coté programme, mais voilà, aucun résultat à l'affichage huh.gif

si je fait :
CODE
ucGauge1.GaugeBackColor = hbColorBlack

OK

si je fait
CODE
Label1.BackColor = hbColorBlack


Marche pô quelcon.gif

Le backcolor reste celui du palm par défault.

Z'avez une 'tite idée? icon_cry.gif

Merci d'avance
Schtunks
A quel moment values-tu cette propriété ? Le controle ne doit-il pas être rafraichît ?
poolpy
BackColor n'a pas la même signification qu'en VB : il définit la couleur utilisée pour le dessin dans le contrôle, avec rectangle, ou line par exemple. Pas la couleur de fond du contrôle lui-même.

HB++ utilise les contrôles natifs de PalmOS, et PalmOS ne permet pas de changer individuellement la couleur des contrôles (tu peux la changer de façon globale avec UIColor) - ça évite que chaque application ait sa propre interface bigarrée. Ca permet aussi de respecter les choix de thème faits par l'utilisateur dans les préférences !

Si vraiment tu veux avoir un contrôle avec des couleurs différentes, il faut te faire ton UserControl qui remplace le contrôle natif de PalmOS.
PM_PalM
Merci pour ces infos (et oui, je raisonnai VB)

Et bien, je me contenterai de la couleur par défaut. anim_wink.gif

Merci encore

@ +
quagliozzi
CITATION(PM_PalM @ 16/04/2007 à 14:12 ) *
Merci pour ces infos (et oui, je raisonnai VB)

Et bien, je me contenterai de la couleur par défaut. anim_wink.gif

Merci encore

@ +


Salut PM_PalM,

Si tu n'a besoin que d'un control au comportement similaire à un Label, comme te l'a suggérer Poolpy, tu peux te faire un tout petit UC. Je t'assure qu'il ne sera pas difficile à développer et plus flexible que le Label standard.
Tu peux déjà jeter un coup d'oeil au ucShape d'HB. Un bon début, simple et efficace pour commencer.

Si tu veux un exemple, je peux t'envoyer un petit ucLabel tout simple... ça te donnera peut-être des idées.

un UC est simplement un Gadget qui ne fait rien (donc un control générique ne sachant pas comment se dessiner). Utilise simplement dans un premier temps la méthode PAINT pour écrire ton texte avec un TextOut. Tu n'es pas obligé d'utiliser une technique de doublebuffering. De plus, en récupérant la couleur de remplissage d'origine de la form (avec UIColor(hbUIFormFill) ) tu peux respecter la couleur d'arrière plan et changer la couleur du text.

A+
Eric.
PM_PalM
Bonjour

Sympa ta réponse. wink.gif

Je veux bien un exemple, si tu as anim_wink.gif

Merci d'avance
quagliozzi
CITATION(PM_PalM @ 28/04/2007 à 08:26 ) *
Bonjour

Sympa ta réponse. wink.gif

Je veux bien un exemple, si tu as anim_wink.gif

Merci d'avance


Ok, je prépare tout ça.

A+
Eric.
quagliozzi
Salut,

Alors voilà un petit bout de code, simple mais efficace:

Tu crées un nouveau User Control, je l'ai appelé ucSimpleLabel, libre à toi de trouver le nom qui correspond le mieux à ce que tu souhaites.

Dans le fichier source de l'UC:

CODE
'=========================================
' UC Simple Label
'=========================================

Private lBackColor As Long
Private sCaption As String


Private Sub UserControl_Load()
  lBackColor=UIColor(hbUIFormFill)
  sCaption="Label"
  Move Left,Top,Width,Me.FontMetrics.LineHeight
  BackColor=lBackColor
End Sub


Public Property Let Caption(szCaption As String)
Rectangle 0,0,Width-1,Height-1,hbRectBorderNone+hbRectFillSolid
sCaption=szCaption
TextOut 0,0,szCaption,hbTextAlignLeft,Width
End Property


Public Property Let CaptionColor(color As long)
TextColor=color
Rectangle 0,0,Width-1,Height-1,hbRectBorderNone+hbRectFillSolid
TextOut 0,0,sCaption,hbTextAlignLeft,Width
End Property


Private Sub UserControl_Paint()
Rectangle 0,0,Width-1,Height-1,hbRectBorderNone+hbRectFillSolid
TextOut 0,0,sCaption,hbTextAlignLeft,Width
End Sub


Puis, tu ajoutes ton UC à la FORM de ton choix.
Voici un exemple de code, dans la FORM en question qui change la couleur du texte quand tu cliques (PenDown puis PenUp) dessus:

CODE
Private Sub Form_Load()
ucSimpleLabel1.CaptionColor=hbColorRed
ucSimpleLabel1.Caption="Simple Label User Control"
End Sub


Private Sub ucSimpleLabel1_PenUp(ByVal x As Integer, ByVal y As Integer)
ucSimpleLabel1.CaptionColor=Color(Rnd*256,Rnd*256,Rnd*256)
End Sub


Remarques:

1/ Le UC est redimensionné automatiquement à la hauteur de la police de caractères par défaut (il faut rajouter un petit bout de code pour le faire dynamiquement avec FontMetrics.LineHeight lors du changement de police).

2/ La variable lBackColor n'est pas utile si tu affectes BackColor une seule fois (donc, tu peux la supprimer éventuellement dans cet exemple).

3/ La largeur n'est en rien modifiée par la chaine de caractères CAPTION. Je limite (bien que le cliping soit déjà intégré, à toi de voir) simplement l'écriture à la largeur de l'UC.
Tu peux modifier dynamiquement la largeur de l'UC avec Fontmetrics.TextWidth associé à MOVE si tu le souhaites... mais attention, si tu en as pas mal dans ta fenêtre, risque de scintillement.

4/ Tu peux par la suite ajouter tout ce que tu veux, encadrement, couleur de fond, etc...

A+

Eric.
PM_PalM
Super icon_biggrin.gif

Je teste ça dès demain. wink.gif

Merci, c'est super sympa
PM_PalM
siffle.gif J'ai un petit problème, comment fait-on un contrôle personalisé?

Je n'y suis pas arrivé huh.gif

Pascal
snark
Click-droit dans le panneau "Project", situé en haut à droite de l'IDE de HB++, là où tu as la liste des Forms, des Modules, des Classes, ...
Dans le menu contextuel, il y a une entrée "Add User Control".
PM_PalM
Merci, c'est OK anim_wink.gif
quagliozzi
CITATION(PM_PalM @ 03/05/2007 à 09:47 ) *
siffle.gif J'ai un petit problème, comment fait-on un contrôle personalisé?

Je n'y suis pas arrivé huh.gif

Pascal


Bonjour Pascal,

C'est très simple, dans l'onglet "Project" qui se trouve à droite (tu peux y voir la liste de l'ensemble des éléments que contient le projet : forms, classes, etc...) tu fait "Click Droit(pour menu contextuel)" et dans le menu surgissant tu sélectionne "Add User Control".

Là, un nouveau User Control est créé (en fait un ficher text de description, qui contiendra également le code source). Il faut le renomer: par exemple ucSimpleLabel, et le sauvegarder (Menu Principal > Enregistrer).

Ensuite, tu "double" cliques sur ce composant (toujours dans l'onglet "Project"), ce qui a pour effet d'ouvrir le fichier source relatif ici au User Control créé.

Puis, tu fais un copié-collé du code source que j'ai posté.

Pour placer ton uc sur la "form", sélectionne simplement cet UC dans l'onglet gauche "ToolBox", et place le par simple click gauche).

A+
Eric.
PM_PalM
Merci, c'est super. Ca marche cool.gif

Je peux t'embêter encore un p'tit peu? siffle.gif

J'aimerai changer le taille de la police (ou la passer en "LED") J'ai bien essayé des trucs mais j'ai juste réussi à planter l'affichage du Palm huh.gif

Alors j'ai supprimé le code et c'est réparti.

En fait, dans mon uc, j'ai fait une
CODE
Public Property Font(fFont as HBfont)

End Property


Je peux dans ma form faire

CODE
MonUC.Font = HBfontLED (ou un truc comme ça)


mais nada

Tu sais comment faire ?

Pascal
snark
Au pif, sans tester, je dirais un truc du genre:

CODE
Public Property Let Font(newFont as HBfont)
DrawFont=newFont
Rectangle 0,0,Width-1,Height-1,hbRectBorderNone+hbRectFillSolid
TextOut 0,0,sCaption,hbTextAlignLeft,Width
End Property
PM_PalM
Ca marche

Vous êtes des choux anim_wink.gif

Merci à tous

@+

Pascal
quagliozzi
Salut Gilles et Pascal,

Juste une petite remarque sur la proposition de Gilles et la mienne:

Si tu changes la police de caractères dynamiquement, comme je te l'avais expliqué, ton UC risque de ne plus avoir la bonne hauteur. Il faut donc redimensionner dynamiquement ton uc, ce qui donne avec le code de Gilles:

CODE
Public Property Let Font(newFont as HBfont)
DrawFont=newFont
Move Left,Top,Width,Me.FontMetrics.LineHeight
Rectangle 0,0,Width-1,Height-1,hbRectBorderNone+hbRectFillSolid
TextOut 0,0,sCaption,hbTextAlignLeft,Width
End Property


Mais, de mémoire, lorsqu'on redimensionne un control, un événement PAINT est "empilé" après le RESIZE.

Tu peux donc essayé en enlevant les deux dernière lignes, ce qui donne:

CODE
Public Property Let Font(newFont as HBfont)
DrawFont=newFont
Move Left,Top,Width,Me.FontMetrics.LineHeight
End Property


Puisque l'événement PAINT est géré par un réaffichage intégral:

CODE
Private Sub UserControl_Paint()
Rectangle 0,0,Width-1,Height-1,hbRectBorderNone+hbRectFillSolid
TextOut 0,0,sCaption,hbTextAlignLeft,Width
End Sub



Bon, te voilà prêt à affronter les UC maintenant anim_wink.gif , et avec HB++ il y a vraiment de quoi s'amuser et faire des choses passionnantes et étonnantes!

A+
Eric.
PM_PalM
C'est vraiment un plaisir de poser des questions sur ce forum. cool.gif

Ca marche super bien.

Je vous remerci encore pour votre aide et les bouts de code, ça m'a rendu un grand service.

J'espère pouvoir être en mesure de rendre la pareil un de ces jours. (va faloir que je m'améliore un peu huh.gif )

Pascal
quagliozzi
CITATION(PM_PalM @ 04/05/2007 à 11:43 ) *
C'est vraiment un plaisir de poser des questions sur ce forum. cool.gif


Salut Pascal,

Tout le plaisir est pour nous icon_biggrin.gif
Et de plus, c'est toujours l'occasion de tester de nouvelles choses ou de refaire le point sur d'anciennes!

A+
Eric.
PM_PalM
Voici le résultat de votre aide anim_wink.gif

Télécharger>Compteur> Télécharger Compteur type concours pour Palm

@+

PS: Si vous connaissez un moyen de porter la même chose pour PockerPC
Payalba
Il faudrait que tu changes ton creatorID. Tu as gardé celui par défaut de HB++
PM_PalM
Merci pour l'info mais, ... quelle incidence? huh.gif

Pascal
D2P
CITATION(PM_PalM @ 09/05/2007 à 07:10 ) *
Merci pour l'info mais, ... quelle incidence? huh.gif

Pascal

Si plusieurs applications sont installées sur un même appareil avec des CreatorID identiques, il risque d'y avoir des conflits anim_wink.gif

Exemple : tu installes deux applications sur un palm avec le même CreatorID. Quand tu vas en désinstaller une, l'autre le sera aussi car les fichiers portant ce même identifiant seront considérés comme rattachés à cette application.

Il est donc plus que souhaitable que chaque application est son CreatorID, qui doit être obtenu.. heu... je n'ai qu'une application pour l'instant et je ne sais plus comment j'ai récupéré le CreatorID anim_sorry.gif siffle.gif icon_bla.gif
PM_PalM
Merci

J'avais déjà volontairement créé 2 applics avec le même ID car les bases de données étaient communes, et oui, lorsque j'en supprimai une, l'autre perdait ses données icon_confused.gif

Celle ci n'ayant pas de PDB, je n'y ai pas porté attention mais tu as raison, dans le cas où je souhaite faire une autre applic du même type, je risque quelque problèmes.

Merci pour ta perspicacité anim_wink.gif , je vais corriger ça

Pascal
D2P
CITATION(PM_PalM @ 09/05/2007 à 08:49 ) *
Celle ci n'ayant pas de PDB, je n'y ai pas porté attention mais tu as raison, dans le cas où je souhaite faire une autre applic du même type, je risque quelque problèmes.

Et c'est vrai aussi si tu penses diffuser ton application car si plusieurs personnes en font de même, on aura que des applis avec un CreatorID "ZZZZ" anim_wink.gif Remarque, ça ira plus vite pour nettoyer le palm anim_grin.gif
Schtunks
CITATION(D2P @ 09/05/2007 à 09:21 ) *
Il est donc plus que souhaitable que chaque application est son CreatorID, qui doit être obtenu.. heu... je n'ai qu'une application pour l'instant et je ne sais plus comment j'ai récupéré le CreatorID anim_sorry.gif siffle.gif icon_bla.gif


En théorie, tu peux choisir celui que tu veux mais pour éviter de faire le même choix qu'un autre développeur, il est préférable de l'enregistrer sur le site "Développeur" d'Access icon_arrow.gif ICI
D2P
CITATION(Schtunks @ 09/05/2007 à 12:01 ) *
En théorie, tu peux choisir celui que tu veux mais pour éviter de faire le même choix qu'un autre développeur, il est préférable de l'enregistrer sur le site "Développeur" d'Access icon_arrow.gif ICI

Merci, je ne savais plus où je l'avais fait anim_grin.gif
Payalba
Ce n'est pas préférable de l'enregistrer c'est quasi obligatoire.

Dans HB++ il y a un bouton à coté de la case creatorDI qui te conduit directement à la bonne page sleep.gif
PM_PalM
siffle.gif Ca y est, j'ai inscris mes applics

Merci pour l'info.

@ bientôt anim_wink.gif
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.