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 :

Projet d'un programme de jeu d'échecs


Sujet :

Contribuez Pascal

  1. #181
    Membre averti

    Homme Profil pro
    Diverses
    Inscrit en
    Février 2014
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Diverses

    Informations forums :
    Inscription : Février 2014
    Messages : 122
    Points : 428
    Points
    428
    Par défaut
    Citation Envoyé par Jipété Voir le message
    Bonsoir,
    Et j'ai eu ça lors de ma première tentative de compil d'un exemple gtk2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    # fpc gtk_demo.pas 
    Free Pascal Compiler version 2.6.2 [2013/03/17] for i386
    Copyright (c) 1993-2012 by Florian Klaempfl and others
    Target OS: Linux for i386
    Compiling gtk_demo.pas
    drawingarea.inc(41,28) Error: Incompatible type for arg no. 3: Got "Boolean32", expected "LongInt"
    drawingarea.inc(88,28) Error: Incompatible type for arg no. 3: Got "Boolean32", expected "LongInt"
    drawingarea.inc(202,36) Error: Incompatible type for arg no. 3: Got "Boolean32", expected "LongInt"
    textview.inc(64,3) Warning: Converting constant real value to double for C variable argument, add explicit typecast to prevent this.
    textview.inc(67,3) Warning: Converting constant real value to double for C variable argument, add explicit typecast to prevent this.
    gtk_demo.pas(1091) Fatal: There were 3 errors compiling module, stopping
    Fatal: Compilation aborted
    Ça décourage...
    Il faut changer dans 'drawingarea.inc' les gTrue par Ord(gTrue) et ça marche. Les exemples n'ont pas été mis à jour.


    Citation Envoyé par Jipété Voir le message
    Et gogol n'est d'aucun secours : on trouve gtk2 et Perl, et Python, mais avec Pascal, rien ! Nada...
    Là, tu as mal cherché ou je n'ai pas compris ce que tu cherches (je n'ai pas lu toute la discussion). On ne trouve pas grand chose mais pas "Nada".


    En revanche pour une documentation complète sur GTK il faut se contenter de la doc de la bibliothéque d'origine en C : https://developer.gnome.org/gtk2/2.24/.

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 011
    Points : 15 496
    Points
    15 496
    Par défaut
    Salut,
    Citation Envoyé par yamer Voir le message
    Il faut changer dans 'drawingarea.inc' les gTrue par Ord(gTrue) et ça marche. Les exemples n'ont pas été mis à jour.
    Oui, j'avais réussi à me dépatouiller en mettant bêtement 1, mais ce qui décourage c'est qu'au premier exemple tu te prends un pâté parce que les exemples n'ont pas été mis à jour, ce que je trouve dramatique.

    Citation Envoyé par yamer Voir le message
    Là, tu as mal cherché ou je n'ai pas compris ce que tu cherches (je n'ai pas lu toute la discussion). On ne trouve pas grand chose mais pas "Nada".
    1re ligne : ça a l'air intéressant, je vais creuser.
    2e ligne : il y a tout ce qu'il faut, on dirait, sauf... Sauf le Textview qui est l'objet de mes recherches actuelles Pas d'bol, hein !
    3e ligne : idem 1re ligne

    Merci pour les liens.

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 011
    Points : 15 496
    Points
    15 496
    Par défaut
    Salut,
    Citation Envoyé par circular17 Voir le message
    Ben justement, la question que je me pose est de savoir quelles corrections apporter au paquet LazUtils pour que les polices FreeType soient rendues correctement.
    Il y a un mystère avec ça : je suis parti du dernier tuto, et plus précisément de ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      FFontCollection := TFreeTypeFontCollection.Create;
    //  FFontCollection.AddFile('Arial.ttf'); // origine
      FFontCollection.AddFile('/root/Desktop/chess/CASEFONT.TTF');
      // s'exécute ok en pas-à-pas, on voit bien les informations s'ajouter dans la collection
     
      SetDefaultFreeTypeFontCollection(FFontCollection);
    end;
    Et ensuite, dans le code d'un bouton rajouté sur la form, c'est là qu'on rigole :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure TForm1.Button9Click(Sender: TObject);
    begin
      ShowMessage(inttostr(FFontCollection.FamilyCount) + '--'
        + inttostr(FFontCollection.FontFileCount)); // OK, --> 1--1
      Caption := FFontCollection.FamilyEnumerator.Current.FamilyName; // AV !?
      Caption := IntToStr(FFontCollection.FamilyEnumerator.GetCurrent.FontCount); // AV !?
      Caption := FFontCollection.FontFileEnumerator.Current.Filename; // AV !?
      Caption := FFontCollection.FontFileEnumerator.GetCurrent.Filename; // AV !?
    end;
    AV pour Access Violation.
    Je précise que ce qui est rajouté après FFontCollection l'est avec le soutien et la complicité de la complétion de code, qui me tient lieu de documentation.

    Donc en gros, une fois qu'on a ajouté une police à la collection, ben, on ne peut pas l'utiliser... C'est ça ?

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 011
    Points : 15 496
    Points
    15 496
    Par défaut
    Citation Envoyé par Jipété Voir le message
    1re ligne : ça a l'air intéressant, je vais creuser.
    J'ai creusé et voilà, on ne va pas aller bien loin comme ça...

    Comme je cherche des infos sur le texte, je fonce sur cette page où d'entrée, je lis :
    Warning: GtkText is deprecated and unsupported. It is known to be buggy. It still works in FPC, but better use GtkTextView. Unfortunately, GtkTextView is not documented in the tutorial (yet?).


    Toujours est-il qu'en fin de page il y a un exemple, je vais le tenter avec un simple copier-coller puis une compil qui se déroule bien et une exécution qui se vautre lamentablement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    # ./TextExample 
    couldn't allocate color
    An unhandled exception occurred at $08093755 :
    EFOpenError : Unable to open file "./text.pas"
      $08093755
      $08093589
      $0809C1B0
      $0804F24F
    Je précise que j'ai bien fourni un fichier text.pas, et que j'ai tenté des deux manières, avec un résultat identique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
       t.LoadFromFile('text.pas');
       t.LoadFromFile('./text.pas');
    Comment ne pas être découragé, mmmh ?

    PS : ce qui est (moyennement) marrant, c'est de trouver ce genre de commentaires dans le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
       color		: pGdkColor; //!!!
       color := new(pGdkColor);  //!!!???
    Ça doit sûrement avoir un rapport avec la première ligne d'erreur couldn't allocate color...

  5. #185
    Membre averti

    Homme Profil pro
    Diverses
    Inscrit en
    Février 2014
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Diverses

    Informations forums :
    Inscription : Février 2014
    Messages : 122
    Points : 428
    Points
    428
    Par défaut
    Citation Envoyé par Jipété Voir le message
    Toujours est-il qu'en fin de page il y a un exemple, je vais le tenter avec un simple copier-coller puis une compil qui se déroule bien et une exécution qui se vautre lamentablement :
    Je viens d'essayer le programme et il marche ici... J'ai le message "couldn't allocate color" mais pas d'autre erreur. Tu dois vraiment avoir un problème d'accès au fichier 'text.pas'.

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 011
    Points : 15 496
    Points
    15 496
    Par défaut
    Tellement le nez sur le guidon pour ces histoires de fonts, qu'on en oublie de regarder sur les bas-côtés :
    Citation Envoyé par yamer Voir le message
    Tu dois vraiment avoir un problème d'accès au fichier 'text.pas'.
    J'avais juste un fichier Text.pas et je suis sous Linux...

    Bon, de toute façon, après changement du nom de la police, ses graphiques ne sont pas pris en compte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
       { Load a fixed font }
    // http://www.linuxtopia.org/online_books/gui_toolkit_guides/gtk+_gnome_application_development/sec-gdkfont.html   
    //   fixed_font := gdk_font_load('-misc-fixed-medium-r-*-*-*-140-*-*-*-*-*-*'); // origine
       fixed_font := gdk_font_load('-*-Chess Alpha-medium-r-*-*-*-140-*-*-*-*-*-*'); // marche pô... :-(

    J'ai une piste avec lazarus/version/components/aggpas/lazarus/example :

    Nom : aggpas.png
