IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bases de données Delphi Discussion :

Comment afficher un montant dans un imprimé


Sujet :

Bases de données Delphi

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Juin 2006
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 82
    Points : 0
    Points
    0
    Par défaut Comment afficher un montant dans un imprimé
    Pour afficher un montant dans un imprimé
    Comme ce qui est montré dans l'image
    Comment puis-je faire
    j'ai utilisé delphi7 et absolute database

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Il n'y a rien de tout prêt pour remplir les cases d'un formulaire pré-imprimé
    Dans ton outil de rapport, cherche si tu as options d'espace des caractères dans un libellé et un alignement à droite

    Sinon, il y a aussi TabbedTextOut ou encore ExtTextOut
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre actif
    Inscrit en
    Décembre 2004
    Messages
    390
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 390
    Points : 288
    Points
    288
    Par défaut
    Séparer les chiffres du montant un par un et les placer par tâtonnement jusqu'à la bonne position !

  4. #4
    Nouveau Candidat au Club
    Inscrit en
    Juin 2006
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 82
    Points : 0
    Points
    0
    Par défaut
    Citation Envoyé par akli_agha Voir le message
    Séparer les chiffres du montant un par un et les placer par tâtonnement jusqu'à la bonne position !
    merçi
    mais Comment séparer un montant d'une résultat de calcule

  5. #5
    Membre actif
    Inscrit en
    Décembre 2004
    Messages
    390
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 390
    Points : 288
    Points
    288
    Par défaut
    Convertir le montant en chaine de caractère et utiliser la fonction copy qui permet d'extraire les caractères un à un.

    Voir l'aide de Delphi.

  6. #6
    Membre confirmé
    Avatar de JP.NUAGE
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    769
    Détails du profil
    Informations personnelles :
    Âge : 81
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 769
    Points : 542
    Points
    542
    Par défaut
    J'ai travaillé (autrefois avec dBase 3+ : il y a avait une fonction qui permettait d'extraire un ou plusieurs caractères d'une chaine. Je l'ai réécrite en Delphi et elle me sert bien. Si ça peut t'aider

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Function  SUBSTR(xZone : String; xDebut, xLongueur : integer) : string;
     
    var xTemp : string;
        xLen, xTotal : integer;
     
    begin
       xTotal := Length(xZone);
       xLen := Length(xZone)+1-xDebut;
       if xDebut>xTotal then
          begin
             Result := '';
             exit
          end;
       xTemp := RightStr(xZone,xLen);
       xLen := Strlen(Pchar(xTemp));
       if xLongueur>xLen then
          Result:=xTemp
       else
          Result := LeftStr(xTemp,xLongueur);
     
    end;
    xZone est la chaine que tu traites (ton montant que tu auras converti en string)
    xDebut est la position du premier caractère à extraire : chez toi cela ira de 1 à la longueur de ton nombre
    xLongueur est le nombre de caractères à extraire : chez toi toujours 1

    la fonction renvoie le (toujours chez toi) ou les caractères extraits

    Ensuite, comme il t'est suggéré, tu mets des espaces entre les chiffres que tu as extraits et là, en effet, il va y avoir du tâtonnement

    Bon courage
    Ce qui se conçoit bien s'énonce clairement
    Et les mots pour le dire viennent aisément (Boileau)

  7. #7
    Nouveau Candidat au Club
    Inscrit en
    Juin 2006
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 82
    Points : 0
    Points
    0
    Par défaut
    Citation Envoyé par JP.NUAGE Voir le message
    J'ai travaillé (autrefois avec dBase 3+ : il y a avait une fonction qui permettait d'extraire un ou plusieurs caractères d'une chaine. Je l'ai réécrite en Delphi et elle me sert bien. Si ça peut t'aider

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Function  SUBSTR(xZone : String; xDebut, xLongueur : integer) : string;
     
    var xTemp : string;
        xLen, xTotal : integer;
     
    begin
       xTotal := Length(xZone);
       xLen := Length(xZone)+1-xDebut;
       if xDebut>xTotal then
          begin
             Result := '';
             exit
          end;
       xTemp := RightStr(xZone,xLen);
       xLen := Strlen(Pchar(xTemp));
       if xLongueur>xLen then
          Result:=xTemp
       else
          Result := LeftStr(xTemp,xLongueur);
     
    end;
    xZone est la chaine que tu traites (ton montant que tu auras converti en string)
    xDebut est la position du premier caractère à extraire : chez toi cela ira de 1 à la longueur de ton nombre
    xLongueur est le nombre de caractères à extraire : chez toi toujours 1

    la fonction renvoie le (toujours chez toi) ou les caractères extraits

    Ensuite, comme il t'est suggéré, tu mets des espaces entre les chiffres que tu as extraits et là, en effet, il va y avoir du tâtonnement

    Bon courage
    Bonjour

    S'il vous plaît corriger la mauvaise
    Ceci est une tentative, mais je ne savais pas que c'était vrai ou pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
     
    type
      TForm1 = class(TForm)
        Button1: TButton;
        Label1: TLabel;
        Label2: TLabel;
        Label3: TLabel;
        Label4: TLabel;
        Edit1: TEdit;
        Edit2: TEdit;
        procedure Button1Click(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
      Function  SUBSTR(xZone : String; xDebut, xLongueur : integer) : string;
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
    Function  SUBSTR(xZone : String; xDebut, xLongueur : integer) : string;
    var xTemp : string;
        xLen, xTotal : integer;
    begin
       xTotal := Length(xZone);
       xLen := Length(xZone)+1-xDebut;
       if xDebut>xTotal then
          begin
             Result := '';
             exit
          end;
       xTemp := RightStr(xZone,xLen);
       xLen := Strlen(Pchar(xTemp));
       if xLongueur>xLen then
          Result:=xTemp
       else
          Result := LeftStr(xTemp,xLongueur);
    end;
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    Label1.Caption:=SUBSTR(Edit1.Text);
    Label2.Caption:=SUBSTR(Edit1.Text);
    Label3.Caption:=SUBSTR(Edit1.Text);
    Label4.Caption:=SUBSTR(Edit1.Text);
    end;
     
    end.
    OBS
    Edit1 = 2346

  8. #8
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    SUBSTR n'est-ce pas la même que la routine intrinsèque de Delphi Copy qui doit exister au moins depuis D4 (en D3, c'est moins sûr, les tableaux dynamiques n'existaient pas, donc probablement pas Copy)

    Sinon, tu n'as toujours pas indiquer l'outil de rapport ? QuickReport ? RaveReport ? ReportBuilder ? CrystalReport ?

    OBS ???
    medreg, merci de faire un peu plus d'effort !
    Tu nous fait quelle tentative ??? SUBSTR nécessite trois paramètres, tu n'en passes qu'un, cela ne compile même pas !
    Oubli SUBSTR, ce n'est pas la solution, l'utilisation de [] permet de récupérer un par un chaque caractère d'une chaine !

    Ce sujet évoquait le Padding par la droite par des espaces :
    Chaine de caractères avec des espaces
    On peut rapidement adapter l'utilisation StringOfChar pour un bourrage par la gauche !

    J'ignore si des fonctions de Pad (comme PadLeft) plus simple que Format existe ou pas en XE2 mais en D7, on peut écrire :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      Label1.Caption :=  Format('%-12s',[Edit1.Text]); // Avant
      Label2.Caption :=  Format('%12s', [Edit1.Text]); // Après
    end;
    Une fois que l'on a la taille nécessaire, on peut donc facilement écrire ceci (code théorique dépendant de l'outil de rapport, là, je le fais avec une table contenant 12 champ)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure TForm1.Button2Click(Sender: TObject);
    var
      i: Integer;
    begin
      for i := 1 to 12 do
        ReportDataSet.FieldByName('ChiffreNombre'+IntToStr(i)).AsString := Label1.Caption[i];
    end;
    mais on pouvait AUSSI le faire SANS le Pad

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure TForm1.Button3Click(Sender: TObject);
    var
      i: Integer;
    begin
      for i := 1 to 12 - Length(Edit1.Text) do
        ReportDataSet.FieldByName('ChiffreNombre'+IntToStr(i)).Clear();
     
      for i := 12 to 12 - Length(Edit1.Text) + 1 do
        ReportDataSet.FieldByName('ChiffreNombre'+IntToStr(i)).AsString := Edit1.Text[i];
    end;
    Il suffit sur le Rapport de poser 12 DBText à l'emplacement voulu, d'affecter à chacun les champ ChiffreNombre1 à ChiffreNombre12

    Si pas d'outil de Rapport mais une impression via le Canvas du TPrinter,
    la fonction ExtTextOut permet de gérer les espacement en pixel
    la fonction TabbedTextOut nécessite d'avoir des Tabulations et sera donc plus complexe d'utilisation

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SetTextAlign(Printer.Canvas.Handle, TA_RIGHT);
    SetTextCharacterExtra(Printer.Canvas.Handle, 10);
    ZoneImprime := Rect(0, 0, 200, Printer.Canvas.TextHeight(Edit1.Text)); 
    ExtTextOut(Printer.Canvas.Handle, 50,  50, ETO_CLIPPED,
      @ZoneImprime, PChar(Edit1.Text), Length(Edit1.Text));
    Tu peux le tester dans un TImage.Picture.Bitmap.Canvas au lieu de Printer.Canvascomme ceci en C++Builder (je n'ai pas Delphi)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
            Image1->Picture->Bitmap->Canvas->Brush->Style = bsClear;
            Image1->Picture->Bitmap->Canvas->Font->Color = clRed;
            Image1->Picture->Bitmap->Canvas->Font->Size = 20;
            Image1->Picture->Bitmap->Canvas->Font->Name = "Comic Sans MS";
            Image1->Picture->Bitmap->Canvas->Font->Style = TFontStyles() << fsBold << fsUnderline;
            Image1->Picture->Bitmap->Canvas->TextOut(100, 100, "Texte Normal");
     
            SetTextCharacterExtra(Image1->Picture->Bitmap->Canvas->Handle, 10);
            Image1->Picture->Bitmap->Canvas->TextOut(100, 150, "Texte Espacé");
    qui doit donner en Delphi (traduction théorique)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
            with Image1.Picture.Bitmap.Canvas do
            begin
              Brush.Style = bsClear;
              Font.Color = clRed;
              Font.Size = 20;
              Font.Name = 'Comic Sans MS';
              Font.Style = [fsBold, fsUnderline];
              TextOut(100, 100, 'Texte Normal');
     
              SetTextCharacterExtra(Handle, 10);
              TextOut(100, 100, 'Texte Espacé');
            end;
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  9. #9
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 045
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 045
    Points : 40 963
    Points
    40 963
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par ShaileTroll
    Copy (en D3, c'est moins sûr)
    Copy existait déjà en d3 (je l'utilise a fond en ce moment même ) , de toute façon Medreg indiquait D7 (sans pour autant préciser son outil de reporting , Quickreport je pense)

    @Medreg On a vraiment l'impression que tu ne fais aucun effort
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  10. #10
    Nouveau Candidat au Club
    Inscrit en
    Juin 2006
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 82
    Points : 0
    Points
    0
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    SUBSTR n'est-ce pas la même que la routine intrinsèque de Delphi Copy qui doit exister au moins depuis D4 (en D3, c'est moins sûr, les tableaux dynamiques n'existaient pas, donc probablement pas Copy)

    Sinon, tu n'as toujours pas indiquer l'outil de rapport ? QuickReport ? RaveReport ? ReportBuilder ? CrystalReport ?

    OBS ???
    medreg, merci de faire un peu plus d'effort !
    Tu nous fait quelle tentative ??? SUBSTR nécessite trois paramètres, tu n'en passes qu'un, cela ne compile même pas !
    Oubli SUBSTR, ce n'est pas la solution, l'utilisation de [] permet de récupérer un par un chaque caractère d'une chaine !

    Ce sujet évoquait le Padding par la droite par des espaces :
    Chaine de caractères avec des espaces
    On peut rapidement adapter l'utilisation StringOfChar pour un bourrage par la gauche !

    J'ignore si des fonctions de Pad (comme PadLeft) plus simple que Format existe ou pas en XE2 mais en D7, on peut écrire :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      Label1.Caption :=  Format('%-12s',[Edit1.Text]); // Avant
      Label2.Caption :=  Format('%12s', [Edit1.Text]); // Après
    end;
    Une fois que l'on a la taille nécessaire, on peut donc facilement écrire ceci (code théorique dépendant de l'outil de rapport, là, je le fais avec une table contenant 12 champ)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure TForm1.Button2Click(Sender: TObject);
    var
      i: Integer;
    begin
      for i := 1 to 12 do
        ReportDataSet.FieldByName('ChiffreNombre'+IntToStr(i)).AsString := Label1.Caption[i];
    end;
    mais on pouvait AUSSI le faire SANS le Pad

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure TForm1.Button3Click(Sender: TObject);
    var
      i: Integer;
    begin
      for i := 1 to 12 - Length(Edit1.Text) do
        ReportDataSet.FieldByName('ChiffreNombre'+IntToStr(i)).Clear();
     
      for i := 12 to 12 - Length(Edit1.Text) + 1 do
        ReportDataSet.FieldByName('ChiffreNombre'+IntToStr(i)).AsString := Edit1.Text[i];
    end;
    Il suffit sur le Rapport de poser 12 DBText à l'emplacement voulu, d'affecter à chacun les champ ChiffreNombre1 à ChiffreNombre12

    Si pas d'outil de Rapport mais une impression via le Canvas du TPrinter,
    la fonction ExtTextOut permet de gérer les espacement en pixel
    la fonction TabbedTextOut nécessite d'avoir des Tabulations et sera donc plus complexe d'utilisation

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SetTextAlign(Printer.Canvas.Handle, TA_RIGHT);
    SetTextCharacterExtra(Printer.Canvas.Handle, 10);
    ZoneImprime := Rect(0, 0, 200, Printer.Canvas.TextHeight(Edit1.Text)); 
    ExtTextOut(Printer.Canvas.Handle, 50,  50, ETO_CLIPPED,
      @ZoneImprime, PChar(Edit1.Text), Length(Edit1.Text));
    Tu peux le tester dans un TImage.Picture.Bitmap.Canvas au lieu de Printer.Canvascomme ceci en C++Builder (je n'ai pas Delphi)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
            Image1->Picture->Bitmap->Canvas->Brush->Style = bsClear;
            Image1->Picture->Bitmap->Canvas->Font->Color = clRed;
            Image1->Picture->Bitmap->Canvas->Font->Size = 20;
            Image1->Picture->Bitmap->Canvas->Font->Name = "Comic Sans MS";
            Image1->Picture->Bitmap->Canvas->Font->Style = TFontStyles() << fsBold << fsUnderline;
            Image1->Picture->Bitmap->Canvas->TextOut(100, 100, "Texte Normal");
     
            SetTextCharacterExtra(Image1->Picture->Bitmap->Canvas->Handle, 10);
            Image1->Picture->Bitmap->Canvas->TextOut(100, 150, "Texte Espacé");
    qui doit donner en Delphi (traduction théorique)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
            with Image1.Picture.Bitmap.Canvas do
            begin
              Brush.Style = bsClear;
              Font.Color = clRed;
              Font.Size = 20;
              Font.Name = 'Comic Sans MS';
              Font.Style = [fsBold, fsUnderline];
              TextOut(100, 100, 'Texte Normal');
     
              SetTextCharacterExtra(Handle, 10);
              TextOut(100, 100, 'Texte Espacé');
            end;
    bonjour Mr
    Merci pour votre aide
    Mais je ne comprenais rien de ce que j'ai présenté
    J'espère me mettre un exemple
    J'ai des dirigeants de données avec un champ de type real
    Et un champ de type texte
    Je veux mettre le contenu de chaque champ dans le composant par le nombre de lettres par la vigueur
    C'est l'annexe de la loi modifiée

  11. #11
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    N'ayant pas Delphi ni QuickReport (enfin nous avons l'information), je ne peux que spéculer !
    Déjà mélanger DBEdit et QuickRep, je n'avais jamais osé !
    Je ne vois pas ce que tu poses problèmes, utilises donc 12 TQRLabel (j'ai pris QRLabel11 à QRLabel22) dans chacun tu mets une lettre de Montant, suffit juste de les mettre les un à coté des autres, avec des TQRShape tu fais les traits ...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    procedure TForm1.Button3Click(Sender: TObject);
    var
      i: Integer;
      MontantText: string; 
      cpt: TComponent; 
      lbl: TQRLabel;
    begin
      MontantText := DataSource1.DataSet.FieldByName('Montant').AsString;
     
      for i := 1 to 12 - Length(MontantText) do
      begin
        cpt := Self.FindComponent('QRLabel' + IntToStr(i + 10));
        if cpt is TQRLabel then
          TQRLabel(cpt).Caption := 'X'; // tu mettras ''; 
      end;
     
      for i := 12 downto 12 - Length(MontantText) + 1 do
      begin
        cpt := Self.FindComponent('QRLabel' + IntToStr(i + 10));
        if cpt is TQRLabel then
          TQRLabel(cpt).Caption := MontantText[i]; 
      end;
    end;

    Tu peux aussi un TClientDataSet intermédiaire entre Table1 et TQuickRep (et ses TQRDBLabel au lieu de TQRLabel simple) et reprendre mes autres exemples

    Citation Envoyé par medreg Voir le message
    Mais je ne comprenais rien de ce que j'ai présenté
    Tu ne comprends pas ce que tu fais ??? Moi je ne comprends pas ce que tu écrits !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  12. #12
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 045
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 045
    Points : 40 963
    Points
    40 963
    Billets dans le blog
    62
    Par défaut
    Les QRLabel.Caption semblent être la solution la plus facile , maintenant attention à la virgule !
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  13. #13
    Membre actif
    Inscrit en
    Décembre 2004
    Messages
    390
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 390
    Points : 288
    Points
    288
    Par défaut
    La virgule sera gérée comme les autres chiffres du montant !

    Vu que le nombre de chiffres à placer n'est pas aussi important que ça, on peut se passer de la boucle, s'il la juge compliquée !

    On peut informer les QRLabels manuellement !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    MontantText := PadLeft(MontantText, ' ', 15); 
    //ou MontantText := PadLeft(MontantText, '0', 15); 
     
    QRLabel1.Caption := MontantText[1]; 
    QRLabel2.Caption := MontantText[2]; 
    QRLabel3.Caption := MontantText[3]; 
    QRLabel4.Caption := MontantText[4]; 
     
    QRLabel5.Caption := MontantText[5]; 
    QRLabel6.Caption := MontantText[6]; 
    QRLabel7.Caption := MontantText[7]; 
    QRLabel8.Caption := MontantText[8]; 
    QRLabel9.Caption := MontantText[9]; 
     
    QRLabel10.Caption := MontantText[10]; 
    QRLabel11.Caption := MontantText[11]; 
    QRLabel12.Caption := MontantText[12]; 
    QRLabel13.Caption := MontantText[13]; 
    QRLabel14.Caption := MontantText[14]; 
    QRLabel15.Caption := MontantText[15];

  14. #14
    Nouveau Candidat au Club
    Inscrit en
    Juin 2006
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 82
    Points : 0
    Points
    0
    Par défaut
    Citation Envoyé par akli_agha Voir le message
    La virgule sera gérée comme les autres chiffres du montant !

    Vu que le nombre de chiffres à placer n'est pas aussi important que ça, on peut se passer de la boucle, s'il la juge compliquée !

    On peut informer les QRLabels manuellement !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    MontantText := PadLeft(MontantText, ' ', 15); 
    //ou MontantText := PadLeft(MontantText, '0', 15); 
     
    QRLabel1.Caption := MontantText[1]; 
    QRLabel2.Caption := MontantText[2]; 
    QRLabel3.Caption := MontantText[3]; 
    QRLabel4.Caption := MontantText[4]; 
     
    QRLabel5.Caption := MontantText[5]; 
    QRLabel6.Caption := MontantText[6]; 
    QRLabel7.Caption := MontantText[7]; 
    QRLabel8.Caption := MontantText[8]; 
    QRLabel9.Caption := MontantText[9]; 
     
    QRLabel10.Caption := MontantText[10]; 
    QRLabel11.Caption := MontantText[11]; 
    QRLabel12.Caption := MontantText[12]; 
    QRLabel13.Caption := MontantText[13]; 
    QRLabel14.Caption := MontantText[14]; 
    QRLabel15.Caption := MontantText[15];
    merçi pour aide mais le code ne marche pas
    voila le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    var   MontantText: string;
    begin
    MontantText := DataSource1.DataSet.FieldByName('Montant').AsString;
    MontantText := PadLeft(MontantText, ' ', 15);
    //ou MontantText := PadLeft(MontantText, '0', 15); 
     
    bLabel1.Caption := MontantText[1];
    bLabel2.Caption := MontantText[2];
    bLabel3.Caption := MontantText[3];
    bLabel4.Caption := MontantText[4];
     
    bLabel5.Caption := MontantText[5];
    bLabel6.Caption := MontantText[6];
    bLabel7.Caption := MontantText[7];
    bLabel8.Caption := MontantText[8];
    bLabel9.Caption := MontantText[9];
     
    bLabel10.Caption := MontantText[10];
    bLabel11.Caption := MontantText[11];
    bLabel12.Caption := MontantText[12];
    bLabel13.Caption := MontantText[13];
    bLabel14.Caption := MontantText[14];
    bLabel15.Caption := MontantText[15];
    end;
    mais il me donnee un message d'erreur
    ([Erreur] Unit1.pas(243): Identificateur non déclaré : 'PadLeft'
    [Erreur] Unit1.pas(260): Identificateur non déclaré : 'bLabel13'
    [Erreur] Unit1.pas(261): Identificateur non déclaré : 'bLabel14'
    [Erreur] Unit1.pas(262): Identificateur non déclaré : 'bLabel15'
    [Erreur fatale] Project1.dpr(5): Impossible de compiler l'unité utilisée 'Unit1.pas'

  15. #15
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 045
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 045
    Points : 40 963
    Points
    40 963
    Billets dans le blog
    62
    Par défaut
    Il faudrait peut être faire attention a ce que TU fais
    1- si la fonction Padleft n'existe pas , voir le post de Shailetroll
    mais on pouvait AUSSI le faire SANS le Pad
    ou rechercher dans quelle unité elle se trouve
    il y a aussi la fonction Format qui peut aider
    // montant sur 15 caractères
    // 12 chiffres+virgule+2décimales
    MontantText:=Format('%12.2f',[DataSource1.DataSet.FieldByName('Montant').asFloat]);
    2- si tu n'as pas les QRlabel 13..15 tu ne t'en prends qu'a toi même

    essayes au moins de ne pas faire des copier/coller bêtes et méchants mais plutôt de comprendre les réponses données
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  16. #16
    Expert éminent sénior

    Avatar de Nono40
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2002
    Messages
    8 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2002
    Messages : 8 640
    Points : 19 101
    Points
    19 101
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    SUBSTR n'est-ce pas la même que la routine intrinsèque de Delphi Copy qui doit exister au moins depuis D4 (en D3, c'est moins sûr, les tableaux dynamiques n'existaient pas, donc probablement pas Copy)
    Ca existe depuis les premières version de Turbo Pascal sous DOS (du moins depuis turbo pascal 3, là ou j'ai débuter).
    Copy à toujours servi sur les chaines. Substr, pour moi c'est du Basic à l'origine.
    Delphi :
    La F.A.Q. , 877 réponses à vos questions !
    264 sources à consulter/télécharger !

  17. #17
    Membre actif
    Inscrit en
    Décembre 2004
    Messages
    390
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 390
    Points : 288
    Points
    288
    Par défaut
    La réponse est claire ! Tes QRLabels ne sont pas déclarés. Vérifies la propriété Name de tes QRLabels.

    Comme a dit SergioMaster :
    essayes au moins de ne pas faire des copier/coller bêtes et méchants mais plutôt de comprendre les réponses données
    Pour la fonction PadLeft, voici un code si tu as des soucis avec.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function TaForme.PadLeft(s, sChar: string; Len : SmallInt): string;
    var
      i : SmallInt;
    begin
      len := Len - length(s);
      For i := 1 to len do s := sChar + s;
      PadLeft := S;
    end;

  18. #18
    Nouveau Candidat au Club
    Inscrit en
    Juin 2006
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 82
    Points : 0
    Points
    0
    Par défaut
    Citation Envoyé par akli_agha Voir le message
    La réponse est claire ! Tes QRLabels ne sont pas déclarés. Vérifies la propriété Name de tes QRLabels.

    Comme a dit SergioMaster :


    Pour la fonction PadLeft, voici un code si tu as des soucis avec.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function TaForme.PadLeft(s, sChar: string; Len : SmallInt): string;
    var
      i : SmallInt;
    begin
      len := Len - length(s);
      For i := 1 to len do s := sChar + s;
      PadLeft := S;
    end;
    MERCI MERCI MERCI MERCI MERCI
    BCP BCP BCP BCP

Discussions similaires

  1. Comment afficher un tableau dans TStringGrid ?
    Par doubledj dans le forum Composants VCL
    Réponses: 3
    Dernier message: 19/09/2005, 02h21
  2. Comment afficher des JPEG dans une application Delphi ?
    Par Bouguennec dans le forum Composants VCL
    Réponses: 4
    Dernier message: 17/09/2005, 21h18
  3. Comment afficher chaque fiche dans la barre des taches ?
    Par HASSANAIT dans le forum Composants VCL
    Réponses: 2
    Dernier message: 21/08/2005, 03h13
  4. Comment afficher les toolTipText dans une zone de statut ?
    Par nicok01 dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 28/01/2005, 13h32
  5. Comment afficher FLASH directement dans le EMAIL
    Par Bilmagic dans le forum Flash
    Réponses: 3
    Dernier message: 05/06/2003, 00h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo