Page 3 sur 7

Publié : mar. 26/sept./2006 18:35
par Anonyme2
C'est l'adresse du buffer contenant respectivement 100 et 50 caractères et je pense que le 0 de fin de la chaîne est inclus dans le total

Le @ devant la chaîne devrait faire l'affaire

@"Tahoma"

Publié : mar. 26/sept./2006 21:13
par Flype
gros flemmard que je suis mais gentil quand meme j'avais commencé à faire des tutoriaux pour cette lib. j'en ai une bonne quinzaine déjà avec difficulté croissante. mais je les avais pas encore diffusées.

je vais te les envoyer...

Publié : mer. 27/sept./2006 6:58
par Good07
Merci à Denis et à Flype :D

Pour Denis, ton système fonctionne, mais c'est ensuite à la ligne suivante que j'ai le même message d'erreur.

Code : Tout sélectionner

nRetVal = RMC_CreateChart(nParentHndl.l, nCtrlId.l, tChart\nLeft.l,tChart\nTop.l,tChart\nWidth.l,tChart\nHeight.l,tChart\nBackColor.l,tChart\nCtrlStyle.l, nExportOnly.l, tChart\sBgImage, tChart\sFontName) 
Je crois que je vais attendre les tutoriaux de Flype pour continuer, et voir où je fais une erreur...

Merci à tous les deux.

André.

Publié : mer. 27/sept./2006 11:22
par Anonyme2
Good07

J'ai regardé hier la déclaration de la structure et ce n'est pas une chaîne (si je me souviens bien) sens texte suivi d'un 0 de fin de chaîne mais un buffer (c'est à dire une zone mémoire ou sont stokés des valeurs correspondant au code ascci des caractères avec une limite fixée dans la déclaration.

La encore il faut mettre le @ devant car on passe l'adresse du buffer à la fonction et ce n'est pas une chaîne au sens des commandes PB.

Essaye ça

Code : Tout sélectionner

nRetVal = RMC_CreateChart(nParentHndl.l, nCtrlId.l, tChart\nLeft.l,tChart\nTop.l,tChart\nWidth.l,tChart\nHeight.l,tChart\nBackColor.l,tChart\nCtrlStyle.l, nExportOnly.l, @tChart\sBgImage, @tChart\sFontName)
Par contre je n'ai pas encore travaillé avec mais ça viendra. Je pense que le dernier caractère de la chaîne doit être égal à 0 pour indiquer la fin de chaîne car apparement on ne passe pas le nombre réel des caractères du buffer.

En mettant @"TAHOMA" par exemple, il n'y a pas besoin de rajouter un 0 de fin de chaîne.

Publié : mer. 27/sept./2006 19:28
par Flype
@good007

j'ai pas finit mais si tu a besoin voici
tout de suite l'archive dans son état actuel :

RMChart_PB40_TEST.zip


et sinon moi j'en suis très content de cette dll.
je l'utilise au taf, ca va, ca se programme bien
et avec un peu d'habitude ca roule tout seul.

Publié : mer. 27/sept./2006 20:09
par Anonyme2
Comme d'habitude, je n'arrive pas à télécharger ce fichier, ni avec FireFox ni avec IE, taille 0 octets.

Je tenterais demain.

Publié : mer. 27/sept./2006 22:19
par Good07
Merci Flype et Denis

Pour moi, pas de problème de téléchargement, mais toujours des problèmes d'utilisation.
En fait, je peux omettre les deux derniers paramettres, en les remplaçant par des chaines vides puisque la police par défaut sera automatiquement la "Tahoma", et l'image de font n'est pas nécessaire. Linconvénient c'est que j'ai maintenant invalid mémory access. :mad:
Bon, je suis tétu je continue mes investigations.

A+

André

Publié : jeu. 28/sept./2006 7:08
par Flype
chaque chaine de caractère doit etre définie avec 'PokeS()' comme çà :

Code : Tout sélectionner

XIncludeFile "..\rmchart.pbi" 

tChart.tRMC_CHART 
tChart\nLeft        = 10  
tChart\nTop         = 10  
tChart\nWidth       = 600 
tChart\nHeight      = 400 
tChart\nBackColor   = #ColorDodgerBlue 
tChart\nCtrlStyle   = #RMC_CTRLSTYLEFLATSHADOW 
PokeS(@tChart\sFontName, "Tahoma", 50)

tRegion.tRMC_Region
tRegion\nLeft       =  5
tRegion\nTop        =  5
tRegion\nWidth      = -5
tRegion\nHeight     = -5
tRegion\nShowBorder = #True
PokeS(@tRegion\sFooter, "*** user footnote ***", 200)

tCaption.tRMC_Caption
tCaption\nBackColor = #ColorBlack
tCaption\nTextColor = #ColorWhite
tCaption\nFontSize  = 10
tCaption\nIsBold    = #True
PokeS(@tCaption\sText, "*** user caption ***", 200)


If OpenWindow(0, 0, 0, 800, 600, "Test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget) 
  
  If CreateGadgetList(WindowID(0)) 
    ; gadgets
  EndIf
  
  If RMC_INIT() 
    If RMC_CreateChartI(WindowID(0), 1, tChart) = #RMC_NO_ERROR
      RMC_AddRegionI(1, tRegion)
      RMC_AddCaptionI(1, 1, tCaption)
      RMC_Draw(1)
    EndIf
  EndIf
  
  Repeat 
  Until WaitWindowEvent() = #PB_Event_CloseWindow 
  
EndIf 


End

Publié : jeu. 28/sept./2006 7:09
par Flype
par ailleurs beaucoup de fonction ont 2 modes d'utilisation :

par ex :
RMC_CreateChart() : plein de parametres - pas de structure à initialiser
RMC_CreateChartI() : 3 params uniquement car on va transmettre une structure

Publié : jeu. 28/sept./2006 7:46
par Good07
Super ! Flype.
ça fonctionne nickel :D
Mes connaissances ne m'auraient jamais permis de trouver ça au sujet des chaines de caractère.
Je t'avoue que j'étais prét à refaire le Wrapper, mais en utilisant la fonction:
Import...EndImport que j'utilise pour la Dll "swedll32.dll" et qui marche super.
Bon maitenant que j'ai la trame, je vais voir ce que je peux faire pour avoir un beau graphique... :wink:
En fait j'avais utilisé rmcdesigner et sauvegardé l'exemple en VB et en power basic, et je suis parti de ces deux sources pour les transformer en listing PureBasic. Mais apparemment je ne suis pas assez doué pour ce genre d'exercice. :(
Bon il me reste encore du travail pour faire le reste...
Merci pour ton aide qui m'est à chaque fois très précieuse et félicitation pour ton travail qui mérite vraiment qu'on s'y intéresse.

A+

André.

Publié : jeu. 28/sept./2006 8:24
par Flype
Good07 a écrit :En fait j'avais utilisé rmcdesigner et sauvegardé l'exemple en VB et en power basic, et je suis parti de ces deux sources pour les transformer en listing PureBasic. Mais apparemment je ne suis pas assez doué pour ce genre d'exercice. :(
pourtant c'est comme çà que j'ai appris - ca se fait très bien.
mais c'est vrai que faut connaitre un minimum VB.

en tout cas j'essaierai de t'aider autant que possible.


NB: pour utiliser Import/EndImport il faudrait pour çà le fichier rmchart.lib qui n'est malheureusement pas fournit dans l'archive officielle.
dommage, sinon je l'aurais aussi implémenter comme çà...


allez bon courage.

Publié : jeu. 28/sept./2006 9:43
par Good07
Flype à écrit:
NB: pour utiliser Import/EndImport il faudrait pour çà le fichier rmchart.lib qui n'est malheureusement pas fournit dans l'archive officielle.
C'est vrai, je n'avais pas vérifié si il y était avant de penser à cette méthode.
Bon ça avance pas mal, j'ai compris les grandes lignes, mais je vais encore faire appel à ta science car je n'arrive pas à faire apparaitre les graphiques. Il ne s'affiche qu'une seule barre (et encore ...) sur le côté gauche alors que je veux en afficher 28. :(
Voici mon programme:

Code : Tout sélectionner

XIncludeFile "RMChart.pbi"

tChart.tRMC_CHART
tChart\nLeft        = 10 
tChart\nTop         = 10 
tChart\nWidth       = 600
tChart\nHeight      = 400
tChart\nBackColor   = #ColorDodgerBlue
tChart\nCtrlStyle   = #RMC_CTRLSTYLEFLATSHADOW
PokeS(@tChart\sFontName, "Tahoma", 50)

tCaption.tRMC_Caption
tCaption\nBackColor = #ColorDodgerBlue
tCaption\nTextColor = #ColorWhite
tCaption\nFontSize  = 10
tCaption\nIsBold    = #True
PokeS(@tCaption\sText, "Relevé du mois de Septembre", 200)

tRegion.tRMC_Region
tRegion\nLeft       =  10
tRegion\nTop        =  15
tRegion\nWidth      = -12
tRegion\nHeight     = -15
tRegion\nShowBorder = #True
PokeS(@tRegion\sFooter, "Année 2006", 200)

tGrid.tRMC_GRID
tGrid\nGridBackColor = 0
tGrid\nAsGradient    = #False
tGrid\nBicolor       = #RMC_BICOLOR_NONE
tGrid\nLeft          = 0
tGrid\nTop           = 0
tGrid\nWidth         = 0
tGrid\nHeight        = 0

tDataAxis.tRMC_DATAAXIS
tDataAxis\nAlignment      = #RMC_DATAAXISLEFT
tDataAxis\nMinValue       = 0
tDataAxis\nMaxValue       = 50
tDataAxis\nTickCount      = 11
tDataAxis\nFontsize       = 8
tDataAxis\nTextColor      = #ColorRed
tDataAxis\nLineColor      = 0
tDataAxis\nLineStyle      = #RMC_LINESTYLESOLID
tDataAxis\nDecimalDigits  = 0
PokeS(@tDataAxis\sUnit, "+",16)
PokeS(@tDataAxis\sText, "    Température",100)

tLabelAxis.tRMC_LABELAXIS
tLabelAxis\nCount         = 1
tLabelAxis\nTickCount     = 28
tLabelAxis\nAlignment     = #RMC_LABELAXISBOTTOM
tLabelAxis\nFontsize      = 8
tLabelAxis\nTextColor     = #ColorRed
tLabelAxis\nTextAlignment = #RMC_TEXTCENTER
tLabelAxis\nLineColor     = #ColorRed
tLabelAxis\nLineStyle     = #RMC_LINESTYLESOLID
PokeS(@tLabelAxis\sText,"",100)
 
tBarSeries.tRMC_BARSERIES
tBarSeries\nType             = #RMC_BARSINGLE 
tBarSeries\nStyle            = #RMC_BAR_3D
tBarSeries\nIsLucent         = #False
tBarSeries\nColor            = #ColorLightGoldenrodYellow
tBarSeries\nIsHorizontal     = #False
tBarSeries\nWhichDataAxis    = 1
tBarSeries\nValueLabelOn     = #RMC_VLABEL_NONE
tBarSeries\nPointsPerColumn  = 1
tBarSeries\nHatchMode        = #RMC_HATCHBRUSH_OFF

Dim aData.d(30)
For n=0 To 30
  aData(n)=Random(30)+1
Next n


If OpenWindow(0, 0, 0, 800, 600, "Test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget)
 
  If CreateGadgetList(WindowID(0))
    ; gadgets
  EndIf
 
  If RMC_INIT()
    If RMC_CreateChartI(WindowID(0), 1, tChart) = #RMC_NO_ERROR
      RMC_AddRegionI(1, tRegion)
      RMC_AddCaptionI(1, 1, tCaption)
      RMC_AddGridI(1, 1, tGrid)
      RMC_AddDataAxisI(1, 1, tDataAxis)
      RMC_AddLabelAxisI(1, 1, "", tLabelAxis)
      RMC_AddBarSeriesI(1, 1, @aData.d(0), 28, tBarSeries)
      RMC_SetWatermark(#RMC_USERWM,#RMC_USERWMCOLOR,#RMC_USERWMLUCENT,#RMC_USERWMALIGN,#RMC_USERFONTSIZE)
      RMC_Draw(1)
    EndIf
  EndIf
 
  Repeat
  Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Faut-il une boucle pour afficher chaque valeur contenues dans le tableau aData :?:
Je cherche...Je cherche mais ne trouve point :(
Rectification, je viens de trouver. :D
J'avais oublié de définir LABEL AXIS
ça marche nickel !
Il manque l'écriture sur l'axe des x pour numéroter les jours mais ça ne doit pas être très compliqué.

Je posterai plus tard un listing plus commenté pour aider celui qui débute. :D

A+

André

Publié : jeu. 28/sept./2006 10:34
par Progi1984
Trés bon boulot, ca sera surement utile un jour mais pas pour l'instant !

Sinon le tutorial 6 ne fonctionne pas

est ce que cela a été dur de traduire du PowerBasic ?

Publié : jeu. 28/sept./2006 10:57
par Good07
Bonjour Progi1984

Progi1984 a écrit:
est ce que cela a été dur de traduire du PowerBasic ?
Aussi dur que le Visual Basic quand on ne connait pas trop la syntaxe du langage... :D Comme moi.
J'avoue que le VB semble plus compréhensible.
Je viens de rééditer mon post précedent, le graphique fontionne maintenant nickel et en plus c'est assez simple à mettre en oeuvre quand on a compris les bases, mais ça c'est grâce à Flype.
Tout seul je n'y serai jamais arrivé.

avec un peu de travail on va pouvoir faire de très beaux graphiques très professionnels. 8O

Publié : jeu. 28/sept./2006 13:19
par Flype
pour avoir un rendu pro, oui c'est plutot bien.
avant je faisais mes graphiques avec la lib PDF qui est très bien aussi
mais il avait fallu que je me fasse un 'moteur' de graphique.

là j'ai tout ce qu'il me faut, regardez par ex (échantillon réel utilisé en production ) :
Image



ps:
franchement çà été très facile de convertir depuis powerbasic ou vb.
mais bon ca fait 4 ans que je programme en purebasic alors des codes j'en ai converti à la pelle à une époque (pour comprendre la prog win32).