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

 Delphi Discussion :

Indice exposant dans un ListBox


Sujet :

Delphi

  1. #41
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 263
    Points
    3 263
    Par défaut
    Re-Bonjour,

    A Anapurna : J'ai effectivement utilisé ton code tel-quel à l'exception du Variant qui figurait dans le uses principal et que j'ai viré comme d'habitude vu qu'il n'existe pas sous Delphi-5.
    J'utilise encore Windows98 car pour passer à Win-XP il faut reformatter entièrement le disque dur ce qui m'obligerait à réinstaller tous les logiciels que j'utilise ce qui représente une bonne galère et une privation d'internet pendant un certain temps voire un temps qui risquerait de durer un bon moment.

    Tu dis que chez toi cela fonctionne sans probleme : je n'en doute pas, mais c'est agaçant un code qui marche sauf chez moi à cause d'un petit grain de sable.

    A+
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  2. #42
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 421
    Points : 5 820
    Points
    5 820
    Par défaut
    salut

    Version OS&LOGICIELLE dll name
    1.0 Windows 95/98/ME/NT riched32.dll
    2.0 Office 97, Windows NT/98 riched20.dll

    3.0 Office 2000, Windows ME/2000/XP riched20.dll
    4.0 Office XP riched20.dll
    4.1 Windows XP SP1, Tablet, Vista msftedit.dll
    5.0 Office 2003 riched20.dll
    6.0 Office 2007, Encarta Math Calculator riched20.dll


    cherche pas plus loin la dll qui gere le richedit n'est pas la meme
    je me doute qu'il doit exiter des difference

    @+ Phil

    PS : un lien super interessant
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  3. #43
    Membre habitué Avatar de kumo
    Profil pro
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    215
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 215
    Points : 125
    Points
    125
    Par défaut
    Citation Envoyé par AT Voir le message
    Bonsoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    t:array[0..3] of string=('HNO3','H2SO4',
    'FeSO4','He2+');
    Peut-on ajouter dans un listbox une suite de molecules par ex

    HNO3
    H2SO4
    FeSO4

    Idem mais avec des
    He2+ (le 2+ en exposant)


    merci
    s'il te plait, je suis sur un probleme similaire, je voudrais juste savoir comment vous avez fait pour mettre les indices dans ta déclaration de tableau, pour mettre H20 avec un petit 2 par exemple
    Voici les meilleurs sources du monde:
    Les tutos- La F.A.Q
    et aussi
    Google...si si c'est bien essaye....c'est satisfait ou satisfait

    lisez les règles et n'oubliez pas le

  4. #44
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 263
    Points
    3 263
    Par défaut
    Bonjour,

    1) A Kumo :
    je voudrais juste savoir comment vous avez fait pour mettre les indices dans ta déclaration de tableau, pour mettre H20 avec un petit 2 par exemple
    En fait, ceci qui apparait dans le message initial de AT :
    t:array[0..3] of string=('HNO3','H2SO4',
    'FeSO4' etc);
    n'a été fait qu'ici avec l'éditeur du forum en passant en taille 1 les particules numériques.

    ... et pour obtenir des indices/exposants dans la ListBox ce n'est pas dans la déclaration du tableau qu'on met en indice ou en exposant. ( Dans la déclaration du tableau on met t:array[0..3] of string = ('HNO3','H2SO4',
    'FeSO4','He2+'); ) ... et c'est ensuite la procédure TForm1.ListBox1DrawItem() qui scanne la formule et qui place les particules numériques en indice ou en exposant en fonction de la valeur du caractère scanné et de celui qui le précède : pour mieux piger tu peux lire le passage "La syntaxe à respecter pour la saisie des formules" dans mon message du 02/01/2008, 11h53 et qui concerne l'utilisation du code joint qui a été remplacé par le code rétouché placé dans mon message du 02/01/2008, 17h36 et qui fonctionne da la même manière et sans avoir à utiliser des syntaxes du style 'SO_4^2^-';

    2) A Anapurna : A propos des dll, vérification faite j'ai :
    - Riched32.dll que tu cites
    - Riched20.dll que tu cites
    - et j'ai en plus Riched.dll que tu ne cites pas.
    ... alors de deux choses l'une ou leur contenu n'est pas le même que les tiens ou alors c'est la présence de Riched.dll que tu ne cites pas qui perturbe ???
    Et comme je n'ai pas Vista je ne peux pas avoir msftedit.dll

    A propos du "PS : un lien super interessant" : vu j'ai téléchargé pour voir ce que je pourrais en extraire car j'aime pas les syntaxes du style 'SO_4^2^-' ni la présence de balise-codes lors des saisies et comme d'après les infos de AT j'en ai déduit que le nombre d'ions dans les cas courants peut se traduire par un seul caractère je préfère autant des syntaxes de saisie du style SO4-- ou bien SO42- où le 4 précédé d'un caractère non-numérique passe en indice et le 2, s'il est suivi d'un '-' sera placé en exposé avec le '-'. Mais tout ça c'est une histoire de goûts.

    A+
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  5. #45
    Membre habitué Avatar de kumo
    Profil pro
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    215
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 215
    Points : 125
    Points
    125
    Par défaut
    enfaite la moi ce que je voudrais, c'est apres avoir rajouté les molécules dans un tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    tMol: array[0..2] of string=('HNO3','H2SO4','FeSO4');
    je voudrais qu'en cliquant sur un bouton, il me prenne au hasard un element du tableau et qu'ensuite il mette tous les chiffres de la molécule en indice et qu'il m'affiche le résultat dans une zone de texte qu'on appellera "maZone" par exemple
    Voici les meilleurs sources du monde:
    Les tutos- La F.A.Q
    et aussi
    Google...si si c'est bien essaye....c'est satisfait ou satisfait

    lisez les règles et n'oubliez pas le

  6. #46
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 263
    Points
    3 263
    Par défaut
    Re-Bonjour,

    A Kumo :
    je voudrais qu'en cliquant sur un bouton, il me prenne au hasard un element du tableau et qu'ensuite il mette tous les chiffres de la molécule en indice et qu'il m'affiche le résultat dans une zone de texte qu'on appellera "maZone" par exemple
    ... pour prendre au hazard un élément du tableau c'est pas un problème avec Randomize; suivi de j:=Random(26); s'il y a 26 molécules dans le tableau.
    ... ensuite tout dépend du type de zone de texte que tu veux utiliser :
    - si c'est une ListBox ça peut se faire avec par exemple le code que j'ai proposé,
    - et si c'en est un autre type qui dispose d'un canvas on peut modifier ce code
    pour obtenir le même résultat on peut même l'afficher sur le canvas de la Form ou celui du BitMap d'un TImage et je crois même que le TLabel dispose d'un canvas : A toi de choisir et on verra ensuite pour le code.

    A+
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  7. #47
    Membre habitué Avatar de kumo
    Profil pro
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    215
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 215
    Points : 125
    Points
    125
    Par défaut
    c'est bon j'ai réussi en utilisant une listbox, qui contiendra toujours un élément, l'utilsateur croira que c'est une zone de texte, mais non
    J'ai juste eu à modifé certains trucs ^^
    Comme on dit, "L'informaticien est un fainéant intelligent"
    Voici les meilleurs sources du monde:
    Les tutos- La F.A.Q
    et aussi
    Google...si si c'est bien essaye....c'est satisfait ou satisfait

    lisez les règles et n'oubliez pas le

  8. #48
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 263
    Points
    3 263
    Par défaut
    Re-Salut,

    A Kumo : T'aurais également pu récupérer dans le code de la proc ListBox1DrawItem la partie incluse dans le bloc with ListBox1.Canvas do ... en y supprimant le if Odd(Index) then ... else qui ne servait que pour les bandes alternées bleu/blanc et remplacer with ListBox1.Canvas do ... par MonTruc.canvas do ... où 'MonTruc' est n'importe quel objet dont le canvas est accessible : TForm, TLabel, TBitMap et ainsi de suite. Cela présenterait l'intérêt de donner une procédure réutilisable quelle que soit l'objet qui dispose d'un canvas et qu'on peut appeller ensuite avec une seule ligne de code.

    A+
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  9. #49
    Membre habitué Avatar de kumo
    Profil pro
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    215
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 215
    Points : 125
    Points
    125
    Par défaut
    ok
    mais pourrai tu m'expliquer s'il te plait ce qu'est ce "canvas" et a quoi il sert?
    et pour quels objets il est accessible?
    car moi au debut je voulais faire une simple textbox...
    merci à toi
    Voici les meilleurs sources du monde:
    Les tutos- La F.A.Q
    et aussi
    Google...si si c'est bien essaye....c'est satisfait ou satisfait

    lisez les règles et n'oubliez pas le

  10. #50
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 263
    Points
    3 263
    Par défaut
    Salut,

    A Kumo :

    1)
    qu'est ce "canvas" et a quoi il sert?
    Dans l'aide Delphi tu trouveras je cite :
    TCanvas fournit une surface de dessin abstraite pour les objets qui doivent restituer leurs propres images.
    ... c'est donc une surface située en mémoire et sur laquelle on peut tracer des traits, des ellispses, des polygones ou du texte qui s'afficheront dans l'objet propriétaire du canvas.

    2)
    et pour quels objets il est accessible?
    ... pour vérifier que ton objet est propriétaire d'un canvas accessible par exemple un Label il y a deux façons :
    a ) suffit de taper n'importe où dans ton code TLabel tu places le curseur-souris sur ce mot et tu fais F1 : ça t'ouvre l'aide-Delphi à la bonne page et tu regardes dans 'Propriétés' si canvas y figure (ou au-lieu d'utiliser la touche F1 avec un click-souris-droite sur le mot ça ouvre un menu surgissant où se trouve "Rechercher une rubrique F1" qui mène à la même page)
    b) ou bien lorsque tu tapes lentement Label1. après avoir tapé le point final il apparait une lucarne avec le nom de toutes les propriétés et méthodes associées aux labels (faut marquer une petite pause après avoir tapé le point car si tu tapes un seul caractère de plus la lucarne n'apparaît pas et en plus il faut que le Label1. soit tapé à l'intérieur d'une procédure commençant par TFormX...)

    A+
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  11. #51
    Membre habitué Avatar de kumo
    Profil pro
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    215
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 215
    Points : 125
    Points
    125
    Par défaut
    je comprends pas quand je fais la meme chose sur une fiche 2, c'est a dire avec un bouton, une listebox etcc.. avec les memes noms ou pas, il me met les chiffres en exposant et non plus en indice??
    Voici les meilleurs sources du monde:
    Les tutos- La F.A.Q
    et aussi
    Google...si si c'est bien essaye....c'est satisfait ou satisfait

    lisez les règles et n'oubliez pas le

  12. #52
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 263
    Points
    3 263
    Par défaut
    Salut,

    A Kumo :
    je comprends pas quand je fais la meme chose sur une fiche 2, c'est a dire avec un bouton, une listebox etcc.. avec les memes noms ou pas, il me met les chiffres en exposant et non plus en indice??
    ... puisque hier tu disais
    c'est bon j'ai réussi en utilisant une listbox
    cela signifie que lors des copier-coller vers ta fiche 2 t'as dû modifier un truc par inadvertance.
    ... et comme tu ne postes pas le code de cette 2ème fiche, c'est tout ce qu'on peut dire jusqu'à présent.

    A+
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  13. #53
    Membre habitué Avatar de kumo
    Profil pro
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    215
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 215
    Points : 125
    Points
    125
    Par défaut
    ben non j'ai rien oublié ou changé
    voici le code de la fiche 1
    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
     
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, OleCtrls, SHDocVw, HTTPApp;
     
    type
      TForm1 = class(TForm)
      Label1: TLabel;
      ListBox1: TListBox;
      choix: TButton;
        Button1: TButton;
     
     
      procedure ListBox1DrawItem(Control: TWinControl; Index: Integer;
        Rect: TRect; State: TOwnerDrawState);
      procedure choixClick(Sender: TObject);
        procedure Button1Click(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
      t: array[0..9] of string=('HNO3','H2SO4','FeSO4','O2','CH4','H2O','Fe6','C3H6O',
      'C6H6','C6H1206');
     
    implementation
     
    uses Unit2;
     
    {$R *.DFM}
     
     
     
     
     
    procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
      Rect: TRect; State: TOwnerDrawState);
    const     num = ['1'..'9'];
    var       Texte : string; c : Char; i,w,h : byte; x,y : integer;
    begin     ListBox1.Style:=(lbOwnerDrawFixed);
              with ListBox1.Canvas do
              begin Font.Color:=clBlack; // Couleur de fonte
                    if Odd(Index) then Brush.Color:=clAqua   // Couleur d'arrière plan
                                  else Brush.Color:=clWhite; // alternée bleu/blanc
                    FillRect(Rect); // Remplit le rectangle de l'Index sur canvas avec Brush.color
                    // Texte de l'Item
                    Texte:=ListBox1.Items[0];
                    Font.name:='Arial';
                    x:=Rect.Left+3; y:=Rect.Top;
                    for i:=1 to length(Texte) do
                    begin c:=Texte[i];
                          if Not (c in Num) then // Symboles en position normale
                          begin Font.Size:=12;
                                TextOut(x, y, c);
                                w:=TextWidth(c); x:=x+w;
                          end else // indices numériques
                          begin Font.Size:=8; h:=TextHeight(c);
                                TextOut(x, Rect.Bottom - h, c);
                                w:=TextWidth(c); x:=x+w;
                          end;
                    end;
              end;
    end;
     
     
    procedure TForm1.choixClick(Sender: TObject);
    var
    z:integer;
    begin
    randomize;
    z:=random(10);
    Listbox1.Items.Add(t[z])  ;
    ListBox1DrawItem(ListBox1,z,ListBox1.ItemRect(0),[odDefault]);
    choix.visible:=false;
    end;
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    form2.show;
    end;
     
    end.
    et voici celui de la fiche 2

    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
     
    unit Unit2;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls;
     
    type
      TForm2 = class(TForm)
        Button1: TButton;
        Label1: TLabel;
        laliste: TListBox;
        procedure Button1Click(Sender: TObject);
        procedure lalisteDrawItem(Control: TWinControl; Index: Integer;
          Rect: TRect; State: TOwnerDrawState);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form2: TForm2;
      tmol: array[0..9] of string=('HNO3','H2SO4','FeSO4','O2','CH4','H2O','Fe6','C3H6O',
      'C6H6','C6H1206');
     
    implementation
     
    {$R *.DFM}
     
    procedure TForm2.Button1Click(Sender: TObject);
    var
    z:integer;
    begin
    randomize;
    z:=random(10);
    laliste.Items.Add(tmol[z])  ;
    lalisteDrawItem(laliste,z,laliste.ItemRect(0),[odDefault]);
     
    end;
     
    procedure TForm2.lalisteDrawItem(Control: TWinControl; Index: Integer;
      Rect: TRect; State: TOwnerDrawState);
    const     num = ['1'..'9'];
    var       Texte : string; c : Char; i,w,h : byte; x,y : integer;
    begin
              with laliste.Canvas do
              begin Font.Color:=clBlack; // Couleur de fonte
                    if Odd(Index) then Brush.Color:=clAqua   // Couleur d'arrière plan
                                  else Brush.Color:=clWhite; // alternée bleu/blanc
                    FillRect(Rect); // Remplit le rectangle de l'Index sur canvas avec Brush.color
                    // Texte de l'Item
                    Texte:=laliste.Items[0];
                    Font.name:='Arial';
                    x:=Rect.Left+3; y:=Rect.Top;
                    for i:=1 to length(Texte) do
                    begin c:=Texte[i];
                          if Not (c in Num) then // Symboles en position normale
                          begin Font.Size:=12;
                                TextOut(x, y, c);
                                w:=TextWidth(c); x:=x+w;
                          end else // indices numériques
                          begin Font.Size:=8; h:=TextHeight(c);
                                TextOut(x, Rect.Bottom - h, c);
                                w:=TextWidth(c); x:=x+w;
                          end;
                    end;
              end;
    end;
    end.
    Voici les meilleurs sources du monde:
    Les tutos- La F.A.Q
    et aussi
    Google...si si c'est bien essaye....c'est satisfait ou satisfait

    lisez les règles et n'oubliez pas le

  14. #54
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 263
    Points
    3 263
    Par défaut
    Salut,

    Première remarque : Dommage que tu aies récupéré la 1ère version du code et non la dernière améliorée suite à un remarque de Sjrd.

    Deuxième remarque :
    - Dans ta procedure TForm1.ListBox1DrawItem(); il y a la ligne ListBox1.Style := (lbOwnerDrawFixed);
    - mais dans la procedure TForm2.lalisteDrawItem(); il manque l'équivalent de cette ligne.

    Si tu veux la dernière version du code la voici :
    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
    58
    59
    60
    61
    62
    63
     
    // Pour ListBox à couleurs alternées + Formules de molécules chimiques ou de
    // réactions chimiques avec particules en indice et en exposant : OK testé marche
    procedure TfrmOcc.ListBox1DrawItem(Control: TWinControl; Index: Integer;
      Rect: TRect; State: TOwnerDrawState);
    type      TNiveau = (nMed, nSup, nInf); // niveau d'affichage
    const     num = ['1'..'9','+','-'];
    var       Texte : string;
              cc,cp : Char; // caract : courant, précédent
              niveau : TNiveau;
              i,w,h : byte; x,y : integer;
    begin     ListBox1.Style:=(lbOwnerDrawFixed);
              with ListBox1.Canvas do
              begin Font.Color:=clBlack; // Couleur de fonte
                    if Odd(Index) then Brush.Color:=clAqua   // Couleur d'arrière plan
                                  else Brush.Color:=clWhite; // alternée bleu/blanc
                    FillRect(Rect); // Remplit le rect de l'Index sur canvas avec Brush.color
                    // Texte de l'Item
                    Texte:=ListBox1.Items[Index];
                    Font.name:='Arial';
                    x:=Rect.Left+3; y:=Rect.Top; cp:=' ';
                    for i:=1 to length(Texte) do
                    begin cc:=Texte[i];
                          if (Not (cc in Num)) or ((cc in num) and (cp=' '))
                          then niveau:=nMed
                          else begin if ((cp<>' ') and ((cc='+') or (cc='-'))) // H+ Mg++ He2+
                                     then niveau:=nSup
                                     else niveau:=nInf;
                          end;
                          case Niveau Of
                               nMed : begin // caract en position normale
                                            Font.Size:=8;
                                            TextOut(x, y, cc);
                                      end;
                               nInf : begin // caract en indice
                                            Font.Size:=5; h:=TextHeight(cc);
                                            TextOut(x, Rect.Bottom - h, cc);
                                      end;      
                               nSup : begin // caract en exposant
                                            Font.Size:=6; h:=TextHeight(cc);
                                            TextOut(x, Rect.Top-1, cc);
                                      end;
                          end;
                          w:=TextWidth(cc); x:=x+w;
                          cp:=cc;
                    end;
              end;
    end;
     
    // Appel de ListBox1DrawItem :
     
    procedure TfrmOcc.FormActivate(Sender: TObject);
    var       i:integer;
    begin     for i:=0 to ListBox1.Items.Count-1
              do ListBox1DrawItem(ListBox1,i,ListBox1.ItemRect(i),[odDefault]);
    end;
     
    // La syntaxe à respecter pour la saisie des formules est toute simple :
    // - mettre un espace ' ' devant tout caractère ['1'..'9','+','-'] devant être
    //   affiché au même niveau que les caractères alphabétiques,
    // - ne mettre aucun espace devant un '+' ou un '-' s'il doit être affiché en exposant,
    // - ne mettre aucun espace devant un caractère numérique devant être affiché en indice.
    //En bref suffit d'écrire comme si on rédigeait un manuscrit sans balises-codes.
    A+

    Pour info : J'envisage de fignoler encore ce code pour placer les indices à la verticale des exposants et pour remplacer Truc++++++++ en Truc8+ avec le '8+' en exposant. Je le posterai ici lorsque ce sera Ok.
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  15. #55
    Membre habitué Avatar de kumo
    Profil pro
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    215
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 215
    Points : 125
    Points
    125
    Par défaut
    oui la ligne manquante je l'ai ajouté, le defaut venait pas de la,
    sans la ligne la il me met les chiffres normalement, mais avec il me les met en exposant et non en indice comme avec la fiche 1,
    bon je vais voir ce dernier code
    Voici les meilleurs sources du monde:
    Les tutos- La F.A.Q
    et aussi
    Google...si si c'est bien essaye....c'est satisfait ou satisfait

    lisez les règles et n'oubliez pas le

  16. #56
    Membre habitué Avatar de kumo
    Profil pro
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    215
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 215
    Points : 125
    Points
    125
    Par défaut
    ah c'est bon ça fonctionne avec le code que tu m'a proposé
    merci beaucoup
    en tout cas je suis toujours a l'affut qi jamais tu le change comme tu dis
    Voici les meilleurs sources du monde:
    Les tutos- La F.A.Q
    et aussi
    Google...si si c'est bien essaye....c'est satisfait ou satisfait

    lisez les règles et n'oubliez pas le

  17. #57
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 263
    Points
    3 263
    Par défaut
    Re-salut,

    A Kumo :
    ça fonctionne avec le code ... en tout cas je suis toujours a l'affut si jamais tu le changes comme tu dis
    ... pour l'instant je suis scotché sur le Forum
    ... mais je m'y mettrai dès que le quitterai ce qui ne devrait d'ailleurs pas tarder.

    A+
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  18. #58
    Membre habitué Avatar de kumo
    Profil pro
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    215
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 215
    Points : 125
    Points
    125
    Par défaut
    je voudrais augmenter la taille des caracteres car c'est trop petit, mais là quand je les augmente, ça me chamboule tout, il me les met en exposant etc...
    ce que je change c'est la fin, la ou il y a les "font size", c'est bien là que je dois modifier?
    Voici les meilleurs sources du monde:
    Les tutos- La F.A.Q
    et aussi
    Google...si si c'est bien essaye....c'est satisfait ou satisfait

    lisez les règles et n'oubliez pas le

  19. #59
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 263
    Points
    3 263
    Par défaut
    Re-Salut,

    Pour la taille des caracteres tu peux t'inspirer du code suivant qui n'est pas encore achevé mai qui règle le problème de la taille à condition de choisir dans l'Inspecteur d'objets pour la ListBox une Fonte True-Type comme Arial par ex.
    Base toi sur les passages en vert dans ce 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
    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    // Pour ListBox à couleurs alternées + Formules de molécules chimiques ou de
    // réactions chimiques avec particules en indice et en exposant : EN COURS DE MISE AU POINT
    procedure TfrmGenP.ListBox1DrawItem(Control: TWinControl; Index: Integer;
      Rect: TRect; State: TOwnerDrawState);
    // Nécessite d'utiliser une fonte True-Type comme Arial
    type      TNiveau = (nMed, nSup, nInf); // niveau d'affichage
    const     num = ['1'..'9','+','-'];
    var       Formule : string; extr : shortString;
              cc,cp : Char; // caract : courant, précédent
              niveau : TNiveau;
              w,h,nIons : byte; i,x,y,xss, FontSizeMed, Len : integer;
    begin     ListBox1.Style:=(lbOwnerDrawFixed);
              with ListBox1.Canvas do
              begin Font.Color:=clBlack; // Couleur de fonte
                    if Odd(Index) then Brush.Color:=clAqua   // Couleur d'arrière plan
                                  else Brush.Color:=clWhite; // alternée bleu/blanc
                    FillRect(Rect); // Remplit le rect de l'Index sur canvas avec Brush.color
                    // Texte de l'Item
                    Formule:=ListBox1.Items[Index];
                    //Font.name:='Arial'; < à supprimer ici puisqu'on va utiliser le choix via l'Inspecteur d'objets                
                    FontSizeMed:=Font.Size;
                    Len:=length(Formule);
                    x:=Rect.Left+3; y:=Rect.Top; cp:=' ';
                    i:=0; extr:='';
                    repeat inc(i);
                          cc:=Formule[i];
                          while (Not (cc in Num)) or ((cc in num) and (cp=' '))
                          do // caract en position normale
    
                          begin Font.Size:=FontSizeMed;
    
                                TextOut(x, y, cc);
                                redTrace.Lines.Add(cc);
                                w:=TextWidth(cc); x:=x+w; xss:=x; cp:=cc;
                                inc(i); if i>Len then EXIT
                                        else cc:=Formule[i];
                          end;
    
                          while (cp<>' ') and (cc in Num) and (cc<>'+') and (cc<>'-') and (i<=Len) do
                          // caract en indice
                          begin Font.Size:=FontSizeMed div 2;
                                h:=TextHeight(cc);
                                TextOut(x, Rect.Bottom - h, cc);
                                w:=TextWidth(cc); x:=x+w; cp:=cc;
                                inc(i); if i>Len then EXIT
                                        else cc:=Formule[i];
                          end;
    
                          nIons:=0; // Ions '+' comptage
                          while (cp<>' ') and (cc='+') and (i<=Len) do
                          begin inc(nIons); Inc(i); cp:=cc;
                                if i<=Len then cc:=Formule[i];
                          end;
                          if nIons>0 then // Ions '+' en exposant
                          begin Font.Size:=FontSizeMed div 2;                            if nIons=1 then extr:='+'
                                else extr:=intToStr(nIons)+'+';
                                TextOut(xss, Rect.Top, extr);
                                w:=TextWidth(extr); x:=x+w;
                                if i>Len then EXIT;
                          end;
    
                          nIons:=0; // Ions '-' comptage
                          while (cp<>' ') and (cc='-') and (i<=Len) do
                          begin inc(nIons); Inc(i); cp:=cc;
                                if i<=Len then cc:=Formule[i];
                          end;
                          if nIons>0 then // Ions '-' en exposant
                          begin Font.Size:=FontSizeMed div 2;
                                if nIons=1 then extr:='-'
                                else extr:=intToStr(nIons)+'-';
                                TextOut(xss, Rect.Top, extr);
                                w:=TextWidth(extr); x:=x+w; xss:=x;
                                if i>Len then EXIT;
                          end;
                    until i>=Len;
              end;
    end;
    ... pour le reste ce code n'est pas encore au point car il me transforme H2SO4 en H2O4 (ça fait un moment que je galère)
    ... par contre il me remplace bien Truc22++++ en Truc224+ avec le '4+' en exposant et à la verticale du 22.

    A+
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  20. #60
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 263
    Points
    3 263
    Par défaut Formules chimiques dans ListBox ou autre Canvas
    Bonjour,

    Voiçi un code utilisable pour afficher des formules de réactions chimiques dans une TListBox ou dans le canvas de n'importe quel objet dont le canvas est accessible (TForm, TLabel, TBitaMap, etc) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      EDIT du 12/01/2008 : Code supprimé suite à amélioration
      voir message suivant pour nouveau code 
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
                                                  2-
    2SO4-- comme string en entrée sera affiché 2SO4
    mais avec l'exposant 2- situé dans la hauteur du '2SO'
    ... et ceci sans nécessiter de balises-code
    ... suffit de respecter la syntaxe de saisie des strings des formules résumée dans le commentaire introductif
    Le code donne un exmple d'utilisation avec une ListBox et un autre avec un TLabel.

    A+
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

+ Répondre à la discussion
Cette discussion est résolue.
Page 3 sur 4 PremièrePremière 1234 DernièreDernière

Discussions similaires

  1. Réponses: 2
    Dernier message: 19/04/2013, 11h03
  2. Problème de récupération d'indice dans une listbox
    Par MarieKisSlaJoue dans le forum ASP.NET
    Réponses: 13
    Dernier message: 28/02/2013, 13h18
  3. Afficher du texte avec indices et exposants dans un DrawingVisual
    Par vinlap dans le forum Windows Presentation Foundation
    Réponses: 1
    Dernier message: 22/05/2009, 09h56
  4. Indice et Exposant dans un Label
    Par hochimi dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 05/07/2007, 18h25
  5. Indice et exposant dans un champ
    Par sylvpat dans le forum Access
    Réponses: 5
    Dernier message: 01/12/2005, 11h38

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