[RAVE] Permettre à l'utilisateur de modifier l'etat [Résolu]

cs_nitrique 346 Messages postés jeudi 1 mai 2003Date d'inscription 4 avril 2011 Dernière intervention - 12 juil. 2006 à 10:51 - Dernière réponse : cs_jfs59 184 Messages postés mardi 29 avril 2003Date d'inscription 2 février 2010 Dernière intervention
- 17 juil. 2006 à 12:51
Bonjour à tous,


Je génere des états contenant un code barre, du texte, une image, ...Assez complet, quoi.
Mais j'aimerais que l'utilisateur puisse ajouter/supprimer/modifier l'emplacement ou la taille de chaque element.


J'ai bien trouvé ça qui répond presque à mon besoin:
[url]http://www.delphifr.com/code.aspx?ID=36497/url
Mais l'interface XML est trop compliquée pour un utilisateur de base.
L'idéal serait qu'il ait l'interface que j'aie en quelque sorte...
Comment faire, est ce qu'il faut qu'il ait acheté :( et installé :( rave reports ?
Si oui, est ce qu'il existe une solution paliative ?


Merci d'avance.

[;)] David, à VERSAILLES
Afficher la suite 

Votre réponse

10 réponses

Meilleure réponse
cs_jfs59 184 Messages postés mardi 29 avril 2003Date d'inscription 2 février 2010 Dernière intervention - 17 juil. 2006 à 12:51
3
Merci
- L'utilisateur crée et déplace des composants sur un tImage gràce à une interface qu'il faut conçevoir.

j'en suis pas encore la .. mais ce serait idéal

- Le tImage crée un XML correspondant à l'emplacement et aux propriétés de ses composants.

J'ai essayé avec le rave preview mais pas moyen d'avir les coordonnés curseur et quand il est dans le scroll box j'ai plus non plus les coordonnées au niveau du scroll dans la zone rave ...
passer par un Timage semble etre une bonne idée a laquelle j'ai pensé .. mais y a du boulot ...
il faut creer un editeur complet (j'ai deja fait dans un autre projet) rave avec tout les composants et en laissant accessible que les propriétes necessaires...

- Le XML est envoyé à un état rave report qui regénere les composants et propose l'aperçu.

Ouai c'est surtout toi dans ta procedure qui fait le boulot !! (voir plus haut) maintenant il doit etre possible de 'copier ' le format rave pour recreer un fichier rav .. j'ai essayé pendant 10 minutes ... c'est un boulot de fou rien que pour decoder le format !!

Cordialement jfs.

Tout est en tout et réciproquement ...

Merci cs_jfs59 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de cs_jfs59
cs_jfs59 184 Messages postés mardi 29 avril 2003Date d'inscription 2 février 2010 Dernière intervention - 16 juil. 2006 à 13:56
0
Merci
Il est possible de créer une interface utilisateur pour le xml
comme mon prog

http://diva2440.free.fr/setup.exe

le code install est jfs59

pas finis mais on voit déja pointer une utilisation possible ...
aller sur configuration

on peut creer une page d'étiquettes et y mettre un peu ce qu'on veut comme on veut avec des restriction pour pas faire n'importe quoi ! en effet l'utilisation de rave designer et pass donnée
fonction de mise a jour des variables et tout le toutim !

Cordialement jfs.

Tout est en tout et réciproquement ...
Commenter la réponse de cs_jfs59
cs_jfs59 184 Messages postés mardi 29 avril 2003Date d'inscription 2 février 2010 Dernière intervention - 16 juil. 2006 à 14:06
0
Merci
PS:
le programme est destiné a l'education nationale (gratuit) pour sensibiliser les élèves (des section BAC pilotage de systemes et CAp conduite de systémes) a la tracabilité et aux codes barres ! la création d'étiquette et personalisable et on peut en imprimer une ou plusieurs suivant le cas !
la relecture et la traduction des codes et automatique ou manuelle !

le projet est en cours et demande encore beaucoup de travail ...

ps2: je n'ai pas testé l'interface série et usb du scan faute de matériel ! je suis a la recherche de scanner d'occase gratieusement offert ! qu'importe le type (mais qui fonctionnent) ma section de lycée n'est pas bien riche et faut faire avec des bouts de ficelle récupérés ! j'attend les heureux donateurs (le plaisir de donner et plus grand que celui de recevoir) qui peuvent me contacter par mp.

on peut réver .. non ??? ...

Cordialement jfs.

Tout est en tout et réciproquement ...
Commenter la réponse de cs_jfs59
cs_jfs59 184 Messages postés mardi 29 avril 2003Date d'inscription 2 février 2010 Dernière intervention - 16 juil. 2006 à 14:08
0
Merci
PS3 : y a pas moyen de rééditer les messages pourris de fotes d'ortografes ....

Cordialement jfs.

Tout est en tout et réciproquement ...
Commenter la réponse de cs_jfs59
cs_nitrique 346 Messages postés jeudi 1 mai 2003Date d'inscription 4 avril 2011 Dernière intervention - 17 juil. 2006 à 09:26
0
Merci
Bonjour jfs59,

Impossible d'executer le prog, il me dit que certaines propriétés de barcode1 n'existent pas.
De plus, je ne vois pas le rapport avec rave reports... Quelque chose m'echappe.

David, à VERSAILLES
Commenter la réponse de cs_nitrique
cs_jfs59 184 Messages postés mardi 29 avril 2003Date d'inscription 2 février 2010 Dernière intervention - 17 juil. 2006 à 12:13
0
Merci
Impossible d'executer le prog, il me dit que certaines propriétés de barcode1 n'existent pas.

Comprend pas pourquoi je l'ai installer sur plus de 50 pc différents ... jamais de probleme
recharge le sur le site et réinstalle
il est possible de désinstaller en lançant unins000.exe dans le dossier d'install

De plus, je ne vois pas le rapport avec rave reports... Quelque chose m'echappe.

On parle bien d'utiliser des composant rave report sur une feuille .. en permettant aux utilisateurs de les placer comme ils veulent ??
par contre les composant et la feuille sont créés dynamiquement ... c'est la necessité de modifier la feuille qui l'oblige !

en effet j'ai essayé dans un premier temps de créer ma rave avec rave designer et ensuite de modifier en temps reel la position la taille et les textes et code barre ! c'est la galere !

evidemment avec la création dynamique le travail de programmation de l'interface et assez lourd ! mais je suis arrivé a un stade de développement qui permet d'aller vite car il ne reste que des bricoles a modifier.

Cordialement jfs.

Tout est en tout et réciproquement ...
Commenter la réponse de cs_jfs59
cs_jfs59 184 Messages postés mardi 29 avril 2003Date d'inscription 2 février 2010 Dernière intervention - 17 juil. 2006 à 12:16
0
Merci
un extrait de l'affichage qui demande a etre optimisé nettoyé ...






with EtiqXML.ChildNodes.Nodes['Page'].ChildNodes.Nodes['Format'].ChildNodes do

    begin
      Page.Name := Nodes['Reference'].text;
      Page.Height := StrToFloat(Nodes['Hauteur'].text) / Fact;
      Page.Width := StrToFloat(Nodes['Largeur'].text) / Fact;
      Page.MargeLeft := StrToFloat(Nodes['MargeGauche'].text) / Fact;
      Page.MargeRight := StrToFloat(Nodes['MargeDroite'].text) / Fact;
      Page.MargeTop := StrToFloat(Nodes['MargeHaute'].text) / Fact;
      Page.MargeBottom := StrToFloat(Nodes['MargeBasse'].text) / Fact;
      Page.Ligne := StrToInt(Nodes['Ligne'].text);
      Page.Colonne := StrToInt(Nodes['Colonne'].text);
      Page.EcartHorizontal := StrToFloat(Nodes['EcartHorizontal'].text) / Fact;
      Page.EcartVertical := StrToFloat(Nodes['EcartVertical'].text) / Fact;
      Page.HauteurEtiquette := StrToFloat(Nodes['HauteurEtiquette'].text) / Fact;
      Page.LargeurEtiquette := StrToFloat(Nodes['LargeurEtiquette'].text) / Fact;
      Page.EtiquetteVRadius := StrToFloat(Nodes['EtiquetteVerticalRadius'].text) / Fact;
      Page.EtiquetteHRadius := StrToFloat(Nodes['EtiquetteHorizontalRadius'].text) /Fact;
      DecalH := Page.EcartHorizontal + Page.LargeurEtiquette; DecalV := Page.EcartVertical + Page.HauteurEtiquette;
    end;
  with RvProject1 do
    begin
      New;
      RvProject1.ProjMan.Units := unMM;
      Fact := RvProject1.ProjMan.UnitsFactor;
      //caption :=  floattostr(RvProject1.ProjMan.UnitsFactor);
      try

        MyPage := RvProject1.ProjMan.FindRaveComponent('Report1.Page1', nil) as TRavePage;

         // Trace marge
        if form4.tracemarge.Checked then
          begin
            MyRec1 := MyPage.CreateChild(TRaveRectangle, 'Marge') as TRaveRectangle;
            MyRec1.Top := Page.MargeTop;
            MyRec1.Left := Page.MargeLeft;
            MyRec1.Height := Page.Height - (Page.MargeTop + Page.MargeBottom);
            MyRec1.Width := Page.Width - (Page.MargeLeft + Page.MargeRight);
            MyRec1.BorderStyle := psDashDot;
            MyRec1.FillStyle := FsClear;
          end;

        if form4.tracecontour.Checked then for y := 0 to Page.Ligne - 1 do for z := 0 to Page.Colonne - 1 do
              begin
                MyRec1 := MyPage.CreateChild(TRaveRectangle, 'Etq' + IntToStr(y) + IntToStr(z)) as TRaveRectangle;
                MyRec1.Top := Page.MargeTop + Page.EcartVertical * y + Page.HauteurEtiquette * y;
                MyRec1.Left := Page.MargeLeft + Page.EcartHorizontal * z + Page.LargeurEtiquette * z;
                MyRec1.Height := Page.HauteurEtiquette;
                MyRec1.Width := Page.LargeurEtiquette;
                MyRec1.HRadius := Page.EtiquetteHRadius;
                MyRec1.VRadius := Page.EtiquetteVRadius;
                MyRec1.BorderStyle := psDot;
                MyRec1.FillStyle := FsClear;
              end;

              // Affiche modele
        MyText := MyPage.CreateChild(TRaveText, 'Trace') as TRaveText;
        MyText.Top := 5 / Fact;
        MyText.Left := 70 / Fact;
        MyText.Height := 5 / Fact;
        MyText.Width := 5 /Fact;
        MyText.Text := '--  Etiquettes de traçabilité Tracert Version ' + LectureVersion + '  --';
        MyText := MyPage.CreateChild(TRaveText, 'Page') as TRaveText;
        MyText.Top := Page.Height - 10 / Fact;
        MyText.Left := 5 / Fact;
        MyText.Height := 5 / Fact;
        MyText.Width := 5 / Fact;
        MyText.Text := 'Modéle : ' + Page.Name;
        MyText := MyPage.CreateChild(TRaveText, 'Copyright') as TRaveText;
        MyText.Top := Page.Height - 10 / Fact;
        MyText.Left := 170 / Fact;
        MyText.Height := 5 / Fact;
        MyText.Width := 5 / Fact;
        MyText.Text := 'jfs59 2005-2006';

// lecture affichage RaveObject

        for y := 0 to Page.Ligne - 1 do for z := 0 to Page.Colonne - 1 do if form4.stringGrid1.Cells[z, y] = 'X' then
              if NbrComp > 0 then for x := 0 to NbrComp - 1 do
                  begin
                    with EtiqXML.ChildNodes.Nodes['Page'].ChildNodes.Nodes['Composants'].ChildNodes.Nodes[x].ChildNodes do
                      begin
                        NewCompEt.CompType := Nodes['Type'].text;
                        NewCompEt.CompName := Nodes['Name'].text;
                        NewCompEt.Comptop := (StrToFloat(Nodes['Top'].text)) / Fact + Page.MargeTop + DecalV * y;
                        NewCompEt.CompLeft := (StrToFloat(Nodes['Left'].text)) / Fact + Page.MargeLeft + DecalH * z;
                        NewCompEt.CompHeight := StrToFloat(Nodes['Height'].text) / Fact;
                        NewCompEt.CompWidth := StrToFloat(Nodes['Width'].text) / Fact;
                      end;
                    if not CreateRaveObject(NewCompEt, y * Page.Colonne + z + 1, EtiqXML, x, MyPage) then exit;
                  end;
      finally

        RvNDRWriter1.Stream := ReportStream;
        RvRenderPreview1.NDRStream := ReportStream;
        RvRenderPrinter1.NDRStream := ReportStream;
        RvProject1.Execute;
        RvRenderPreview1.Render;
      end;
    end;

Cordialement jfs.

Tout est en tout et réciproquement ...
Commenter la réponse de cs_jfs59
cs_jfs59 184 Messages postés mardi 29 avril 2003Date d'inscription 2 février 2010 Dernière intervention - 17 juil. 2006 à 12:21
0
Merci
un extrait de la création des objets rave appelé par
CreateRaveObject(NewCompEt, y * Page.Colonne + z + 1, EtiqXML, x, MyPage)




if RaveObject.CompType = 'AutoVersion' then
                begin
                  with EtiqXML.ChildNodes.Nodes['Page'].ChildNodes.Nodes['Composants'].ChildNodes.Nodes[ObjectIndex].ChildNodes do
                    begin
                      RaveObject.CompText := Nodes['Text'].text;
                      RaveObject.CompRotation := StrToInt(Nodes['Rotation'].text);
                      RaveObject.CompFontSize := StrToInt(Nodes['Taille'].text);
                    end;
                  MyText := MyPage.CreateChild(TRaveText, RaveObject.CompName) as TRaveText;
                  MyText.Top := RaveObject.Comptop;
                  MyText.Left := RaveObject.CompLeft;
                  MyText.Height := RaveObject.CompHeight;
                  MyText.Width := RaveObject.CompWidth;
                  MyText.Rotation := RaveObject.CompRotation;
                  MyText.Text := 'Tracert V' + form1.LectureVersion;
                  MyText.Font.height := 6;
                end else

                if RaveObject.CompType = 'AutoBarCode' then
                  begin
                    with EtiqXML.ChildNodes.Nodes['Page'].ChildNodes.Nodes['Composants'].ChildNodes.Nodes[ObjectIndex].ChildNodes do
                      begin
                        RaveObject.CompRotation := StrToInt(Nodes['Rotation'].text);
                      end;
                    MyCode := MyPage.CreateChild(TRaveCode128BarCode, RaveObject.CompName) as TRaveCode128BarCode;
                    MyCode.Top := RaveObject.Comptop;
                    MyCode.Left := RaveObject.CompLeft;
                    MyCode.Height := RaveObject.CompHeight;
                    MyCode.Width := RaveObject.CompWidth;
                   // MyCode.BarCodeRotation := 0 as TBarCodeRotation ;
                    MyCode.Text := CalculOF;
                  end else
                  if RaveObject.CompType = 'BarCode128' then
                    begin
                      with EtiqXML.ChildNodes.Nodes['Page'].ChildNodes.Nodes['Composants'].ChildNodes.Nodes[ObjectIndex].ChildNodes do
                        begin
                          RaveObject.CompText := Nodes['Text'].text;
                          RaveObject.CompRotation := StrToInt(Nodes['Rotation'].text);
                        end;
                      MyCode := MyPage.CreateChild(TRaveCode128BarCode, RaveObject.CompName) as TRaveCode128BarCode;
                      MyCode.Top := RaveObject.Comptop;
                      MyCode.Left := RaveObject.CompLeft;
                      MyCode.Height := RaveObject.CompHeight;
                      MyCode.Width := RaveObject.CompWidth;
                     // MyCode.BarCodeRotation :=  RaveObject.CompRotation;
                      MyCode.Text := RaveObject.CompText;

Cordialement jfs.

Tout est en tout et réciproquement ...
Commenter la réponse de cs_jfs59
cs_jfs59 184 Messages postés mardi 29 avril 2003Date d'inscription 2 février 2010 Dernière intervention - 17 juil. 2006 à 12:26
0
Merci
avantage et inconvénient

l'utilisateur est encadré ! il ne peux pas créer n'importe quoi et ne peux modifier que les propriétés des objets qu'on autorise.

par contre il faut penser a tout ce dont il a besoin !

voila en espérant avoir éclairci ton approche et tes intérrogations car ce prog et dérivé directement du code déposé sur code source bien qu'étant un peu plus évolué ...

Cordialement jfs.

Tout est en tout et réciproquement ...
Commenter la réponse de cs_jfs59
cs_nitrique 346 Messages postés jeudi 1 mai 2003Date d'inscription 4 avril 2011 Dernière intervention - 17 juil. 2006 à 12:31
0
Merci
Cool,

En fait, je n'avais pas installé le (bon) composant...
J'avais bien un composant codebarre déjà installé mais ce n'etait pas le même.

Merci pour tes réponses et ta rapidité, je vait tester ça dès que possible.
En gros, je récapitule:
- L'utilisateur crée et déplace des composants sur un tImage gràce à une interface qu'il faut conçevoir.
- Le tImage crée un XML correspondant à l'emplacement et aux propriétés de ses composants.
- Le XML est envoyé à un état rave report qui regénere les composants et propose l'aperçu.

C'est bien ça ?

[;)] David, à VERSAILLES
Commenter la réponse de cs_nitrique

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.