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

Composants VCL Delphi Discussion :

Composant "Compteur à tambours" pour D6


Sujet :

Composants VCL Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Retraité, ancien développeur
    Inscrit en
    Mai 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Retraité, ancien développeur

    Informations forums :
    Inscription : Mai 2015
    Messages : 8
    Par défaut Composant "Compteur à tambours" pour D6
    Bonjour.

    La dernière fois (il y a un peu plus d'un an) que j'ai posé une question en rapport avec ce sujet, le tout a dérivé en une sorte de concours de programmation (avec troll à la clé ! ) vers un logiciel "monstre" qui en fait ne répondait à absolument pas à ce que je cherchais !

    Je dis "compteur" car c'est là que l'on trouvait ce type d'affichage (anciens compteurs kilométriques de voiture, compteurs bleu et d'eau). A l'époque on m'avait développé un compteur ... qui tournait tout seul, avec effets de transition par rotation etc.

    Très beau, mais CE N'EST PAS CE QUE JE CHERCHE !

    J'ai un composant qui s'appelle Counter, mais qui en fait n'est qu'un affichage d'une valeur fournie (sous forme String). Il a été développé en 1997 (!) par un certain M. Alexander Meeder (merci encore à lui), 20 chiffres maxi (nombre paramétrable) et téléchargé chez "Torry" ; dans ses styles d'affichage, il y a le "Nixie" ("Traditional") : joli vintage, mais je préférerais encore les tambours. Il peut afficher à partir d'un bitmap fourni mais hormis le fait que je n'ai pas ce genre de motif (avec les dégradés de la face bombée), il faut apparemment mettre ces motifs dans un fichier qui reste séparé. Or moi je cherche le même type d'AFFICHAGE où ce motif serait intégré, comme le Nixie dans le compteur précédent.

    Les raisons de ma recherche seraient trop longues à expliquer, sachez simplement que je travaille sur un programme qui "fait référence" aux anciens jeux "automatiques" des fêtes foraines des années 60, et ceux-ci avaient ce type de compteur (comme les flippers de la même époque).

    Qui connaît ce genre de composant ? Merci d'avance ...

  2. #2
    Membre Expert

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Août 2002
    Messages : 1 296
    Par défaut
    Avec le composant Counter, tu n'es pas obligé d'avoir un fichier externe:
    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
     
    procedure GradVertical(Canvas: TCanvas; Rect: TRect; FromColor, ToColor: TColor);
    var
      y: Integer;
      dr, dg, db: Extended;
      C1, C2: TColor;
      r1, r2, g1, g2, b1, b2: Byte;
      R, G, B: Byte;
      cnt: Integer;
      RectMiddle: Integer;
    begin
      C1 := FromColor;
      r1 := GetRValue(C1);
      g1 := GetGValue(C1);
      b1 := GetBValue(C1);
      C2 := ToColor;
      r2 := GetRValue(C2);
      g2 := GetGValue(C2);
      b2 := GetBValue(C2);
      dr := (r2 - r1) / Rect.Bottom - Rect.Top;
      dg := (g2 - g1) / Rect.Bottom - Rect.Top;
      db := (b2 - b1) / Rect.Bottom - Rect.Top;
      cnt := 0;
      RectMiddle := Rect.Top + (Rect.Bottom - Rect.Top) div 2;
      for y := 0 to (Rect.Bottom - Rect.Top) div 2 do begin
        R := r1 + Ceil(dr * cnt);
        G := g1 + Ceil(dg * cnt);
        B := b1 + Ceil(db * cnt);
        Canvas.Pen.Color := RGB(R, G, B);
        Canvas.MoveTo(Rect.Left, RectMiddle + y);
        Canvas.LineTo(Rect.Right, RectMiddle + y);
        Canvas.MoveTo(Rect.Left, RectMiddle - y);
        Canvas.LineTo(Rect.Right, RectMiddle - y);
        inc(cnt);
      end;
     
    procedure TForm1.FormCreate(Sender: TObject);
    var
      lBitmap:TBitmap;
      i:integer;
    begin
    lBitmap:=TBitmap.Create;
    lBitmap.Height:=24;
    lBitmap.Width:=180;
    GradVertical(lBitmap.Canvas,lBitmap.Canvas.ClipRect,clWhite, clBlack);
    for i := 0 to 9 do begin
      lBitmap.Canvas.Brush.Style := bsClear;
      lBitmap.Canvas.TextOut(i*18,5, IntToStr(i));
    end;
     MyCounter.UserBitmap:= lBitmap;
    end;
    Après si tu veux un autre rendu, tu peux changer la font, ou le remplissage du fond.

  3. #3
    Membre du Club
    Homme Profil pro
    Retraité, ancien développeur
    Inscrit en
    Mai 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Retraité, ancien développeur

    Informations forums :
    Inscription : Mai 2015
    Messages : 8
    Par défaut Est-ce-que Delphi déraille ?
    Merci pour ta réponse, mais la structure du programme me semble bizarre ... voire fausse : il manque un "end;" à la fin de la première procedure. Bref, tu recalcules chaque fois les motifs. C'est compliqué, mais cela devrait marcher.

    Ceci étant corrigé, j'ai créé un programme "standalone" d'essai, j'ai changé les coordonnées du txtout (ajout de 4 à la première, pour centrer un peu plus les chiffres). Ok, tout baigne ...

    J'ai alors intégré la procedure Gradvertical dans mon programme en la déclarant au début ... OK en ajoutant "Math" dans les "uses" pour Ceil

    Mais c'est quand j'ai intégré la partie de ta FormCreate au début de MA routine d'initialisation que plus rien ne marchait : à la compilation, sur la ligne "lBitmap:=TBitMap.Create;" il passe en rouge, me fait clignoter le curseur avant le point virgule et me répond :
    [Erreur] Unit1c.pas(241): Type Object ou Class requis

    Pourtant cette ligne m'a l'air tout à fait correcte ... Faut-il appeler l'exorciste ou GhostBusters ?

    Au passage, j'ai trouvé "quelque chose d'analogue" sur le net, mais le point commun à tous ces affichages est de recalculer chaque fois les tambours. Je cherche quelque chose de SIMPLE que je pourrais installer une fois pour toutes dans la Lib, comme le counter, et qui intégrerait une fois pour toutes les images. Il y aurait bien moyen de prendre un tel composant et de modifier les bitmaps (dans .res ? ) avant de l'installer mais encore une fois, où les prendre ? Cela existe comme fontes ... en général payantes !

  4. #4
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 941
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 941
    Par défaut
    Tu as une deuxième déclaration portant le nom TBitMap. Trouve l'unité et déplace-la avant Graphics dans les uses.

  5. #5
    Membre du Club
    Homme Profil pro
    Retraité, ancien développeur
    Inscrit en
    Mai 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Retraité, ancien développeur

    Informations forums :
    Inscription : Mai 2015
    Messages : 8
    Par défaut Très compliqué tout cela ...
    En fait merci pour vos efforts, mais comme dit, je préfère KISS : keep It Simple and Stupid.
    Je vais partir d'un compteur simple dont on peut éditer le Bitmap (rcadigi sur torry semble le permettre), et ensuite recompiler le composant en l'intégrant dans le compilateur Delphi. Inutile de recalculer chaque fois !
    J'ai trouvé une police "à tambours", elle s'appelle counter-dial font et traîne sur "n" sites, mais elle est moche et ne permet pas de faire des images de 24 points de haut (illisible). Quelqu'un a-t-il une autre idée ? Autre que de générer à nouveau le bitmap avec le programme précédent ?

  6. #6
    Membre du Club
    Homme Profil pro
    Retraité, ancien développeur
    Inscrit en
    Mai 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Retraité, ancien développeur

    Informations forums :
    Inscription : Mai 2015
    Messages : 8
    Par défaut La solution retenue en définitive ...
    Voilà ... Je suis parti du composant "Counter" dont j'avais déjà parlé. En mode "Traditional", il affiche les chiffres en 18*24. J'ai donc créé un double-dégradé16*22 pour simuler un tambour, que j'ai encadré de noir pour obtenir le 18*24 (tout cela avec un PhotoFiltre d'il y a 6 ans ...). Dans cette image j'ai successivement mis les chiffres de 0 à 9 en jaune, j'avais ainsi les BMP de mes 10 chiffres.

    Je les ai alignés dans un bmp 180*24 que j'ai enregistré après conversion en 256 couleurs. A l'aide de l'éditeur d'images, j'ai dans le fichier cnt.res remplacé le bitmap "Trad" par ma nouvelle ligne via copier-coller.

    Après intégration du composant dans Delphi (entre temps j'avais fait un Ghost) j'ai maintenant obtenu un composant Counter où l'affichage Nixie est remplacé par un affichage à tambours.

    Une recompilation de mon projet a mis le style d'affichage à jour.

    Donc : pas de programmation, que du graphique. KISS !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SQL] magic quotes ou double apostrophes pour échapper apostrophe
    Par zorian dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 13/03/2006, 16h23

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