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

Lazarus Pascal Discussion :

[2.2.4] Impossible de faire fonctionner winapi.inc (concerne GetSystemMetrics)


Sujet :

Lazarus Pascal

  1. #21
    Membre confirmé

    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2012
    Messages : 170
    Points : 455
    Points
    455
    Par défaut
    Bonjour,

    Citation Envoyé par Jipété Voir le message
    PS : remplace ton /code par un /quote dans ton dernier message, à la partie me concernant, et ton post rentrera dans les clous,
    Un modérateur a déjà fait le boulot. Merci à lui.

    Bon, mon truc marche sous Windows, mais sous Ubuntu, libbass.so ne se charge pas, que ce soit avec bass.pas ou en chargement dynamique. Comment t'y prends tu ?

    Bon, j'ai trouvé, je ne suis pas du tout habitué à Linux qui veut que les bibliothèques soient à un endroit et pas un autre.

    Merci !

    bb84000

  2. #22
    Membre confirmé

    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2012
    Messages : 170
    Points : 455
    Points
    455
    Par défaut
    Bonjour,

    Citation Envoyé par Jipété Voir le message
    Sinon, aurais-tu une idée pour faire tenir les barres du spectrum dans le dispositif d'affichage ? J'aimerais bien me séparer des curseurs d'offset et X-Y mais j'avoue ne pas trouver/pas comprendre la logique dans les calculs des procédures d'affichage...
    Dès l'instant où l'on épaissit les traits, il faut réduire le nombre de barres. Donc dans la procédure Draw du spectre, quand le drawtype= 1, je ne trace que le nombre de barres qui tient dans l'image.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    1 : begin
       // On arrête de dessiner quand on a rempli l'image !
       if i < (VisBuff.width-(2*x)) div (ColWidth + 1) then
       begin
          if ShowPeak then VisBuff.Canvas.Pen.Color := PeakColor;
          if ShowPeak then VisBuff.Canvas.MoveTo(X + i * (ColWidth + 1), Y + VisBuff.Height - FFTPeacks[i]);
          if ShowPeak then VisBuff.Canvas.LineTo(X + i * (ColWidth + 1) + ColWidth, Y + VisBuff.Height - FFTPeacks[i]);
          VisBuff.Canvas.Pen.Color := PenColor;
          VisBuff.Canvas.Brush.Color := PenColor;
          VisBuff.Canvas.Rectangle(X + i * (ColWidth + 1), Y + VisBuff.Height - FFTFallOff[i], X + i * (ColWidth + 1) + ColWidth, Y + VisBuff.Height);
       end;
     end;
    Je reconnais que c'est un peu barbare, on perd une partie de la courbe, mais ça fonctionne.

    bb84000

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

    Dans la méthode Draw de TSpectrum, tu as une boucle de 128 valeurs à afficher.
    Tu as le ColWidth qui donne la largeur des bâtons, pour bien faire tes bâtons devraient être égaux à la ColWidth = (VisBuff.Width DIV 128) -1, ce qui te permettra d'afficher normalement toutes les 128 valeurs dans l'image.
    Ce qui me gène en fait c'est le positionnement en x ; celui-ci ne devrait jamais varier son origine, ce sont les valeurs que l'on lit au sein du buffer qui devraient varier.
    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

  4. #24
    Membre confirmé

    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2012
    Messages : 170
    Points : 455
    Points
    455
    Par défaut
    Bonjour,

    Citation Envoyé par anapurna Voir le message
    pour bien faire tes bâtons devrais être egale a la ColWidth = (VisBuff.Width DIV 128) -1
    ce qui te permettra d'afficher normalement toutes les 128 valeurs dans l'image
    Certes, mais dans ce cas, comme l'image ne fait que 161 pixels de largeur, on ne pourra afficher que des "bâtons" de 1 pixel sans espacement... c'est à dire l'affichage normal.

    Donc si on veut augmenter la largeur des bâtons, à moins d'agrandir l'affichage, on voit forcément moins nombre bâtons ! Pour des raisons cosmétiques, jipété souhaite que l'on ne voie pas que le tracé déborde, donc il faut arrêter de tracer les bâtons quand on sait que ça va déborder.

    De toutes façons, la fonction BASS FFT1024 récupère 1024 échantillons (512 valeurs selon la doc), dont on ne prend que 128 consécutifs (Drawres=1) ou 1 sur 2 (DrawRes=2).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for i := 0 to 128 do begin
        YVal := Abs(FFTData[(i * DrawRes) + 5]);
        .....
    Donc déjà on limite la fenêtre de visualisation au début du spectre (mais est-il intéressant à regarder au delà ?).

    Il y a d'autres trucs qui me gênent dans le code du spectre, par exemple, le paramètre du constructeur (width) a le même nom que la propriété width qui est la largeur de colonne...

    bb84000

  5. #25
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 719
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 719
    Points : 15 105
    Points
    15 105
    Par défaut
    Bonjour les copains,

    Je vois que vous vous décarcassez pour moi, vous êtes merveilleux et je vous en remercie.

    De mon côté, j'ai retrouvé hier soir des tests faits il y a une bonne quinzaine d'années avec Bass et Delphi7 dans une machine Win2000, j'ai des copies d'écran, c'est tout beau tout mignon et depuis ce matin j'essaye désespérément de porter ça sous Linux mais on peut tous aller se recoucher, ça ne le fera pas...

    Par exemple, dans la procédure de dessin du programme SampleVis (TSpectrum.Draw, à peu près lisible), au tout début, il y a 4 lignes, j'y ai rajouté de quoi voir ce qui se passe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
      if FrmClear then begin   // true
        VisBuff.Canvas.Pen.Color := BkgColor; // = clBlue
        VisBuff.Canvas.Brush.Color := BkgColor;
        VisBuff.Canvas.Rectangle(0, 0, VisBuff.Width, VisBuff.Height);
        if UseBkg then // false changé à True
          //                       dest                                      src              src
          VisBuff.Canvas.CopyRect(Rect(0, 0, BackBmp.Width, BackBmp.Height), BackBmp.Canvas, Rect(0, 0, BackBmp.Width, BackBmp.Height));
      end;
      // 5 lignes ajoutées
      FormPlayer.TimerRender.Enabled:=False;
      BackBmp.Canvas.Changed;
      Application.ProcessMessages;
      FormPlayer.img.Picture.Bitmap.Assign(BackBmp); // 249x188 tout noir alors que forcé à clBlue...
      exit;
    et vous lisez comme moi que si déjà la 4e ligne (if UseBkg ...) ne s'exécute pas, je n'irai pas bien loin.

    Grosse, énorme envie de tout abandonner, par moments...

    Bref, après beaucoup de farfouillages sur internet, j'ai découvert que cette ligne if UseBkg ... était foireuse, tout au moins sous Linux.
    Je vous laisse comparer et faire des tests chez vous, je mets celle qui va bien sous l'originale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    //                       dest                                      src                                 src
    VisBuff.Canvas.CopyRect(Rect(0, 0, BackBmp.Width, BackBmp.Height), BackBmp.Canvas, Rect(0, 0, BackBmp.Width, BackBmp.Height)); // originale
    BackBmp.Canvas.CopyRect(Rect(0, 0, BackBmp.Width, BackBmp.Height), VisBuff.Canvas, Rect(0, 0, VisBuff.Width, VisBuff.Height)); // mon essai
    Si tout est comme ça, on n'est pas rendu...
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  6. #26
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 719
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 719
    Points : 15 105
    Points
    15 105
    Par défaut
    Bon, j'en suis là avec un SampleVis réduit (viré oscilloscope et circle pour aller à l'essentiel qui m'intéresse) :
    Nom : samplevis_light.png
