Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > Rave
Rave Forum d'entraide sur Rave Reports
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/03/2011, 17h06   #1
Membre du Club
 
Inscription : avril 2008
Messages : 129
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 129
Points : 41
Points : 41
Envoyer un message via Yahoo à damene
Par défaut Comment paramétrer une image dans Rave

Bonjour.

Je travaille avec Delphi7 et Rave5.

Je cherche à imprimer une image avec Rave.
Lorsque à la conception j'intégre l'image je peux imprimer l'image.

Mais lorsque je veux paraméter l'image à travers OpenPictureDialog, je me plante.

Dans l'état Rave j'ai intégré un DataText Composant pour le titre (TitreRecap) et un Bitmap Composant pout l'image.

Pour le paramètre Titre de l''Etat je sais le faire

Code :
    Forme.GCabGastro.SetParam('TitreRecap','Cliché Echographie');
peut-on m'indiquer la ligne de code à écrire car avec le code

Code :
    Forme.GCabGastro.SetParam('Echo',MFichier);
je n'arrive pas à imprimer l'image

Voici mon code complet :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
procedure TForme.Button1Click(Sender: TObject);
var MFichier : String;
begin
  if OpenPictureDialog.execute then   // Choix de l'image à imprimer
  MFichier:=ExtractFilepath(OpenPictureDialog.Filename)+
            ExtractFileName(OpenPictureDialog.Filename);

  GCabGastro.SetParam('TitreRecap','Cliché Echographie'); // parametre Titre (DataText Composant)
  GCabGastro.SetParam('Echo',MFichier);      // parametre image (Bitmap Composant)

  GCabGastro.SelectReport('ImageEchoEndo',True);
  GCabGastro.ExecuteReport('ImageEchoEndo');
  GCabGastro.close;
end;
Merci
damene est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2011, 19h38   #2
Modérateur
 
Avatar de SergioMaster
 
Serge Girard
Développeur informatique
Inscription : janvier 2007
Messages : 3 612
Détails du profil
Informations personnelles :
Nom : Serge Girard
Âge : 55
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : janvier 2007
Messages : 3 612
Points : 4 509
Points : 4 509
Passer un bitmap via un paramètre n'est pas la bonne méthode (je hait les paramètres rave) .

Le mieux serait de passer un un TrvCustomConnection ou encore mieux un TrvDatasetConnection et d'utiliser l'évènement onValidateRaw .

Je suis sur d'avoir mis au moins un Post sur ce sujet (et même plusieurs)
permettant également de ne pas traiter que des Bitmaps (lourds) mais aussi des Jpeg
__________________
La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein
J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius
SergioMaster est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/03/2011, 09h53   #3
Membre du Club
 
Inscription : avril 2008
Messages : 129
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 129
Points : 41
Points : 41
Envoyer un message via Yahoo à damene
Citation:
Envoyé par SergioMaster Voir le message
Passer un bitmap via un paramètre n'est pas la bonne méthode (je hait les paramètres rave) .

Le mieux serait de passer un un TrvCustomConnection ou encore mieux un TrvDatasetConnection et d'utiliser l'évènement onValidateRaw .

Je suis sur d'avoir mis au moins un Post sur ce sujet (et même plusieurs)
permettant également de ne pas traiter que des Bitmaps (lourds) mais aussi des Jpeg
Bonjour SergioMaster. Toujours aussi prompt à mettre les gants.

j'avais contourné la difficulté en attendant. J'ai effectivement ajouté un TrvCustomConnection relié à un fichier temporaire ImageProv avec un champ cliché ou je mets l'image avec le rajout donc d'un TdataSource et la création d'une vue dans Rave rattachant le champ cliché au Bitmap Composant. on fait ce qu'on peut. Je ne suis pas informaticien.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
procedure TForme.Button1Click(Sender: TObject);
var MFichier : String;
begin
    IF OpenPictureDialog.execute then
    begin
      ImageProv.Edit;
      (ImageProv.FieldByName('Cliche') AS TBlobField).LoadFromFile(OpenPictureDialog.FileName);
      ImageProv.Post;
    end;
    try
      Except ON E:Exception do
      begin
        ImageProv.Cancel;
        Showmessage('Erreur lors de l''insertion de l''image dans la base de données : ' +E.Message);
      end;
    end;
