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

Contribuez Pascal Discussion :

Conversion de numéros de colonnes: notation A1 <-> numéro de colonne; pseudo classe de couleurs


Sujet :

Contribuez Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2013
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2013
    Messages : 413
    Billets dans le blog
    2
    Par défaut Conversion de numéros de colonnes: notation A1 <-> numéro de colonne; pseudo classe de couleurs
    Conversion de numéros de colonnes: notation A1 <-> numéro de colonne (utilisé pour les échanges avec tableurs et pour repérage type plan de ville ou bataille navale)

    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
     
    function IntegerToXLSColumn(const Value: integer): string;
    { Code adapted from: http://stackoverflow.com/questions/12796973/vba-function-to-convert-column-number-to-letter }
    var
      n: Integer;
      c: byte;
    begin
      Result := '';
      n := Value;
      while (n > 0) do
      begin
        c := (n - 1) mod 26;
        Result := char(c + ord('A')) + Result;
        n := (n - c) div 26;
      end;
    end;
    // Validé
    // Retourne Somme(i=0;i=n-1; Ci * B**i)
    function XLSColumnToInteger(const Value: string): integer;
    var
      n, i: Integer;
      c: byte;
      S: String;
      function QIntPower(const Base, Expo: integer): integer;
      var
        p: Integer;
      begin
        if (Expo = 0) then exit(1);
        Result := 1;
        for p := 0 to Expo-1 do Result *= Base;
      end;
    begin
      Result := 0;
      n := length(Value);
      if (0 = n) then exit;
      S := UpperCase(Trim(Value));
      for i := 0 to n-1 do
      begin
        C := Ord(S[n-i]) - 64;
        Result += QIntPower(26, i) * C;
      end;
    end;



    Pseudo classe de gestion de couleurs TGHTopoColor, avec des fonctions de conversion:

    Interface:
    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
     
    // Couleurs GHTopo
    type TGHTopoColor = record   // TGHTopoColor: Unifie tous les types de couleur et leurs fonctions
      Red     : byte;
      Green   : byte;
      Blue    : byte;
      Alpha   : byte;
      function  getFloatBlue(): double;  // retourne un réel entre 0 et 1
      function  getFloatGreen(): double;
      function  getFloatRed(): double;
      function  getFloatAlpha(): double;
     
      procedure setFrom(const R, G, B: byte; const A: byte); overload;
      procedure setFrom(const C: TColor; const A: byte); overload;
      function  toTColor(): TColor;
      procedure setFromStrGHTopoColor(const S: string; const qDefault: TColor);
      function  toStrGHTopoColor(): string;
      procedure setOpacity(const O: byte);
      function  toHTMLColor(): string;
      function  toKMLColor(): string;
      function  toSVGColor(): string;
      function  toGrayScale(): byte;
    end;
    Implementation:
    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
     
    { TGHTopoColor }
     
    procedure TGHTopoColor.setFrom(const R, G, B: byte; const A: byte);
    begin
      self.Red   := R AND 255;
      self.Green := G AND 255;
      self.Blue  := B AND 255;
      self.Alpha := A AND 255;
    end;
     
    procedure TGHTopoColor.setFrom(const C: TColor; const A: byte);
    begin
      self.setFrom(Graphics.Red(C), Graphics.Green(C), Graphics.Blue(C), A);
    end;
     
    function TGHTopoColor.toTColor(): TColor;
    begin
      result := RGBToColor(self.Red, self.Green, self.Blue);
    end;
    // récupère les RGB depuis les représentations $RRRGGGBBB et #RRRGGGBBB
    procedure TGHTopoColor.setFromStrGHTopoColor(const S: string; const qDefault: TColor);
    begin
      if (length(S) < 10) then // la notation Pascal exige 1 + 3*3 caractères
        self.setFrom(clDefault, 255)
      else
        self.setFrom(StrToIntDef(Copy(S, 2, 3), Graphics.Red(qDefault)),
                     StrToIntDef(Copy(S, 5, 3), Graphics.Green(qDefault)),
                     StrToIntDef(Copy(S, 8, 3), Graphics.Blue(qDefault)),
                     255)
    end;
     
     
    function TGHTopoColor.toStrGHTopoColor(): string;
    begin
      Result := Format('$%.3d%.3d%.3d', [self.Red, self.Green, self.Blue]);
    end;
     
    procedure TGHTopoColor.setOpacity(const O: byte);
    begin
      self.Alpha := O and 255;
    end;
     
    function TGHTopoColor.toHTMLColor(): string;
    begin
      Result := format('#%.2X%.2X%.2X', [self.Red, self.Green, self.Blue]);
    end;
     
    function TGHTopoColor.toKMLColor(): string;
    begin
      Result := Format('<color>%.2X%.2X%.2X%.2X</color>',[self.Alpha, self.Blue, self.Green, self.Red]);
    end;
     
    function TGHTopoColor.toSVGColor(): string;
    const m = 1 / 256.0;
    begin
      Result := Format(' rgb(%.2f%%, %.2f%%, %.2f%%)', [self.Red * m , self.Green * m , self.Blue * m]);
      Result := StringReplace(Result, DefaultFormatSettings.DecimalSeparator, '.', [rfReplaceAll]);
    end;
     
    function TGHTopoColor.toGrayScale(): byte; //Convertit une couleur en niveaux de gris; méthode NTSC.
    begin
      Result := round(0.30 * self.Red + 0.59 * self.Green + 0.11 * self.Blue);
    end;
    function TGHTopoColor.getFloatRed(): double;
    begin
      Result := self.Red   / 256.0;
    end;
    function TGHTopoColor.getFloatGreen(): double;
    begin
      Result := self.Green / 256.0;
    end;
    function TGHTopoColor.getFloatBlue(): double;
    begin
      Result := self.Blue  / 256.0;
    end;
    function TGHTopoColor.getFloatAlpha(): double;
    begin
      Result := self.Alpha / 256.0;
    end;

  2. #2
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 173
    Billets dans le blog
    9
    Par défaut
    Bonjour ! Merci pour cette contribution.

    Si je comprends bien, ce sont deux choses différentes, n'est-ce pas ? Peut-être vaudrait-il mieux les présenter dans deux discussions séparées, pour plus de clarté...

    Et, si vous avez le temps, pourriez-vous éventuellement proposer un projet de démonstration pour chacune des unités ?

Discussions similaires

  1. Réponses: 5
    Dernier message: 30/06/2017, 10h14
  2. [XL-2003] Conversion fichier texte ligne / colonne
    Par brownthefou dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 05/04/2012, 21h10
  3. Réponses: 2
    Dernier message: 14/07/2011, 17h57
  4. [XL-2007] Conversion de matrice en colonnes triées
    Par com-ace dans le forum Excel
    Réponses: 1
    Dernier message: 16/03/2010, 11h21

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