Affichages : 607
Taille : 6,1 Ko

    À suivre : il reste un petit défaut en haut à droite de la tour tout à gauche, ainsi qu'un grand trait tout à droite de la tour de droite.

    Mais bon, on peut le faire !

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 011
    Points : 15 496
    Points
    15 496
    Par défaut
    Citation Envoyé par Jipété Voir le message
    À suivre : il reste un petit défaut en haut à droite de la tour tout à gauche, ainsi qu'un grand trait tout à droite de la tour de droite.
    Petit défaut qui disparaît selon la taille choisie pour l'affichage de la police... Composant pas bien fini ?

    Extrait de /usr/share/lazarus/version/components/aggpas/lazarus/example/AggPasInLCLDemo1 :

    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
      with AggLCLCanvas do begin
        // solid white background - fond de feuille
        Brush.Color:=clWhite;
        FillRect(0,0,Width,Height);
     
        // solid blue text
        FontFilename:=SetDirSeparators('/chemin/du/fichier/CASEFONT.TTF');
        Font.LoadFromFile(FontFilename);
        Font.Size:=23;
        Font.Color:=clRed; // <-- mystère !
        TextOut(10,020,'!""""""""#');
        TextOut(10,050,'$tMvWlVmT%');
        TextOut(10,080,'$OoOoOoOo%');
        TextOut(10,110,'$ + + + +%');
        TextOut(10,140,'$+ + + + %');
        TextOut(10,170,'$ + + + +%');
        TextOut(10,200,'$+ + + + %');
        TextOut(10,230,'$pPpPpPpP%');
        TextOut(10,260,'$RnBqKbNr%');
        TextOut(10,290,'/(((((((()');
      end;
    Et hop ! :

    Nom : aggpas_demo.png