end;
Pour ce qui concerne ta solution le help de onValidateRaw ne m'indique pas comment opérer. J'ai poutant lu toutes les discussions du forume depuis sa création je ne trouve pas le post que tu signales.

Peux-tu m'expliciter ta solution et comment utiliser TrvCustomConnection et onValidateRaw ou bien m'indiquer le lien du post dont tu parles.

merci encore.
damene est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/03/2011, 07h52   #4
Modérateur
 
Avatar de SergioMaster
 
Serge Girard
Développeur informatique
Inscription : janvier 2007
Messages : 3 612
Détails du profil
Informations personnelles :
Nom : Serge Girard
Âge : 55
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : janvier 2007
Messages : 3 612
Points : 4 509
Points : 4 509
Je pensais a ce post
il doit même être possible de faire sans CustomConnection et donc ValidateRaw s'il n'y a qu'une seule image a imprimer . Cependant je n'ai pour l'instant pas la force/courage de me mettre en garde
__________________
La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein
J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius
SergioMaster est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/03/2011, 15h24   #5
Membre du Club
 
Inscription : avril 2008
Messages : 129
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 129
Points : 41
Points : 41
Envoyer un message via Yahoo à damene
Citation:
Envoyé par SergioMaster Voir le message
Je pensais a ce post
il doit même être possible de faire sans CustomConnection et donc ValidateRaw s'il n'y a qu'une seule image a imprimer . Cependant je n'ai pour l'instant pas la force/courage de me mettre en garde
Merci SergioMaster.

Ce post je l'ai déjà lu, relu et trois fois lu mais je n'ai pas su l'adapter comme l'a fait Patrick25300. Je n'ai pas su utiliser onValidateRow. Je ne vais pas vous importuner outre mesure.