Affichages : 151
Taille : 24,7 Ko

    Les valeurs dans la barre de titre c'est la taille du TImage en bleu.

    Il me reste deux-trois questions :
    • comment faire en sorte qu'il y ait toujours du "jaune" quand la musique joue ? On voit bien sur l'image qu'il y a plus de peaks que de vrais sons alors qu'à ce moment la musique n'est pas violente mais est présente.
    • comment faire en sorte d'avoir vraiment tout dans l'image ? Si je pousse le curseur X vers la gauche je vois des barres qui apparaissent sur la droite : j'aimerais bien tout voir, au détriment de la largeur des barres ou de leur nombre. Si par exemple les barres font 5 px + 1 de séparation, on pourrait en avoir 16 dans une fenêtre de 100 px (avec un début à 2 et 2 de rab' au bout à droite).
      Si elles ne font que 4 + 1, on en aurait 19, c'est pas mal.
    • pas bien compris comment fonctionnait le curseur "Res". Une explication ?


    Un dernier truc : avec un TImage à 256 px de large, il est possible d'avoir un dessin qui remplit toute la largeur en mode "Line" avec X poussé à 41 et du traficotage dans le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        case DrawType of
          0 : begin
    //             VisBuff.Canvas.MoveTo(X + i, Y + VisBuff.Height);
      //           VisBuff.Canvas.LineTo(X + i, Y + VisBuff.Height - FFTFallOff[i]);
    //             if ShowPeak then VisBuff.Canvas.Pixels[X + i, Y + VisBuff.Height - FFTPeacks[i]] := Pen;
                 VisBuff.Canvas.MoveTo(X + i*2, Y + VisBuff.Height);
                 VisBuff.Canvas.LineTo(X + i*2, Y + VisBuff.Height - FFTFallOff[i]);
                 if ShowPeak then VisBuff.Canvas.Pixels[X + i*2, Y + VisBuff.Height - FFTPeacks[i*2]] := Pen;
              end; // peaks vus mais de la même couleur que les barres
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

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

    Le res te permet de ne pas prendre les valeurs à la suite, prends-le comme un intervalle d'observation.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    YVal := Abs(FFTData[(i * DrawRes) + 5]);
    quand DrawRes = 1 Tu prend la valeur [(i*1) + 5] du tableau
    [1][2][3][4][5][6][7][8][9][....]

    Si ta valeur est par exemple 4
    [1][2][3][4][5][6][7][8][9][....]
    On voit ici que le +5 est une constante qui permet simplement de commencer à la cinquième valeur, elle ne joue pas sur i'intervalle d'observation.

    Cela permet, si entre chaque note il y a trop de variations, d'apalanir la courbe.
    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

  8. #28
    Membre confirmé

    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2012
    Messages : 170
    Points : 455
    Points
    455
    Par défaut
    Bonjour,

    Citation Envoyé par anapurna Voir le message
    le res te permet de ne pas prendre les valeurs à la suite
    prend le comme un intervalle d'observation e
    Certes, mais dans le programme en question, on n'a droit qu'à 1 ou 2.

    Je suis d'accord avec toi, ce serait mieux de modifier le code pour permettre une fenêtre glissante sur les échantillons, mais bon, l'exemple ne le fait pas.

    bb84000

  9. #29
    Membre confirmé

    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2012
    Messages : 170
    Points : 455
    Points
    455
    Par défaut
    Bonjour,

    Citation Envoyé par Jipété Voir le message
    Il me reste deux-trois questions :
    • comment faire en sorte qu'il y ait toujours du "jaune" quand la musique joue ? On voit bien sur l'image qu'il y a plus de peaks que de vrais sons alors qu'à ce moment la musique n'est pas violente mais est présente.
    • comment faire en sorte d'avoir vraiment tout dans l'image ? Si je pousse le curseur X vers la gauche je vois des barres qui apparaissent sur la droite : j'aimerais bien tout voir, au détriment de la largeur des barres ou de leur nombre. Si par exemple les barres font 5 px + 1 de séparation, on pourrait en avoir 16 dans une fenêtre de 100 px (avec un début à 2 et 2 de rab' au bout à droite).
      Si elles ne font que 4 + 1, on en aurait 19, c'est pas mal.
    • pas bien compris comment fonctionnait le curseur "Res". Une explication ?
    1. Déjà on pourrait jouer sur le diviseur pour avoir des barres un peu plus hautes.
    2. Pour avoir vraiment tout, comme il y a 1024 échantillons, il te faut une image de 1024 pixels de large au moins. A moins que...
    3. Anapurna l'explique dans son post. S'il est égal à 1, on prend la totalité des échantillons (mais samplevis n'en affiche que 128), S'il est égal à 2, on prend un échantillon sur 2. Le curseur ne va pas plus loin , mais on, peut le changer. S'il est égal à 3, etc. Mais es-tu certain que de qu'il a au delà des 128 ou 256 échantillons est intéressant à voir ?

    Je joins à ce post une archive contenant le code de samplevis arrangé à ma sauce (Ubuntu 22):
    - chargement dynamique de la bibliothèque BASS (unité lazd_bass en cadeau)
    - prise en compte des formats d'image de fond différents de BMP (c'est automatique avec Lazarus, donc autant en profiter), et
    - stretch de l'image de fond pour qu'elle s'affiche en entier quelle que soit sa taille initiale

    samplevis.zip

    bb84000

  10. #30
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 719
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 719
    Points : 15 105
    Points
    15 105
    Par défaut
    Bonsoir,

    merci pour ces nouvelles entrées dans ce sujet qui va me rendre fou, lire ci-après.

    J'étudierai le zip un peu plus tard, là, franchement je n'en peux plus...

    Regardez (les lignes sont extraites de 2 progs Delphi qui se ressemblent beaucoup, et il est question de TBitmap créés de la même manière) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        VisBuff.Canvas.Pen.Color := BkgColor; // clBlue
        VisBuff.Canvas.Brush.Color := BkgColor; // id.
        VisBuff.Canvas.Rectangle(0, 0, VisBuff.Width, VisBuff.Height);
        FormPlayer.TimerRender.Enabled := False; // j'arrête le timer pour être tranquille
        VisBuff.SaveToFile('/chemin/visbuff.bmp'); // 249x188 Bleu
    et mon fichier est bien bleu.

    Et maintenant, tada... :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        BMPBuffer.Canvas.Pen.Color := BackC; // clBlue
        BMPBuffer.Canvas.Brush.Color := BackC; // id.
        BMPBuffer.Canvas.Rectangle(0, 0, BMPBuffer.Width, BMPBuffer.Height);
        Form1.Timer1.Enabled := False; // j'arrête le timer pour être tranquille
        BMPBuffer.SaveToFile('/chemin/spectrum.bmp'); // 185x98 NOIR ! TOUT NOIR
    Je ne comprends pas... Les deux bitmaps sont bien enregistrés mais l'un est bleu et l'autre est noir. Il est où le 'blème ?
    Amusant de constater que même le rendu du forum fait une différence entre un code et l'autre alors que pour moi ce sont les mêmes, les noms mis à part.
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  11. #31
    Membre confirmé

    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2012
    Messages : 170
    Points : 455
    Points
    455
    Par défaut
    Bonjour Jipété !

    Effectivement, mais lorsque je copie les codes de ton message précédent :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        BMPBuffer.Canvas.Pen.Color := BackC; // clBlue
        BMPBuffer.Canvas.Brush.Color := BackC; // id.
        BMPBuffer.Canvas.Rectangle(0, 0, BMPBuffer.Width, BMPBuffer.Height);
        Form1.Timer1.Enabled := False; // j'arrête le timer pour être tranquille
        BMPBuffer.SaveToFile('/chemin/spectrum.bmp'); // 185x98 NOIR ! TOUT NOIR
    puis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
       BMPBuffer.Canvas.Pen.Color := BackC; // clBlue
        BMPBuffer.Canvas.Brush.Color := BackC; // id.
        BMPBuffer.Canvas.Rectangle(0, 0, BMPBuffer.Width, BMPBuffer.Height);
        Form1.Timer1.Enabled := False; // j'arrête le timer pour être tranquille
        BMPBuffer.SaveToFile('/chemin/spectrum.bmp'); // 185x98 NOIR ! TOUT NOIR
    De là à penser qu'une malédiction pèse sur toi...

    Pour l'affichage dans le forum, je ne comprends pas, mais dans ton code, tu devrais essayer de supprimer tout ce qui concerne BMPBuffer et de le réécrire (sans copier/coller), pour voir si ça fait une différence. Ce genre de truc m'est déjà arrivé, il y avait quelque part dans le code un caractère parasite invisible.

    J'investigue et je reviens.
    ......
    Voilà. J'ai mis ton code dans la procédure onActivate d'une forme neuve et j'obtiens bien une image "spectrum.bmp" bleue.
    Essaie déjà de désactiver le timer dès le début de la procédure, même si je pense que cela ne vient pas de là.
    Ensuite il faut chercher du côté de BackC. Comme tu as une image noire, ça veut dire qu'il est à clBlack ou clDefault au moment où tu l'utilises.
    Dans SampleVis, la couleur de fond est définie dans l'application principale. Dans le processus du timer, on ne trace que la figure choisie.
    Au démarrage de l'application, c'est le cercle. Et il a forcément un fond noir.
    Si tu changes la couleur du fond, le tracé du cercle recouvre le précédent au tick suivant du timer. Mais si tu arrêtes le timer dans son événement, il ne fonctionne qu'une fois, l'image est figée et le fond reste noir.
    Maintenant, tu changes de figure, la couleur de fond est celle que tu as modifiée et la nouvelle figure démarre avec cette couleur dès le premier tick du timer. Le fond a la nouvelle couleur.

    bb84000

  12. #32
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 719
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 719
    Points : 15 105
    Points
    15 105
    Par défaut
    Bonjour Bruno,

    merci pour tes recherches et tes pistes.

    Donc, dans le programme qui génère un bitmap noir, on trouve, abrégé pour aller à l'essentiel :
    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
    type TSpectrum = Class(TObject)
      private
        BackC : TColor;
      public
        property Back_Colour : TColor read BackC write BackC;
     
    Constructor TSpectrum.Create(Width, Height, Number_Peaks : Integer);
    begin
    //  BackC := clBlack;
      BackC := clBlue; // pas vu
     
    Procedure TSpectrum.Draw_It;
    begin
      BMPBuffer.Canvas.Pen.Color := BackC;
      BMPBuffer.Canvas.Brush.Color := BackC;
    Et c'est tout !

    Alors j'ai tenté ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      BMPBuffer.Canvas.Pen.Color := clBlue; //BackC;
      BMPBuffer.Canvas.Brush.Color := clBlue; //BackC;
      BMPBuffer.Canvas.Rectangle(0, 0, BMPBuffer.Width, BMPBuffer.Height);
      BMPBuffer.SaveToFile('/chemin/spectrum.bmp');
    et là c'est bon !

    Alors je creuse plus profond avec, dans le Constructor, après la création du BMPBuffer, un simple ShowMessage(IntToStr(BackC)); affiche 16711680 et ça, ce n'est pas le code du noir !

    Mais si je mets ça comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Procedure TSpectrum.Draw_It;
    begin
      form1.timer1.enabled:=False;
      BMPBuffer.Canvas.Pen.Color := BackC;
      ShowMessage(IntToStr(BackC)); // 0
      ShowMessage(IntToStr(BMPBuffer.Canvas.Pen.Color)); // 0
    Ceci explique cela, mais rien ne m'explique pourquoi la variable BackC perd sa valeur.
    J'ai tenté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    type TSpectrum = Class(TObject)
      private
    //    BackC : TColor;
      public
        BackC : TColor;
        property Back_Colour : TColor read BackC write BackC;
    et après, je ne vois pas ce que je pourrais tenter d'autre...

    Bon, plein d'autres choses à faire aujourd'hui,
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  13. #33
    Membre confirmé

    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2012
    Messages : 170
    Points : 455
    Points
    455
    Par défaut
    Bonjour,

    Citation Envoyé par Jipété Voir le message
    Bonjour Bruno,
    Raté C'est Bernard !!!

    Je ne cite pas le reste, mais ce qui est certain, c'est que BackC ne peut changer que si la propriété Back_Colour change.

    C'est donc au niveau de l'application principale qu'il faut rechercher la modification de Back_Colour. En principe, c'est lors de l'évènement PanelBkgClick.

    Si ton programme test est une simple modif de samplevis, tu peux me l'envoyer par mp pour que j'examine l'ensemble.

    Question qui n'a rien à voir. Sur les copies d'écran, comment as-tu obtenu tes trackbars ? Ils sont si moches chez moi (bouton rond blanc sur Ubuntu et rectangle bleu sur Windows) au point que j'ai fait un composant où tout ça est personnalisable.

    bb84000/Bernard

  14. #34
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 719
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 719
    Points : 15 105
    Points
    15 105
    Par défaut
    Citation Envoyé par bb84000 Voir le message
    Raté C'est Bernard !!!

    Je ne sais pas ce qui m'a fait imaginer ça, désolé.

    Citation Envoyé par bb84000 Voir le message
    BackC ne peut changer que si la propriété Back_Colour change.
    Hé bien voilà ! Il suffisait de le dire,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      ...
    //My_Spectrum.Back_Colour := clBlack; // The background color
      My_Spectrum.Back_Colour := clBlue;  // The background color
    et mes tests montrent ensuite que le BMPBuffer est clBlue, parfait.

    Continuerai ça la semaine prochaine...

    Citation Envoyé par bb84000 Voir le message
    Si ton programme test est une simple modif de samplevis, tu peux me l'envoyer par mp pour que j'examine l'ensemble.
    C'est plus compliqué, va falloir que je trie (car j'en ai plusieurs versions traficotées et je ne voudrais pas que tu y perdes ton temps), mais je note ta proposition car une chose est intéressante dans le FormCreate :
    My_Spectrum := TSpectrum.Create(PaintBox1.width, PaintBox1.height, 16); // Create a new Spectrum object with 16 bars. <--- le commentaire, où il est stipulé la création de 16 bars, qu'on devrait pouvoir adapter à la largeur de l'affichage disponible et la largeur envisagée pour les barres (1 ou 2 px c'est petit, 20 ce n'est pas nécessaire si la largeur d'affichage est grande, autant en profiter pour mettre plus de barres donc plus de détails et de finesse -- mais hors de question d'avoir des barres hors affichage : il faut que tout rentre).

    Citation Envoyé par bb84000 Voir le message
    Question qui n'a rien à voir. Sur les copies d'écran, comment as-tu obtenu tes trackbars ? Ils sont si moches chez moi (bouton rond blanc sur Ubuntu et rectangle bleu sur Windows) au point que j'ai fait un composant où tout ça est personnalisable.
    Je n'ai rien fait si ce n'est les prendre dans la palette d'objets et les poser sur la fiche (même pas moi, d'ailleurs : c'est l'auteur qui a fait ça -- mais je fais pareil). Si rendu différent, envisager le sous-système d'affichage, chez moi gtk2.
    Options du projet / Options du compilateur / Configuration et cible / en bas de l'affichage :
    Nom : ensemble_graphique.png
Affichages : 125
Taille : 7,0 Ko
    Plus qu'à cliquer sur le lien pour se retrouver sur la page Ajouts et remplacements et à y dérouler "Définir LCLWidgetType" v
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  15. #35
    Membre confirmé

    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2012
    Messages : 170
    Points : 455
    Points
    455
    Par défaut
    Bonjour Jipété.

    Voilà un problème résolu.

    Concernant le trackbar, le widgetset ne change rien. Je pense que c'est lié à Ubuntu. En plus, je m'aperçois que le curseur de mon bbtrackbar ne s'affiche pas comme il faut sous Linux.

    bb84000

  16. #36
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 719
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 719
    Points : 15 105
    Points
    15 105
    Par défaut
    Bonjour,

    Citation Envoyé par bb84000 Voir le message
    Si ton programme test est une simple modif de samplevis, tu peux me l'envoyer par mp pour que j'examine l'ensemble.
    je fais suite à ta demande mais je la fais ici plutôt que par MP, des fois que d'autres soient intéressés.

    Voici donc un zip sans doute trouvé chez Bass il y a longtemps, que j'ai pu faire fonctionner sous w2k à l'époque :
    IS.zip
    Nom : Image.jpg
Affichages : 120
Taille : 15,1 Ko

    et qui ne veut rien savoir sous Linux :
    Nom : bigjim_spectrum.png
