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

Turbo Pascal Discussion :

[TP]Pb de police de caractère...


Sujet :

Turbo Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 8
    Par défaut [TP]Pb de police de caractère...
    Bonjour.

    Je voudrais savoir comment modifier les caractéristiques de la police par défaut en mode graphique?

    je m'explique:
    utilisant un système embarqué avec un écran LCD 320x240 mono, la police standard est parfaite et très bien lisible. seulement voilà...
    Les nouveaux systèmes comportent maintenant un écran LCD couleur 640x480...la police standard est maintenant peu lisible.
    Les écrans font 5.7".

    settextstyle(0,0,2) donne une police gigantesque...
    il faudrait un réglage plus fin...

    et les polices vectorielles sont très mauvaises à l'affichage...

    pouvez vous m'aider?

    Merci d'avance

  2. #2
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 466
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 466
    Par défaut
    Pour avoir une taille de police appropriée, tu peux utiliser la procédure SetUserCharSize, qui permet de redimensionner tous les caractères de la police. Ou sinon, tu peux aussi changer de police...
    a+

  3. #3
    Membre Expert
    Avatar de Eric Sigoillot
    Inscrit en
    Mars 2002
    Messages
    1 212
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 212
    Par défaut
    Alors là, pas 36 solutions !

    Si les polices vectorielles par défaut sont très muavaises à l'affichage et que la police standard apparaît gigantesque, tu as deux choix possibles :

    1. Tu crées toi-même un système de police, qui sera adapté à ton affichage, et qui peut aller du simple affichage en pixel par pixel à l'utilisation de bitmaps.

    2. Tu crées une police vectirielle adaptée à tes besoins encore une fois, mais entièrement compatible avec le système BGI, et que tu pouras charger en mémoire à l'aide de InstallUserFont.

    Pour créer une telle police, tu peux te servir de l'utilitaire créé par Borland, nommé Borland Font Editor, et chaché sous le petit nom de FE.EXE.
    Si tu n'arrives pas à trouver la bête, demande-la moi, je l'ai en stock sur le disque.

    A+

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 8
    Par défaut
    Merci.

    j'ai déjà essayé, mais les polices deviennent illisibles dès que je m'approche de la taille souhaitée. peut etre que je n'ai pas de bonnes polices, ce sont celles de TP.

    Citation Envoyé par wormful_sickfoot
    Pour avoir une taille de police appropriée, tu peux utiliser la procédure SetUserCharSize, qui permet de redimensionner tous les caractères de la police. Ou sinon, tu peux aussi changer de police...
    a+

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 8
    Par défaut
    Merci.

    effectivement, si la soluce est de créer une police, pourquoi pas, mais que de temps perdu...

    si j'ai bien compris le système, la police VGA est composée de caractères en 8x8 pixels.

    une police en 10x10 voire 12x12 serait suffisante.

    je vais tacher de trouver le font editor de borland, et l'essayer...

    dans une source de haypo j'ai vu qu'il est possible de charger une police ou des caractères depuis le bios, mais comme je ne connais pas l'assembleur, je n'y ai rien compris?!?

    Merci pour vos réponses à des heures si tardives.

    je vous tiendrai au courant.

    A+

    Citation Envoyé par Hdd34
    Alors là, pas 36 solutions !

    Si les polices vectorielles par défaut sont très muavaises à l'affichage et que la police standard apparaît gigantesque, tu as deux choix possibles :

    1. Tu crées toi-même un système de police, qui sera adapté à ton affichage, et qui peut aller du simple affichage en pixel par pixel à l'utilisation de bitmaps.

    2. Tu crées une police vectirielle adaptée à tes besoins encore une fois, mais entièrement compatible avec le système BGI, et que tu pouras charger en mémoire à l'aide de InstallUserFont.

    Pour créer une telle police, tu peux te servir de l'utilitaire créé par Borland, nommé Borland Font Editor, et chaché sous le petit nom de FE.EXE.
    Si tu n'arrives pas à trouver la bête, demande-la moi, je l'ai en stock sur le disque.

    A+

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 8
    Par défaut FE.EXE
    Aïe!

    je l'ai trouvé, mais il faut de solides notions de typo...

    c'est pas gagné les aminches!

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 8
    Par défaut
    site intéressant:

    http://www.xs4all.nl/~remcodek/fontpage.html

    A+

  8. #8
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 466
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 466
    Par défaut
    Sinon tu peux récupérer les polices "sytèmes", elles sont stockées dans la mémoire. Si je me rapelle bien, elles font 8*8, ou 8*14 ou 8*16, mais ils existent aussi d'autres versions selon les Bios... Pour y accéder, il faut utilise la sousfonction 1130h de l'interruption 10h.
    a+

  9. #9
    Membre Expert
    Avatar de Eric Sigoillot
    Inscrit en
    Mars 2002
    Messages
    1 212
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 212
    Par défaut
    Mais il ne connais pas l'assembleur ! Il faut donc l'aider un ch'tit peu...

    Généralement, les BIOS VGA (donc tous les BIOS graphiques actuels) possède au moins les polices en taille 8x8 et 8x16.

    Seul inconvénient : ue fois que tu auras récupéré les données des polices, il faudra que tu affichaes les caractères manuellement, pixel par pixel.

    Bon, j'ai retrouvé un vieux truc sur mon disque dur : un morceau de ma première unité Vesa, qui se servait de ces polices là. Je te mets la partie qui te concerne : je te préviens tout de suite, c'est pas du grand art !

    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
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
     
    Uses
      Dos, Crt, Graph;
     
    Type
        TCharType      = Array[1..16] Of Byte;
        TVesaFont      = Array[0..255] Of TCharType;
        TVesaAscii     = Array[0..255 * 16] Of Byte;
        TFontSize      = 0..1;
     
    Function  GetCharSpace: Byte; forward;
    Procedure WriteXY(X, Y : Integer; Text : String); forward;
    Procedure SetCharSpace(Spc : Byte); forward;
    Procedure SetTextSize(Size : TFontSize); forward;
    Function  TextHeight(Text : String): Integer; forward;
    Function  TextWidth(Text : String): Integer; forward;
     
    Const
        FFontSize  : TFontSize  = 0;
        FSpace     : Byte       = 8;
        FHeight    : Byte       = 16;
     
    Var
       PFont     : Pointer;
       LgFont    : ^TVesaAscii;
       SlFont    : ^TVesaAscii;
     
    Procedure LoadFonts;
    Var
       Regs : Registers;
    Begin
    New(LgFont);
    New(SlFont);
     
    Regs.Ax := $1130;
    Regs.Bh := 6;
    Intr($10, Regs);
    PFont := Ptr(Regs.Es, Regs.Bp);
    Move(PFont^, LgFont^, SizeOf(TVesaAscii));
     
    Regs.Ax := $1130;
    Regs.Bh := 3;
    Intr($10, Regs);
    PFont := Ptr(Regs.Es, Regs.Bp);
    Move(PFont^, SlFont^, SizeOf(TVesaAscii));
    End;
     
    Procedure FreeFonts;
    Begin
    If LgFont <> Nil Then Dispose(LgFont);
    If SlFont <> Nil Then Dispose(SlFont);
    End;
     
    Procedure SetCharSpace(Spc : Byte);
    Begin
    FSpace := Spc;
    End;
     
    Function GetCharSpace: Byte;
    Begin
    GetCharSpace := FSpace;
    End;
     
    Function TextHeight(Text : String): Integer;
    Begin
    TextHeight := FHeight;
    End;
     
    Function TextWidth(Text : String): Integer;
    Begin
    TextWidth := Ord(Text[0]) * FSpace;
    End;
     
    Procedure SetTextSize(Size : TFontSize);
    Begin
    FFontSize := Size;
    End;
     
    Procedure WriteXY(X, Y : Integer; Text : String);
    Const
      Mask : Array [0..7] Of Byte = (128, 64, 32, 16, 8, 4, 2, 1);
     
    Var
      XCh, YCh, i : Integer;
      Ch, Height : Byte;
    Begin
    For i := 1 To Length(Text) Do
      Begin
      Ch := Mem[Seg(Text[i]):Ofs(Text[i])];
      If FFontSize = 0 Then Height := 15
      Else Height := 7;
      For YCh := 0 To Height Do
          For XCh := 0 To 7 Do
            Begin
            If FFontSize = 0 Then
            Begin
            If (LgFont^[(Ch * 16) + YCh] And Mask [XCh]) <> 0 Then
               PutPixel (X + ((i - 1) * 8) + XCh, Y + YCh, GetColor);
            End
            Else
            Begin
            If (SlFont^[(Ch * 8) + YCh] And Mask [XCh]) <> 0 Then
               PutPixel (X + ((i - 1) * 8) + XCh, Y + YCh, GetColor);
            End;
            End;
    End;
    End;
     
     
    var
      Gd, Gm: Integer;
     
    begin
    Gd:= Detect;
    InitGraph(Gd, Gm, 'D:\BP7\BGI');
    LoadFonts;
     
    SetTextSize(0);
    WriteXY(100, 100, 'Test police 8x16');
     
    SetTextSize(1);
    WriteXY(100, 150, 'Test police 8x8');
     
    ReadKey;
    FreeFonts;
    CloseGraph;
    end.

    A+

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 8
    Par défaut
    Hdd34: Merci!!!
    du boulot en perpective!!!

    j'ai essayé ...d'essayer font editor...
    c'est très bien foutu pour un prog de cette époque là.
    malheureusement ça réclame trop de temps, de plus les polices BGI .CHR ne permettent pas (ou alors je ne l'ai pas vu dans FE) de remplir les caracteres au sens propre du terme, il faut balayer...
    résultats incertains...

    je vais essayer le code que tu m'as fourni, et je t'en remercie.

    il semble que la méthode la plus simple (mais pas la plus élégante, certes) soit putpixel avec comme référence un tableau créé "à la main".
    en tout cas c'est celle qui revient le plus souvent.
    l'avantage avec ta méthode, c'est qu'il ne faut pas réinventer la police puisque son modèle est extirpé du bios.

    une question: les PC embarqués ont parfois des bios "exotiques" est ce que ça marche dans ces cas là? est ce que ces adresses bios sont "béton" et obligatoires pour tout compatible PC?

    J'ai trouvé aussi un petit prog sympa qui traduit une police TTF en CHR, mais qui coute env 100€...

    http://digilander.libero.it/pnavato/EasyFonts/

    Merci pour tous ces renseignements, et à pluche!

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 8
    Par défaut
    Bon, Testé et Approuvé!!!

    La police 8x16 semble correspondre à merveille à la taille (ridicule) du LCD 5.7".
    il semble que cela corresponde visuellement à la police 8x8 sur l'ancien 320x240, ce qui serait logique...

    Si c'est pas du grand art, qu'est ce l'art?

    Hdd34 est un modeste, les aminches.

    Tout ça ça mérite bien un petit lien vers votre (magnifique) site! ça sera fait à la prochaine mise à jour du mien.

    Au fait, on est voisins, à quand l'apéro?

    A plus.

    PS: j'essaierai de contribuer un peu plus!
    PS2: j'ai clos le thread par [RESOLU] comme ça le chef il sera content!

  12. #12
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 466
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 466
    Par défaut
    Tiens, c 'est peut-être la première fois que j'ai fait un code plus propre qu'HDD34 !! J'avais également utilisé ces polices pour mon unité VESA, ma très vieille unité VESA qui faudrait que j'améliore au passage
    a+

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

Discussions similaires

  1. [warning][properties]problème de police introuvable
    Par cyrdec dans le forum API standards et tierces
    Réponses: 8
    Dernier message: 11/04/2003, 17h41
  2. [SWING][FONT] choisir la police par défaut
    Par narmataru dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 21/02/2003, 10h35
  3. Réponses: 5
    Dernier message: 27/11/2002, 14h08
  4. [VB6][impression]Comment faire des effets sur les polices ?
    Par le.dod dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 08/11/2002, 10h31
  5. Adresse des polices de caractères dans la RAM video ?
    Par Anonymous dans le forum x86 16-bits
    Réponses: 5
    Dernier message: 27/05/2002, 17h29

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