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 :

stringgrid, somme de plusieurs colonnes


Sujet :

Delphi

  1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur validation
    Inscrit en
    Avril 2009
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur validation
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 65
    Points : 45
    Points
    45
    Par défaut stringgrid, somme de plusieurs colonnes
    bonjour a tous ,


    je continue avec mes stringgrid pour ceux qui ont déjà eu a traiter quelqu'uns de mes sujets...

    La je demande pas une solution concrete mais des éléments ou des pites afin de réaliser un calcul ! le but étant de recréer un environnement similaire a excel ..

    j'ai donc ma stringgrid dynamique ou je peu faire des calculs sur les sélections que je fait mais je n'arrive pas a faire la somme pour deux séléctions distinctes...exmple colonne 1 et colonne 4 allant de la ligne 3 a 9 . et on insert le résultat dans une colonne que l'on selectionne.


    et pouvoir stocker les calculs quelque par de maniere que l'orsqu'on édite une cellule ou l'ont a effectuer un calcul au lieux d'avoir le résultat qui s'affiche on retrouve le calcul qu'on a effectuer a la base.. je ne sais pas comment stocker ces calculs et qu'on y faire apel suivant la cellule selectionnée et dc pouvoir stocker autant de calculs que possible et les réafficher losqu'on édite la cellule voulu...

    c'est peu etre mal expliqué ..faites signes dans ce cas!!!


    merci pour les réponses qui pourrais me faire avancer car je ne sais pas dans quel sens m'y prendre

    © Seb ®

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 560
    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 560
    Points : 25 156
    Points
    25 156
    Par défaut
    Tu devrais exploiter la propriété Objects de la TStringGrid qui te permettrait de stocker des données pour chaque cellules de la grille !

  3. #3
    Membre du Club
    Homme Profil pro
    Ingénieur validation
    Inscrit en
    Avril 2009
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur validation
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 65
    Points : 45
    Points
    45
    Par défaut
    ah ca m'a l'air interessant mais la je ne sais pas trop comment gerer cette proprietée... j'ai essayer de voir avec l'aide delphi mais ils sont d'un précis ...a faire peur ...dc j'ai pas trop compris ..
    *

    si t'a un petit exemple genre comment stocker un texte et le recupérer avec cette proprietée... ca serais parfait ! j'ai un probleme quand j'associe un string a cette propriété "compatibilitée Tcaption et Tobject"


    © Seb ®

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 560
    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 560
    Points : 25 156
    Points
    25 156
    Par défaut
    il faut que tu fasse une classe d'objet, genre un TCellObject avec des propriétés pour stocker ce que tu as besoin, ... ça donnerait un code genre

    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
    type
      TCellObject = class(TObject)
        Caption: string;
        IsFormule: Boolean;
        Calcul: string;
      end;
     
    ... 
     
    ObjCell := TCellObject.Create();
    ObjCell.Caption := '';
    ObjCell.IsFormule := True;
    ObjCell.Calcul := 'A1 + B2';
    Grid.Objects[0, 0] := ObjCell;
     
    ...
     
    if TCellObject(Grid.Objects[0, 0]).IsFormule then
      TCellObject(Grid.Objects[0, 0]).Caption := RunCalcul(TCellObject(Grid.Objects[0, 0]).Calcul);
     
    Grid.Cells[0, 0] := TCellObject(Grid.Objects[0, 0]).Caption;
     
    ...
    Il faut ensuite libérer ces TCellObject, utiliser une TObjectList pourrait faciliter la vie ...

  5. #5
    Membre du Club
    Homme Profil pro
    Ingénieur validation
    Inscrit en
    Avril 2009
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur validation
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 65
    Points : 45
    Points
    45
    Par défaut
    salut ,

    je te remercie pour ton code que tu ma donnée mais je ne suis pas familier avec les objets. je me suis dc un peu renseigner pour mieux comprendre tout ca!


    j'ai un leger probleme encore ..tu fait apelle a une fonction RunCalcul.. mais je ne vois pas exactement comment elle marche. Ma fonction de calcul récupere un string et la j'envoi un pointeur . a moins que runcalcul soit une fonction de la classe objet..


    © Seb ®

  6. #6
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 560
    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 560
    Points : 25 156
    Points
    25 156
    Par défaut
    J'ai supposé qu'un jour, TU feras une fonction RunCalcul pour exécuter des formules comme EXCEL, ce n'est qu'un exemple, cette fonction n'existe pas !

  7. #7
    Membre du Club
    Homme Profil pro
    Ingénieur validation
    Inscrit en
    Avril 2009
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur validation
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 65
    Points : 45
    Points
    45
    Par défaut
    ben j'execute déjà mes calculs en faisant une reconnaissance des champs saisies dans la cellule. je récuper le text et je l'envoi dans ma fonction qui traite chaques caractères pour effectuer les calculs voulus.


    et du coup j'arrive pas a adapter ton objet a ma fonction qui recupere un string.


    le probleme est que je veux pouvoir lorsque j'inscris un calcul dans la cellule vu qu"il est automatiquement remplacé par son résultat le stocker dans ton objet par exemple et le faire réaparaitre dans l'evenement FrameDbclick de ma stringgrid. ce qui fait que quand un calcul est associé a la cellule le calcul remplace le résultat.et je bugg vraiment ! j'ai essayer de taffer sur ton code et l'idée que tu ma donnée mais je n'arrive vraiment pas a gerer les différents elements.


    Si jamais t'a une FAQ ou un sujet qui explique comment traiter ce type d'objet ou un cas similaire pour que je comprenne mieux ca serais super !


    merci pour la réponse et pour celles a venir


    © Seb ®

  8. #8
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 434
    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 434
    Points : 5 846
    Points
    5 846
    Par défaut
    salut

    runcalcul n'est qu'une fonction permettant le calcul
    fait une recherche sur évaluateur d'expression

    son exemple n'est pas correct du a la récursivité de la première cellule

    mais l'exemple étais tout de même parlant
    en le corrigeant comme ceci
    B1+B2
    cela signifie que tu va faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Grid.Cells[0, 0] := FlaotTostr(strtofloat(Grid.Cells[1,0]) + strtofloat(Grid.Cells[1,1])

    @+ Phil

  9. #9
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 560
    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 560
    Points : 25 156
    Points
    25 156
    Par défaut
    Tu peux stocker ce que tu veux dans la propriété Objects, ce futur TCellObject peut contenir ce que tu veux, et en fonction de flag ou du mode de fonctionnement, tu mets dans Cells, la donnée que tu veux afficher, mais en fait ce n'est que de l'affichage, TOUT est dans les Objects ...

    Pose le tout sur papier, ne cherche pas à te limiter, si tu as une idée, on peut te donner du code ou une piste pour avancer ...

    tu peux aussi comme dans Excel, faire que lorsque tu clique, tient, moi je l'ai fait aussi, voici un code simplifié pù j'affiche dans des TLabeledEdit le contenu de l'objet ... et j'y ai mis plein de chose

    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
     
    procedure TViewerLiteForm.GridSelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean);
    begin
      EdCellValue.Text := Grid.Cells[ACol, ARow];
      if Grid.Objects[ACol, ARow] is TCellObject then
      begin
        EdCellFormule.Text := (Grid.Objects[ACol, ARow] as TCellObject ).Formule;
        EdCellValeur.Text := (Grid.Objects[ACol, ARow] as TCellObject ).Valeur;
      end
      else
      begin
        EdCellFormule.Text := '';
        EdCellValeur.Text := '';
      end;
    end;
     
    end.

  10. #10
    Membre du Club
    Homme Profil pro
    Ingénieur validation
    Inscrit en
    Avril 2009
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur validation
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 65
    Points : 45
    Points
    45
    Par défaut
    c'est pas une blague mais la je nage vraiment avec ces petits bout de code...



    c'est une grande brasse coulée....dc j'vais esayer de me tirer la tete hors de l'eau en comprenant ..j'ai des bouts de codes que je comprend pas...que j'arrive pas a adapter a mon appli..

    pour ca que je demandais si y'avais pas un petit truc pour apprendre vite fait la principe de vos objets qui sont créées comment on en apelle les différents composants après je pense pouvoir associer chaques éléments aux evenement que je veux ... mais le tout et d'arriver a comprendre tout ca..

    Pour ce qui est de ta réponse "anapurna" j'ai rien pigé et je vois pas énormement en quoi ca s'adapte a un calcul qui est entrée directement dans la cellule de la stringgrid vu que tu traite des cellules et des calculs prédéfinis (exemple une addition) mais calculs sont déjà effecuter en aval de ma saisie


    © Seb ®

  11. #11
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 560
    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 560
    Points : 25 156
    Points
    25 156
    Par défaut
    Faire un Tableau façon Excel n'est pas simple, tu dois passer par une phase d'apprentissage avant, en particulier tout ce qui concerne la POO dans Delphi ...

  12. #12
    Membre du Club
    Homme Profil pro
    Ingénieur validation
    Inscrit en
    Avril 2009
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur validation
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 65
    Points : 45
    Points
    45
    Par défaut
    yes c'est bien pour ca que je vous demande si vous avez pas des tutorials dans ce domaine ... qui pourrais avoir une relation ou qui peuvent m'aider a faire tout ca...

  13. #13
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 434
    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 434
    Points : 5 846
    Points
    5 846
    Par défaut
    salut
    dis nous ce qui te chagrine

    pour définir une class personnalisé selon tes besoin (il devient objet lors de son instanciation)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    type
      TCellObject = class(TObject)
        Caption: string;
        IsFormule: Boolean;
        Calcul: string;
      end;
    Pour l'utiliser
    creation et assignation du calcul
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    var
      ObjCell : TCellObject;
    begin
      //instanciation d'objet
      ObjCell := TCellObject.Create();
      // initialisation des différents champs
      ObjCell.Caption := '';
      ObjCell.IsFormule := True;
      ObjCell.Calcul := 'A1 + B2';
      // assignation de l'objet a la grille en position [0,0]
      Grid.Objects[0, 0] := ObjCell;
    end;
    Pour lancer le calcul afin d'inscrire le résultat la propriété cation de l'objet
    TCellObject affecté a la grille en position [0,0]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     if assigned(Grid.Objects[0, 0]) Then 
       if (Grid.Objects[0, 0] as TCellObject).IsFormule then
          (Grid.Objects[0, 0] as TCellObject).Caption := RunCalcul(TCellObject(Grid.Objects[0, 0]).Calcul);
      // Runcalcul permet de donner le resultat voulue
    on affecte le résultat trouvé dans la cellule en position [0,0]
    la cellule n'accepte qu'une chaine de caractère
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      Grid.Cells[0, 0] := (Grid.Objects[0, 0] as TCellObject ).Caption;
    @+ Phil

  14. #14
    Membre du Club
    Homme Profil pro
    Ingénieur validation
    Inscrit en
    Avril 2009
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur validation
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 65
    Points : 45
    Points
    45
    Par défaut
    salut ,

    merci pour la réponse ca m'explique un peu mieux le code mais je n'arrive pas a me servir de ces lignes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ObjCell.Caption := '';
      ObjCell.IsFormule := True;
      ObjCell.Calcul := 'A1 + B2';
    quand on crée l'objet.

    donc j'ai plusieurs petites questions.. Quand je créée cet objet je peu l'initialiser en fonction de ce que je marque dans ma cellule par exemple?? .. genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ObjCell.Calcul := activegrid.cell[Activegrid.selection.top,activegrid.selection.left]

    et après affecté le calcul a ObjCell.caption et le tout pour chaques cellules ou je veux faire le calcul . je voulais aussi savoir si jamais j'ai fait 4 traitement par exemple sur 4 cellules différentes avec des calculs différents (évidement) si cet objet est capable et renvoyé la proprieté affecté lors de sont calcul précedent.


    J'ai déjà créée une fonction qui reconnai si c'est un calcul ou un text du coup le plus simple je pense serais d'afficher tout le temps une des deux propriété de l'object et stocker l'autre si jamais c'est un calcul pour la réafficher juste sur un evenement spécial .j'ai déjà essayer de faire ceci sur l'evenement "FrameDBclick" mais je n'y suis pas arrivé avec l'objet..

    © Seb ®

  15. #15
    Membre du Club
    Homme Profil pro
    Ingénieur validation
    Inscrit en
    Avril 2009
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur validation
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 65
    Points : 45
    Points
    45
    Par défaut
    J'ai aussi un soucis avec votre fonction RunCalcul .



    J'ai déjà ma fonction qui récupere un string qui effectu un traitement pour calculer en récupérant les coordonées des différentes cellules inscrites dans le calcul. Sauf que la fonction récupere un String et j'ai une erreur de type


    [Erreur] Tableur_01.pas(613): Types incompatibles : 'String' et 'procedure, untyped pointer or untyped parameter'

  16. #16
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 434
    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 434
    Points : 5 846
    Points
    5 846
    Par défaut
    salut

    tu peut effectivement faire ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bjCell.Calcul := activegrid.cell[Activegrid.selection.top,activegrid.selection.left]

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    et après affecté le calcul a ObjCell.caption et le tout pour chaque cellules ou je veux faire le calcul . je voulais aussi savoir si jamais j'ai fait 4 traitement par exemple sur 4 cellules différentes avec des calculs différents (évidement) si cet objet est capable et renvoyé la propriété affecté lors de sont calcul précédent.
    dans le code exemple il met le résultat dans la propriété caption de l'objet
    donc rien ne t'empêche de t'en servir dans un autre calcul


    plutôt que d'utiliser runcalcul pourquoi ne pas utiliser ta propre fonction si tu l'a déjà faite

    @+ Phil

  17. #17
    Membre du Club
    Homme Profil pro
    Ingénieur validation
    Inscrit en
    Avril 2009
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur validation
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 65
    Points : 45
    Points
    45
    Par défaut
    pour ce qui est de la cellule selectionné j'avais fait ca déjà !



    et ce qui est de la fonction de calcul j'ai réussi a me démerder pour passer le calcul a ma propore fonction en prenant une variable intermédiaire .


    Je parlais de runcalcul pour qu'on se comprenne mieux mai j'ai effectivement mis ma propore fonction . j'ai par contre une violation d'adresse lorsque j'exécute mes procédures. je vais essayer de cibler un peu le probleme pour le résoudre !!

    © Seb ®

  18. #18
    Membre du Club
    Homme Profil pro
    Ingénieur validation
    Inscrit en
    Avril 2009
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur validation
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 65
    Points : 45
    Points
    45
    Par défaut
    Hello tout le monde,

    Je viens de réussir un premier cas de figure.ca marche quand j'édite une cellule je rentre le calcul il affiche le résultat puis je réaffiche le calcul quand je double clique dans mma cellule ..c'est nikel SAUF....que j'ai encore des choses inexpliquées ...j'ai mon calcul qui se met aussi dans d'autres cellules si jamais je double clique dans les autres cellules


    voici mes lignes de code pour que tout le monde comprenne peut etre pk il se passe ca...


    Dans le FormShow ou je crée ma stringgrid dynamiquement je donne a chaques objets associées au cellules les parametres de bases que je charge au début.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     //instanciation d'objet
                  ObjCell := TCellObject.Create();
                  // initialisation des différents champs
                  ObjCell.IsFormule := True;
                  for i := 0 to ActiveGrid.RowCount-2 do
                  for j := 0 to ActiveGrid.ColCount-1 do
                  begin
                  ObjCell.Caption :=  ActiveGrid.Cells[j,i] ;
                  ObjCell.Calcul := ActiveGrid.Cells[j,i] ;
                  ActiveGrid.Objects[j,i] := ObjCell;
                  end;
    puis sur le double click d'une cellule

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TTableur.FrameDblClick(Sender: TObject);
    var
      ObjCell : TCellObject;
    begin
        Activegrid.Options :=[goFixedVertLine,goFixedHorzLine,goVertLine,
                  goHorzLine,goRangeSelect,goDrawFocusSelected,goColsizing,
                  GoRowsizing,goRowMoving,
                  goEditing,goTabs];
       Activegrid.cells[Activegrid.Selection.left,Activegrid.Selection.top] :=
       (ActiveGrid.Objects[Activegrid.selection.left,ActiveGrid.Selection.top] as TCellObject).Calcul;
    end;
    quand j'appui sur la touche "entrée"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
      if Key=13 then
      begin
           test := activegrid.cells[ActiveGrid.Selection.left,ActiveGrid.Selection.top];
     
           (ActiveGrid.Objects[Activegrid.selection.left,ActiveGrid.Selection.top] as TCellObject).Calcul
             := test;
            Recuperationcellules(test); //ma procédure de calcul
     
      end;

    puis dans ma procedure de calcul

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     (Activegrid.Objects[Activegrid.selection.Right,ActiveGrid.Selection.Top] as TCellObject ).Caption := inttostr(resultat);
           Activegrid.Cells[Activegrid.selection.Right,ActiveGrid.Selection.Top] := (Activegrid.Objects[0, 0] as TCellObject ).Caption;

    dc j'aimerais savoir pk quand je double clique sur une cellule qui n'a pas de calculs affecté ..j'ai quand même le calcul précédent qui s'affiche alors que j'initialise les cellules avec le texte qu'elles ont au chargement ...

    © Seb ®

  19. #19
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 434
    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 434
    Points : 5 846
    Points
    5 846
    Par défaut
    salut

    Citation Envoyé par sebyo Voir le message
    Hello tout le monde,
    ...

    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
     //instanciation d'objet
                  // initialisation des différents champs
                  for i := 0 to ActiveGrid.RowCount-2 do
                  for j := 0 to ActiveGrid.ColCount-1 do
                  begin
     
                    ObjCell := TCellObject.Create();
                    ObjCell.IsFormule := True;
     
    // il faut une nouvelle instance pour chaque objet 
    // sinon c'est toujour le meme objet que tu modifie 
                    ObjCell.Caption :=  ActiveGrid.Cells[j,i] ;
                    ObjCell.Calcul := ActiveGrid.Cells[j,i] ;
                    ActiveGrid.Objects[j,i] := ObjCell;
                  end;

    puis sur le double click d'une cellule

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TTableur.FrameDblClick(Sender: TObject);
    var
      ObjCell : TCellObject;
    begin
        Activegrid.Options :=[goFixedVertLine,goFixedHorzLine,goVertLine,
                  goHorzLine,goRangeSelect,goDrawFocusSelected,goColsizing,
                  GoRowsizing,goRowMoving,
                  goEditing,goTabs];
       Activegrid.cells[Activegrid.Selection.left,Activegrid.Selection.top] :=
       (ActiveGrid.Objects[Activegrid.selection.left,ActiveGrid.Selection.top] as TCellObject).Calcul;
    end;
    // avec la modif ca devrais mieux marcher

    quand j'appui sur la touche "entrée"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
      if Key=13 then
      begin
           test := activegrid.cells[ActiveGrid.Selection.left,ActiveGrid.Selection.top];
     
           (ActiveGrid.Objects[Activegrid.selection.left,ActiveGrid.Selection.top] as TCellObject).Calcul
             := test;
            Recuperationcellules(test); //ma procédure de calcul
     
      end;

    puis dans ma procedure de calcul

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     (Activegrid.Objects[Activegrid.selection.Right,ActiveGrid.Selection.Top] as TCellObject ).Caption := inttostr(resultat);
           Activegrid.Cells[Activegrid.selection.Right,ActiveGrid.Selection.Top] := (Activegrid.Objects[0, 0] as TCellObject ).Caption;
    ...
    idem plus haut

    © Seb ®

    @+ Phil

  20. #20
    Membre du Club
    Homme Profil pro
    Ingénieur validation
    Inscrit en
    Avril 2009
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur validation
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 65
    Points : 45
    Points
    45
    Par défaut
    yes ca marche bien cette solution !! c'est vrai en y réfléchissant un minimum c'est plus logique de créer autant d'objet qu'il faut ...


    Je cloture ce sujet même si j'ai d'autres problemes qui concerne le sujet que j'avais posé au début car la ca commence a faire un sujet bien long ...y'a déjà une grosse partie de résolu . je vais essayer de trouver un moyen de fair la somme d'une infinité de cellules ou colonnes en fonction de ca que je tape dans ma cellule ... car pour l'instant mon code déchiffre que pour 2 element genre A2+B4 mais si j'ai A2+B5+A10+C4+D1 ca ne prend pas tout en compte lorsque j'exécute mon calcul ...je fait une reconnaissance des caratères avec pos('moncaractere a reconnaitre' , mastring) ca marche bien mais c'est très lourd pour l'étendre a une infinité de calculs...si y'a déjà des solution qui évoluent dynamiquement ou autre je suis preneur d'idée ...

    © Seb ®

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Somme de plusieurs colonnes si deux conditions
    Par VVENZO dans le forum Excel
    Réponses: 2
    Dernier message: 10/03/2011, 09h03
  2. Somme de plusieures colonnes
    Par stephanies_1977 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 07/11/2007, 12h49
  3. somme fonction de plusieur colonne
    Par BOUBOU81 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 25/09/2007, 17h29
  4. [Excel] Somme avec critères de plusieurs colonnes
    Par trihanhcie dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 07/02/2007, 10h55
  5. trier un stringgrid sur plusieurs colonnes
    Par renegade55 dans le forum Composants VCL
    Réponses: 2
    Dernier message: 13/12/2005, 16h30

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