Je me contenterai de ma solution, elle n'est pas élégante mais me permet d'imprimer un cliché sur un état contenant des informations (provenant d'une BD) en intégrant cette photo dans un fichier temporaire.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
procedure TForme.Button1Click(Sender: TObject);
begin
  IF OpenPictureDialog.execute then
  begin
    IF ImageProv.RecordCount=0 then ImageProv.Append else ImageProv.Edit;
    (ImageProv.FieldByName('Cliche') AS TBlobField).LoadFromFile(OpenPictureDialog.FileName);
    ImageProv.Post;
  end;
  Forme.GCabGastro.SetParam('TitreRecap','Cliché Echographie');
  Forme.GCabGastro.SelectReport('SyntheseCompterendu',True);
  Forme.GCabGastro.ExecuteReport('SyntheseCompterendu');
  Forme.GCabGastro.close;
end;
Merci encore.
damene est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2011, 08h30   #6
Modérateur
 
Avatar de SergioMaster
 
Serge Girard
Développeur informatique
Inscription : janvier 2007
Messages : 3 612
Détails du profil
Informations personnelles :
Nom : Serge Girard
Âge : 55
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : janvier 2007
Messages : 3 612
Points : 4 509
Points : 4 509
Question : C'est une édition unique juste de l'image ? j'ai l'impression que oui , au vu de l'opendialog .
Je pense trouver facilement la réponse dans ce cas (un bon WE ensoleillé fait des miracles)
__________________
La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein
J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius
SergioMaster est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/03/2011, 07h50   #7
Membre du Club
 
Inscription : avril 2008
Messages : 129
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 129
Points : 41
Points : 41
Envoyer un message via Yahoo à damene
Citation:
Envoyé par SergioMaster Voir le message
Question : C'est une édition unique juste de l'image ? j'ai l'impression que oui , au vu de l'opendialog .
Je pense trouver facilement la réponse dans ce cas (un bon WE ensoleillé fait des miracles)
Bonjour SergioMaster

se sont des images captées a travers une échographie ou une endoscopie qui sera (seront) colée(s) dans un compte rendu d'échographie ou d'endoscopie
d'où l'intégration dans le raport 'SyntheseCompterendu' d'un DataText Composant pour le titre (TitreRecap), d'un dataMemo pour le compte rendu et un ou plusieurs Bitmap Composant pour une ou plusieurs images, selon le cas, que je mets dans le fichier temporaire ImageProv.


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
procedure TForme.Button1Click(Sender: TObject);
begin
 
  IF OpenPictureDialog.execute then
  begin
    IF ImageProv.RecordCount=0 then ImageProv.Append else ImageProv.Edit;
    (ImageProv.FieldByName('Cliche') AS TBlobField).LoadFromFile(OpenPictureDialog.FileName);
    ImageProv.Post; // cas d'une seule image
  end;
 
  Forme.GCabGastro.SetParam('TitreRecap','Cliché Echographie');
  Forme.GCabGastro.SetParam('CompteRendu',MCompteRendu);
// le cliché est intégré par l'intérmédiaire de la vue dvImageProv et du champ Cliche de ImageProv
 
  Forme.GCabGastro.SelectReport('SyntheseCompterendu',True);
  Forme.GCabGastro.ExecuteReport('SyntheseCompterendu');
  Forme.GCabGastro.close;
end;
damene est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/03/2011, 08h32   #8
Modérateur
 
Avatar de SergioMaster
 
Serge Girard
Développeur informatique
Inscription : janvier 2007
Messages : 3 612
Détails du profil
Informations personnelles :
Nom : Serge Girard
Âge : 55
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : janvier 2007
Messages : 3 612
Points : 4 509
Points : 4 509
Hum, je n'aurais pas procédé exactement de la même manière !
en fait j'aurais créer un fichier
RAPPORT
ORDRE NUMERIQUE
TITRE VARCHAR OU MEMO
IMAGE VARCHAR(Chemin de l'image)
et ainsi imprimer l'ensemble
Dans ces conditions le post cité conviendrai parfaitement avec un bon RvDataSet et OnValidateRow

le Fichier ImageProv à l'air de ressembler plus ou moins a ça !
(j'aime pas trop le recordcount par contre )
la seule grosse (très grosse différence) est que l'image n'est pas stockée en blob mais en chemin absolu (moins de place, moins de copie).
__________________
La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein
J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius
SergioMaster est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/03/2011, 07h31   #9
Membre du Club
 
Inscription : avril 2008
Messages : 129
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 129
Points : 41
Points : 41
Envoyer un message via Yahoo à damene
Citation:
Envoyé par SergioMaster Voir le message
Hum, je n'aurais pas procédé exactement de la même manière !
en fait j'aurais créer un fichier
RAPPORT
ORDRE NUMERIQUE
TITRE VARCHAR OU MEMO
IMAGE VARCHAR(Chemin de l'image)
et ainsi imprimer l'ensemble
Dans ces conditions le post cité conviendrai parfaitement avec un bon RvDataSet et OnValidateRow

le Fichier ImageProv à l'air de ressembler plus ou moins a ça !
(j'aime pas trop le recordcount par contre )
la seule grosse (très grosse différence) est que l'image n'est pas stockée en blob mais en chemin absolu (moins de place, moins de copie).
Bonjour SergioMaster
Finalement j'avais procédé exactement de la façon que tu décris tout en sachant que l'image stochée en blob prend plus de place, faute de savoir utilisé OnValidateRow.

le help de OnValidateRow me donne je cite :
'Cet événement est appelé pour chaque ligne des données et permet la sélection personnalisée des enregistrements qui seront inclus dans l'état en initialisant ValueRow à true ou false. Voir le tutoriel pour davantage d'informations sur la personnalisation des connexions de données.'

Le tutoriel Rave Report Tutorial - John COLIBRI ne m'avance pas non plus,

Je n'arrive pas à trouver le bout de code à mettre dans OnValidateRow pour utiliser la méthode de stockage du chemin de l'image seulement.

Dommage et tant pis à défaut de grives je me contenterai de merle. Je continuerai à piocher la question.

Merci SergioMaster
damene est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/03/2011, 08h43   #10
Modérateur
 
Avatar de SergioMaster
 
Serge Girard
Développeur informatique
Inscription : janvier 2007
Messages : 3 612
Détails du profil
Informations personnelles :
Nom : Serge Girard
Âge : 55
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : janvier 2007
Messages : 3 612
Points : 4 509
Points : 4 509
pourtant tout est dans le post , en simplifiant le code (considérant que des bmp)
ne pas oublier de mettre les uses necessaires rvCsStd et rvClass

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 
procedure TForm1.RvDataSetConnection1ValidateRow(
  Connection: TRvCustomConnection; var ValidRow: BOOLEAN);
var
  MyPage : TRavePage;
  Ravebitmap : TRaveBitMap;
  NomImage,extension : String;
begin
// recherche de la page du rapport 
MyPage := RvProject1.ProjMan.FindRaveComponent('Report1.MainPage',nil) AS 
// recherche du composant bitmap contenu dans la page
TRavePage;
RaveBitMap := RvProject1.ProjMan.FindRaveComponent('BitMap1',MyPage) AS TRaveBitMap;
// chemin complet de l'image à charger (ie c:\mes documents\images\echo.bmp')
NomImage:=Uppercase(Table1.FIELDbyname(image).asString);
\\ ou encore 
\\ IF opendialog1.execute then nomimage:=opendialog1.filename
\\ else nomimage:='';
IF FileExists(NomImage) then
 begin
  IF assigned(RaveBitMap) then
      RaveBitmap.Image.LoadFromFile(NomImage);
 end
else RaveBitmap.Image:=nil;
end;
il n'y a absolument aucun lezard dans ce code [edit] ah si , peut être un , ne pas oublier d'ouvrir le rvproject .
__________________
La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein
J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius
SergioMaster est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/03/2011, 09h32   #11
Membre du Club
 
Inscription : avril 2008
Messages : 129
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 129
Points : 41
Points : 41
Envoyer un message via Yahoo à damene
Citation:
Envoyé par SergioMaster Voir le message
pourtant tout est dans le post , en simplifiant le code (considérant que des bmp)
ne pas oublier de mettre les uses necessaires rvCsStd et rvClass


il n'y a absolument aucun lezard dans ce code [edit] ah si , peut être un , ne pas oublier d'ouvrir le rvproject .
Bonjour SergioMaster.
Tu tiens à tout prix à me ramasser. Je te remercie. C'est clair Maintenant.
damene est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/03/2011, 13h33   #12
Membre du Club
 
Inscription : avril 2008
Messages : 129
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 129
Points : 41
Points : 41
Envoyer un message via Yahoo à damene
Citation:
Envoyé par damene Voir le message
Bonjour SergioMaster.
Tu tiens à tout prix à me ramasser. Je te remercie. C'est clair Maintenant.
Bonjour SergioMaster.
Autant pour moi.

dans le Report (ImageEchoEndo) j'ai ajouté un deuxième Bitmap (bitmapEchoEndo)
dans le fichier (ImageProv) j'ai rajouté un deuxième champ (AdresseCliche)

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
procedure TForme.btImprimerClicheClick(Sender: TObject);
begin
  Forme.GCabGastro.Open;
  Forme.GCabGastro.SelectReport('ImageEchoEndo',True);
  Forme.GCabGastro.ExecuteReport('ImageEchoEndo');
  Forme.GCabGastro.close;
end;
 
procedure TForme.RvdsConImageProvValidateRow(
  Connection: TRvCustomConnection; var ValidRow: BOOLEAN);
var
  MyPage : TRavePage;
  Ravebitmap : TRaveBitMap;
  NomImage: String;   //,extension
begin
 
showmessage('0000000000000  dans début RvdsConImageProvValidateRow');
 
 
// recherche de la page du rapport
  MyPage := GCabGastro.ProjMan.FindRaveComponent('ImageEchoEndo.PageEchoEndo',nil) AS
// recherche du composant bitmap contenu dans la page
  TRavePage;
  RaveBitMap := GCabGastro.ProjMan.FindRaveComponent('bitmapEchoEndo',MyPage) AS TRaveBitMap;
// chemin complet de l''image à charger (ie c:\mes documents\images\echo.bmp)
  NomImage:=ExtractFilepath(OpenPictureDialog.Filename)+'\MesCaptures\'+
  Uppercase(ImageProv.FIELDbyname('AdresseCliche').asString);
// ou encore
// if opendialog1.execute then nomimage:=opendialog1.filename
// else nomimage:='';
  if FileExists(NomImage) then
  begin
    if assigned(RaveBitMap) then
      RaveBitmap.Image.LoadFromFile(NomImage);
  end
  else RaveBitmap.Image:=nil;
showmessage('111111111111111  dans fin RvdsConImageProvValidateRow');
end;
Lorsque le lance l'impression (btImprimerClicheClick) j'obtiens l'image contenue dans la table ImageProv provenant du premier bitmap (relié à la vue et au champ Graphique de ImageProv) mais pas d'image dans le deuxième bitmap (bitmapEchoEndo).

l'évènement RvdsConImageProvValidateRow n'est pas activé? confirmé par Showmessage('00000000000000000000');

quelque chose doit m'échapper pour activer RvdsConImageProvValidateRow ?
damene est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/03/2011, 08h19   #13
Modérateur
 
Avatar de SergioMaster
 
Serge Girard
Développeur informatique
Inscription : janvier 2007
Messages : 3 612
Détails du profil
Informations personnelles :
Nom : Serge Girard
Âge : 55
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : janvier 2007
Messages : 3 612
Points : 4 509
Points : 4 509
Hum , là ca a l'air de venir du report .
Le RvdsConImageProv est bien déclaré comme source de données dans le report ?
la Bande est bien lié a cette source ?
Le rave devrait ressembler à ça
__________________
La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein
J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius
SergioMaster est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/03/2011, 11h27   #14
Membre du Club
 
Inscription : avril 2008
Messages : 129
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 129
Points : 41
Points : 41
Envoyer un message via Yahoo à damene
Citation:
Envoyé par SergioMaster Voir le message
Hum , là ca a l'air de venir du report .
Le RvdsConImageProv est bien déclaré comme source de données dans le report ?
la Bande est bien lié a cette source ?
Le rave devrait ressembler à ça
Bonjour SergioMaster.

effectivement, je n'avais pas posé une DataBand, mais une Band.
J'ai donc posé une DataBand (que j'ai rattaché à la vue de RvdsConImageProv) Contenant deux BitMap Composant (Bitmap1 et bitmapEchoEndo).

RvdsConImageProv.DataSet:=ImageProv;
la DataBande est ratachée à la vue dvImageProv relié à RvdsConImageProv

la propriété datavew de Bitmap1 est dvImageProv
la propriété datafield de Bitmap1 est cliche

les propriétés datavew et datafield de bitmapEchoEndo sont vierges

quand je lance btImprimerCliche je rentre maintenant dans RvdsConImageProvValidateRow.

Mais hélas dans Bitmap1 j'ai bien le cliché mais bitmapEchoEndo reste toujours vide.
damene est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/03/2011, 12h27   #15
Membre du Club
 
Inscription : avril 2008
Messages : 129
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 129
Points : 41
Points : 41
Envoyer un message via Yahoo à damene
Citation:
Envoyé par damene Voir le message
Mais hélas dans Bitmap1 j'ai bien le cliché mais bitmapEchoEndo reste toujours vide.
Rebonjour SergioMaster.

Autant pour moi.
Quant tu m'a confirmé que le code était bon, je suis allé chercher du côté de l'adresse.
et c'est là où se situait le hic.
j'avais noté
Code :
1
2
  NomImage:=ExtractFilepath(OpenPictureDialog.Filename)+'\MesCaptures\'+
  Uppercase(ImageProv.FIELDbyname('AdresseCliche').asString);
au lieu de
Code :
1
2
  NomImage:=ExtractFilepath(Application.ExeName)+'\MesCaptures\'+
  Uppercase(ImageProv.FIELDbyname('AdresseCliche').asString);
et ça marche merveilleusement bien.

Je te remercie pour toute la patience que tu as eu avec moi.
Chapeau bas.
Je vais m'empresser de noter résolu.
damene est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h35.


 
 
 
 
Partenaires

Hébergement Web