Affichages : 115
Taille : 2,8 Ko

    On reconnait mon essai de changement de couleur du fond de l'image, histoire d'être sûr que la mécanique fonctionne un peu.

    Pour faire gagner du temps, je mets ci-dessous la modif (deux fois la même) que j'ai apportée à la
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Procedure TSpectrum.Draw_It;
    var
      i, j, k, r, wd, wdp, toppoint : Integer;
    begin
      BMPBuffer.Canvas.Brush.Color := BackC;
      BMPBuffer.Canvas.FillRect(Rect(0, 0, Img_W, Img_H));
    //  BitBlt(Img_Hand, 0, 0, Img_W, Img_H, BMPBuffer.Canvas.Handle, 0, 0, SRCCOPY);
      form1.img.Picture.Bitmap.Assign(BMPBuffer);
      ...
      //////////////////// Drawing
    //  BitBlt(Img_Hand, 0, 0, Img_W, Img_H, BMPBuffer.Canvas.Handle, 0, 0, SRCCOPY);
    // rien d'affiché avec BitBlt, deux lignes de traits avec dessous
      form1.img.Picture.Bitmap.Assign(BMPBuffer);
    end;
    et je précise que j'ai donc rajouté à la fiche une TImage avec Align:=alClient et passé la PaintBox1.Visible à False.

    Si quelqu'un pouvait faire avancer le schmilblik, la communauté lui en serait éternellement reconnaissante,
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

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

    je crois me rappeler que linux ne fonctionne pas sur le même modèle que windows
    il n'utilise pas de handle pour la gestion de ses différemments elements graphique

    dis moi si tu fais quelques modifications mineurse cela fonctionne t'il mieux ?

    elle sont au nombre de 3

    dans l’unité spectrum

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      TSpectrum = Class(TObject)
      private
        BMPBuffer : TBitmap;
        fCvs      : TCanvas;
    //    Img_Hand : THandle;
    Modification de la methode Draw_Spec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Procedure TSpectrum.Draw_Spec(Cvs : Tcanvas; FFTData : array of single);
    var
      i : Integer;
    begin
      fCvs := Cvs;
    //  Img_Hand := fCvs.;
    et changer la fonction bitblt (je crois que c'est elle le problème) par copyrect
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    //  BitBlt(fCvs.Handle, 0, 0, Img_W, Img_H, BMPBuffer.Canvas.Handle, 0, 0, SRCCOPY);
      fCvs.CopyRect(Rect( 0, 0, Img_W, Img_H),BMPBuffer.Canvas,Rect( 0, 0, Img_W, Img_H));
    dans la forme principale

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TForm1.Timer1Timer(Sender: TObject);
    begin
      GetData; // My proc to get and sort the data
      My_Spectrum.Draw_Spec(paintbox1.Canvas, Scaled_FFT); // Do the actual drawing to a paint box
    end;
    dis moi si cela fonctionne mieux
    je n'ai pas de linux actuellement
    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

  18. #38
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 719
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 719
    Points : 15 105
    Points
    15 105
    Par défaut
    Citation Envoyé par anapurna Voir le message
    dis-moi si cela fonctionne mieux
    Juste le fond bleu, même pas les deux lignes de petits traits...

    Citation Envoyé par anapurna Voir le message
    je n'ai pas de linux actuellement

    Ça va être compliqué.

    Mais sous Windows ça fonctionne ?
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  19. #39
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 418
    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 418
    Points : 5 816
    Points
    5 816
    Par défaut
    Citation Envoyé par Jipété Voir le message
    Juste le fond bleu, même pas les deux lignes de petits traits...



    Ça va être compliqué.

    Mais sous Windows ça fonctionne ?
    oui pas de changement par rapport a la version d'origine
    tu fait bien un copyrect et pas un biblt (attention il y en a deux)

    PS : j'ai testé sur ton projet IS pas sur la premiere version
    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

  20. #40
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 719
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 719
    Points : 15 105
    Points
    15 105
    Par défaut
    Citation Envoyé par anapurna Voir le message
    tu fais bien un copyrect et pas un biblt (attention il y en a deux)
    J'ai fait des copier/coller des lignes que tu as postées, plus mise en commentaire des lignes avec BitBlt.
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

Discussions similaires

  1. [Requête] Impossible de faire fonctionner !
    Par Nesta92 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 17/04/2007, 09h38
  2. Réponses: 5
    Dernier message: 05/12/2006, 23h57
  3. impossible de faire fonctionner le gridlayout
    Par oceane751 dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 12/06/2006, 10h42
  4. Réponses: 5
    Dernier message: 22/03/2006, 10h39
  5. impossible de faire fonctionner phppgadmin et pgdmin3
    Par le_ben dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 09/12/2004, 14h27

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