Affichages : 719
Taille : 25,8 Ko

    Mais ce n'est pas exactement ça que je veux, même si graphiquement ça ressemble : ça serait tellement plus agréable de pouvoir avoir la même chose dans une StringGrid sans être obligé de jouer avec TextOut, sans compter que pour récupérer la case d'une pièce, la propriété MouseToCell est un vrai bonheur...

  8. #188
    Rédacteur/Modérateur

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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 092
    Points : 15 532
    Points
    15 532
    Billets dans le blog
    9
    Par défaut
    Bravo Jipété ! Moi, je suis allé voir du côté de la bibliothèque cairo. Le premier essai est encourageant.

    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
     
    program chessfont;
     
    uses
      Cairo;
     
    const
      w = 8 * 40;
      h = 40;
     
    var
      cr: Pcairo_t;
      surface: Pcairo_surface_t;
     
    begin
      surface := cairo_image_surface_create(CAIRO_FORMAT_ARGB32, w, h);
      cr := cairo_create(surface);
     
      cairo_set_source_rgb(cr, 1.0, 1.0, 1.0);
      cairo_paint(cr);
     
      cairo_select_font_face(cr, 'Chess Alpha', CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL);
      cairo_set_font_size(cr, 40);
     
      cairo_set_source_rgb(cr, 0.0, 0.0, 0.0);
      cairo_move_to(cr, 0, 40);
      cairo_show_text(cr, 't+nWlNjT');
     
      cairo_destroy(cr);
     
      cairo_surface_write_to_png(surface, 'image.png');
      cairo_surface_destroy(surface);
    end.
    Images attachées Images attachées  

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 011
    Points : 15 496
    Points
    15 496
    Par défaut
    Citation Envoyé par Roland Chastain Voir le message
    Bravo Jipété ! Moi, je suis allé voir du côté de la bibliothèque cairo. Le premier essai est encourageant.
    Bravo Roland !

    Mais où as-tu trouvé la doc ?

  10. #190
    Rédacteur/Modérateur

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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 092
    Points : 15 532
    Points
    15 532
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par Jipété Voir le message
    Mais où as-tu trouvé la doc ?
    La base du code (la fabrication d'une image PNG), je l'avais trouvée sur un forum. Ensuite je me suis appuyé sur les exemples originaux (en C) pour explorer les fonctions de la bibliothèque. Cependant je ne savais pas comment utiliser cairo dans une fenêtre, jusqu'à ce que je tombe sur cette collection de composants, qui inclut une version Lazarus de tous les exemples originaux. Dans la soirée si je peux, je posterai une version "fenêtre".

  11. #191
    Rédacteur/Modérateur

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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 092
    Points : 15 532
    Points
    15 532
    Billets dans le blog
    9
    Par défaut
    Voici un exemple dans une fenêtre, plus exactement dans un TPaintBox :

    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
    unit Unit1;
     
    {$mode objfpc}{$H+}
     
    interface
     
    uses
      Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls;
     
    type
      { TForm1 }
      TForm1 = class(TForm)
        PaintBox1: TPaintBox;
        procedure PaintBox1Paint(Sender: TObject);
      private
        { private declarations }
      public
        { public declarations }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.lfm}
     
    uses
      Cairo, CairoWin32;
     
    { TForm1 }
     
    procedure TForm1.PaintBox1Paint(Sender: TObject);
    var
      surface: Pcairo_surface_t;
      cr: Pcairo_t;
      bmp: TBitmap;
      w, h: Integer;
     
    begin
      w := PaintBox1.Width;
      h := PaintBox1.Height;
     
      bmp := TBitmap.Create;
      bmp.SetSize(w, h);
     
      surface := cairo_win32_surface_create(bmp.Canvas.Handle);
     
      cr := cairo_create(surface);
      cairo_set_source_rgb(cr, 1, 1, 1);
      cairo_paint(cr);
     
      cairo_select_font_face(cr, 'Chess Alpha', CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL);
      cairo_set_font_size(cr, 40);
     
      cairo_set_source_rgb(cr, 0.0, 0.0, 0.0);
     
      cairo_move_to(cr, 0, 1 * 40); cairo_show_text(cr, 't+nWlNjT');
      cairo_move_to(cr, 0, 2 * 40); cairo_show_text(cr, 'OoOwLo+o');
      cairo_move_to(cr, 0, 3 * 40); cairo_show_text(cr, ' +j+ + +');
      cairo_move_to(cr, 0, 4 * 40); cairo_show_text(cr, '+ + +pO ');
      cairo_move_to(cr, 0, 5 * 40); cairo_show_text(cr, ' + + + +');
      cairo_move_to(cr, 0, 6 * 40); cairo_show_text(cr, '+ + + + ');
      cairo_move_to(cr, 0, 7 * 40); cairo_show_text(cr, 'pPpQkPpP');
      cairo_move_to(cr, 0, 8 * 40); cairo_show_text(cr, 'RhBqKbHr');
     
      PaintBox1.Canvas.Draw(0, 0, bmp);
     
      cairo_destroy(cr);
      cairo_surface_destroy(surface);
     
      bmp.Destroy;
    end;
     
    { TForm1 }
     
    end.
    P.-S. Je réalise que l'exemple utilise une unité CairoWin32.
    Images attachées Images attachées  

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 011
    Points : 15 496
    Points
    15 496
    Par défaut
    Citation Envoyé par Roland Chastain Voir le message
    P.-S. Je réalise que l'exemple utilise une unité CairoWin32.


    En tout cas c'est très joli !

    Maintenant, de ce que j'en ai lu de ci de là, je crois que cairo est très orienté graphisme alors que pango serait plus générique : je vais essayer de suivre cette voie, et si quelqu'un a des infos je suis preneur

  13. #193
    Rédacteur/Modérateur

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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 092
    Points : 15 532
    Points
    15 532
    Billets dans le blog
    9
    Par défaut
    Oui, effectivement, cairo c'est uniquement du graphisme. Une chose à noter quand même, c'est qu'apparemment on peut utiliser cairo sous Linux en passant par le composant TCairoPaintBox, qui est inclus dans la collection de composants dont j'ai donné la référence plus haut.

  14. #194
    Rédacteur/Modérateur

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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 092
    Points : 15 532
    Points
    15 532
    Billets dans le blog
    9
    Par défaut
    Pour répondre à ce message de Jipété, je poste ici une unité tirée de mon jeu d'échecs, avec son mode d'emploi. C'est une unité qui permet de connaître (entre autres) la liste des coups légaux pour telle position d'une partie d'échecs. Voilà, Jipété, j'espère que cette unité te sera utile, ou te donnera au moins des idées. En y remettant le nez, j'ai trouvé que le choix des noms de variables et de fonctions (sans parler du nom de l'unité elle-même) n'était peut-être pas très heureux : peut-être en trouveras-tu de meilleurs.

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 011
    Points : 15 496
    Points
    15 496
    Par défaut
    Grand merci à toi, me voilà donc avec un sacré paquet de grain à moudre !

    Et ça m'ouvre des horizons que je ne connaissais pas : c'est le temps de l'étude qui revient, et en tout premier je vais reprendre mon ihm afin de ne lui garder que le script nécessaire, la gestion des clics, et en avant pour la mise en place d'appels à des sous-programmes qui tournent en threads et ce genre de choses...
    Va y avoir du sport, merci de m'avoir mis le pied à l'étrier

  16. #196
    Membre confirmé

    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 140
    Points : 623
    Points
    623
    Par défaut
    Bonjour,

    Juste pour vous dire que j'ai trouvé le probleme avec l'encodage des caracteres dans LazUtils avec les polices de symboles telles que celles pour les pieces de jeu d'echec. J'ai envoyé des patchs aux developpeurs de Lazarus. En attendant, je pense que vous pouvez regler la question en local en faisant les choses suivantes dans l'unité EasyLazFreeType.

    Remplacer la méthode UpdateCharmap pour accepter les symboles:
    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
    procedure TFreeTypeFont.UpdateCharmap;
    var i,n: integer;
        lPlatform,encoding: integer;
    begin
      if FCharmapOk then exit;
      if not FFaceLoaded then
      begin
        FCharmapOk := false;
        exit;
      end;
     
      n := TT_Get_CharMap_Count(FFace);
      lPlatform := -1;
      encoding := 0;
      FCharmapSymbol := false;
     
      //MS Unicode
      for i := 0 to n-1 do
      begin
        if TT_Get_CharMap_ID(FFace, i, lPlatform, encoding) = TT_Err_Ok then
        begin
          if (lPlatform = 3) and (encoding = 1) then
          begin
            if TT_Get_CharMap(FFace, i, FCharMap) = TT_Err_Ok then
            begin
              FCharmapOk := true;
              exit;
            end
          end else
          if (lPlatform = 3) and (encoding = 0) then
          begin
            if TT_Get_CharMap(FFace, i, FCharMap) = TT_Err_Ok then
            begin
              FCharmapOk := true;
              FCharmapSymbol:= true;
              exit;
            end;
          end;
        end;
      end;
     
      //Apple Unicode
      for i := 0 to n-1 do
      begin
        if TT_Get_CharMap_ID(FFace, i, lPlatform, encoding) = TT_Err_Ok then
        begin
          if (lPlatform = 0) then
            if TT_Get_CharMap(FFace, i, FCharMap) = TT_Err_Ok then
            begin
              FCharmapOk := true;
              exit;
            end;
        end;
      end;
     
      //ISO Unicode
      for i := 0 to n-1 do
      begin
        if TT_Get_CharMap_ID(FFace, i, lPlatform, encoding) = TT_Err_Ok then
        begin
          if (lPlatform = 2) and (encoding = 1) then
            if TT_Get_CharMap(FFace, i, FCharMap) = TT_Err_Ok then
            begin
              FCharmapOk := true;
              exit;
            end;
        end;
      end;
     
      FCharmapOk := false;
    end;
    Ajouter la variable FCharmapSymbol a cote de FCharmapOk:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        FCharmapOk, FCharmapSymbol: boolean;
    Modifier la méthode GetCharIndex comme suit. Il y a un offset de 61440 à rajouter pour les caracteres de symboles:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function TFreeTypeFont.GetCharIndex(AUnicodeChar: integer): integer;
    begin
      if FCharmapOk then
      begin
        if FCharmapSymbol then
          result := TT_Char_Index(FCharMap, AUnicodeChar+61440)
        else
          result := TT_Char_Index(FCharMap, AUnicodeChar);
      end
      else
        result := 0;
    end;
    Et bien entendu, il faut appliquer la modification deja mentionnée dans un post précédent dans la méthode FetchNames pour charger les polices de symboles (cas nrEncodingID = 0):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            { check for Microsoft, Unicode, English }
          if ((nrPlatformID=3) and (nrEncodingID in[0,1]) and
             ((nrLanguageID=$0409) or (nrLanguageID=$0809) or
              (nrLanguageID=$0c09) or (nrLanguageID=$1009) or
              (nrLanguageID=$1409) or (nrLanguageID=$1809))) or
    Voilà voilà

  17. #197
    Rédacteur/Modérateur

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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 092
    Points : 15 532
    Points
    15 532
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par circular17 Voir le message
    Juste pour vous dire que j'ai trouvé le probleme avec l'encodage des caracteres dans LazUtils avec les polices de symboles telles que celles pour les pieces de jeu d'echec. J'ai envoyé des patchs aux developpeurs de Lazarus. En attendant, je pense que vous pouvez regler la question en local en faisant les choses suivantes dans l'unité EasyLazFreeType.
    Non mais quel talent ! Ça fonctionne chez moi. Bravo !

    Je peaufine ma démo et la poste dans la soirée. Un détail : j'ai dû remettre 3 à la place de TT_PLATFORM_MICROSOFT qui était "not found".

  18. #198
    Rédacteur/Modérateur

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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 092
    Points : 15 532
    Points
    15 532
    Billets dans le blog
    9
    Par défaut
    Voilà ma démo, utilisant la police Chess Alfonso-X. A noter : il faut laisser le fichier arial.ttf dans le répertoire de l'exécutable, même si on ne l'utilise pas, autrement le programme ne fonctionne pas. Si c'est voulu, il faudrait peut-être prévoir un avertissement ?
    Images attachées Images attachées  
    Fichiers attachés Fichiers attachés

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 011
    Points : 15 496
    Points
    15 496
    Par défaut
    Bonsoir,

    Bravo à circular17 pour avoir trouvé tout ça, le seul souci pour moi c'est que je ne vois pas de différence entre avant les corrections et après... J'utilise pour tester le programme de démo trouvé dans /usr/share/lazarus/1.4.0/examples/lazfreetype ; on va dire que c'est pas trop grave, car j'ai trouvé quelque chose qui me turlupine beaucoup plus, voir + bas.

    Citation Envoyé par Roland Chastain Voir le message
    Voilà ma démo, utilisant la police Chess Alfonso-X. A noter : il faut laisser le fichier arial.ttf dans le répertoire de l'exécutable, même si on ne l'utilise pas, autrement le programme ne fonctionne pas. Si c'est voulu, il faudrait peut-être prévoir un avertissement ?
    Très bien (sauf la police, Tu ne me feras jamais jouer avec elle !). Bon, sous Linux on peut virer arial.ttf, à moins que ça ait un rapport (un lien ?) avec ta version des composants BGRA ?
    Car comme je n'ai pas l'intention de passer mon temps à installer des trucs et des machins (oui je sais c'est pas bien ), j'ai adapté ton code pour le faire tourner avec les compos 7.2 mais on dirait que la font n'est pas chargée, on retrouve les dessins des fontes basiques Unicode (car j'ai dû utiliser Unicode, les codes ASCII s'affichent en... codes ASCII ). À creuser, mais j'ai plus trop le temps, là, pendant quelque temps : m'est tombé une urgence dans un autre domaine qui va me bouffer un bon paquet de semaines...

    Dommage car il y a un truc que j'aimerais vraiment creuser et améliorer, c'est le rendu des caractères Unicode lorsque le fond n'est pas blanc.
    Regardez l'image :
    Nom : form_marron.png
Affichages : 296
Taille : 15,3 Ko

    Pour arriver à ce résultat, c'est ton code, Roland, modifié comme ça :
    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
    procedure DrawChessBoard(bmp: TBGRABitmap);
    const
      CHARS: array[0..9]of string = (
    {    '!""""""""#',
        '$tMvWlVmT%',
        '$OoOoOoOo%',
        '$ + + + +%',
        '$+ +wL + %',
        '$ + Qk+ +%',
        '$+ + + + %',
        '$pPpPpPpP%',
        '$RnBqKbNr%',
        '/(((((((()'       }
        '          ',
        ' ♜♞♝♛♚♝♞♜ ',
        ' ♟♟♟♟♟♟♟♟ ',
        '          ',
        '          ',
        '          ',
        '          ',
        ' ♙♙♙♙♙♙♙♙ ',
        ' ♖♘♗♕♔♗♘♖ ',
        '          '
      );
    var
      i: integer;
      pix: TBGRAPixel; // pour avoir un fond pas blanc
    begin
      pix.blue:=127; pix.green:=127; pix.red:=180; pix.alpha:=255;
      bmp.Fill(pix);  //(BGRAWhite);
    //  bmp.FontName := 'Chess Alfonso-X';
      bmp.FontName := '/chemin/vers/fpgui/ALFOCHES.TTF'; // l'une ou l'autre = résultat identique
      bmp.FontHeight := 40;
      for i := 0 to 9 do
        bmp.TextOut(0, 40 * i, CHARS[i], BGRABlack);
    end;
    On se rend bien compte (et ça fait pareil sur mes démos de ce week-end) que les pièces blanches ne sont pas blanches mais transparentes ! Résultat elles se lisent mal quand elle sont sur fond sombre, et ce que je voudrais c'est ça (bricolage avec Gimp) :
    Nom : font-pleine.jpg
Affichages : 314
Taille : 52,5 Ko

    Ça doit être possible car si vous étudiez un peu ce site et ses images, on voit bien que le résultat que je recherche est atteint ; mais en utilisant un webbrowser et du java, choses que je connais assez mal et que je n'ai pas eu le temps de fouiller.

    C'est tout pour le moment...

  20. #200
    Membre confirmé

    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 140
    Points : 623
    Points
    623
    Par défaut
    Citation Envoyé par Roland Chastain
    Non mais quel talent ! Ça fonctionne chez moi.
    Merci.

    Citation Envoyé par Roland Chastain Voir le message
    Voilà ma démo, utilisant la police Chess Alfonso-X. A noter : il faut laisser le fichier arial.ttf dans le répertoire de l'exécutable, même si on ne l'utilise pas, autrement le programme ne fonctionne pas. Si c'est voulu, il faudrait peut-être prévoir un avertissement ?
    C'est un bug dont j'ai envoyé aussi les corrections sur le site de Lazarus. Je n'ai pas posté ici le détail parce que cela est assez compliqué. Donc pour le moment, oui, simplement en incluant Arial, cela fonctionne. Et puis, peut-etre souhaiteras-tu écrire du texte.

Discussions similaires

  1. [Flash Pascal] Projet d'un programme permettant de visualiser une position du jeu des échecs
    Par Roland Chastain dans le forum Flash Pascal
    Réponses: 11
    Dernier message: 21/06/2015, 10h05
  2. Projet Jeu d'échec
    Par Layla dans le forum Langage
    Réponses: 10
    Dernier message: 23/12/2010, 14h06
  3. Jeu d'échec borland soap
    Par rpoulin dans le forum Web & réseau
    Réponses: 2
    Dernier message: 20/10/2005, 06h02
  4. Help ! Programmer un jeu vidéo
    Par Jay Bee dans le forum DirectX
    Réponses: 7
    Dernier message: 18/03/2004, 19h38
  5. Help ! Programmer un jeu vidéo...
    Par Jay Bee dans le forum OpenGL
    Réponses: 3
    Dernier message: 05/03/2004, 16h34

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