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

Delphi Discussion :

Tcanvas Rotation de texte et impression [FAQ]


Sujet :

Delphi

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 16
    Points : 11
    Points
    11
    Par défaut Tcanvas Rotation de texte et impression
    Bjr

    Suis un parfait debutant et souhaite obtenir 1 coup de main pour poser un texte (ayant des caracteristiques précises (Fonte, taille, graisse etc...) à (x,y,d), x étant l'abcisse, y l'ordonnée et d l'angle (sens contraire des aiguilles d'une montre) dans un Tcanvas.

    J'ai essayé avec les composants Postscript sans succès, idem pour les composants Tecanvas (Canvas3D), avec les composants OpenGL12, j'ai bien vailli m'en sortir, j'ai eu l'illusion d'avoir tous les outils en main... mais trop compliqué... je suis vraiment nul en programmation graphique, alors je donne ma langue au chat...

    Ce serait vraiment super d'avoir quelque chose de complet pret à s'executer

    Merci d'avance

  2. #2
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 54
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    En fait tu as besoin de deux choses :
    - Une Police TrueType ('Arial' par exemple)
    - L'API Windows CreateFontIndirect

    Va vite voir ce fil de discussion :
    Canvas - Ecrire a la verticale

    En particulier, le message n°4

    Bon dev

    PS : il manque aussi quelque chose pour t'apporter une réponse complête.

    Afficher un texte, c'est comme afficher un rectangle avec du texte de dans, or dans ton cas il faut savoir à quel coin du rectangle correspond tes corrdonnées (x,y) : le coin en haut à gauche (par défaut), celui en bas à droite, etc...

    Je te poste un petit exemple à la suite dès que je peux

  3. #3
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 54
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Voilà, dans un fiche, j'ai mi un Bouton, et quand on clique dessus, celà affiche Bonjour avec 3 angles différents

    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
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
     
    type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
    function IsTrueType(Font: TFont): Boolean;
    var DC: HDC;
        C : TBitmap;
        Metrics: TTextMetric;
    begin
      C := TBitmap.create;
      try
        C.canvas.Font := Font;
        DC := GetDC(0);
        try
        C.Canvas.Handle := DC;
        C.Canvas.Font := Font;
        GetTextMetrics(C.Canvas.Handle, Metrics );
        Result := ( Metrics.tmPitchAndFamily and tmpf_TrueType ) = tmpf_TrueType;
        C.Canvas.Handle := 0;
        finally
          ReleaseDC(0, DC);
        end;
      finally
        C.Free;
      end;
    end;
     
    function CreateRotatedFont(Font: TFont; Angle: Integer): HFont;
    var
      LogFont: TLogFont;
    begin
      If not IsTrueType(Font) then Font.Name:='Arial';
      FillChar(LogFont, SizeOf(LogFont), 0);
      with LogFont do begin
        lfHeight := Font.Height;
        lfWidth := 0;
        lfEscapement := Angle * 10;
        lfOrientation := 0;
        if fsBold in Font.Style then lfWeight := FW_BOLD
        else lfWeight := FW_NORMAL;
        lfItalic := Ord(fsItalic in Font.Style);
        lfUnderline := Ord(fsUnderline in Font.Style);
        lfStrikeOut := Byte(fsStrikeOut in Font.Style);
        lfCharSet := Byte(Font.Charset);
        StrPCopy(lfFaceName, Font.Name);
        lfQuality := DEFAULT_QUALITY;
        lfOutPrecision := OUT_DEFAULT_PRECIS;
        lfClipPrecision := CLIP_DEFAULT_PRECIS;
        case Font.Pitch of
          fpVariable: lfPitchAndFamily := VARIABLE_PITCH;
          fpFixed: lfPitchAndFamily := FIXED_PITCH;
          else lfPitchAndFamily := DEFAULT_PITCH;
        end;
      end;
      Result := CreateFontIndirect(LogFont);
    end;
     
    procedure TexteAngle(AString: string;ACanvas:TCanvas;Font:TFont;x,y:integer;d:integer); //angle en degres
    begin
      ACanvas.Font:=Font;
      with ACanvas do
      begin
        //Brush.Color:=Font.Color;
       Font.Handle:=CreateRotatedFont(Font, d);
       TextOut(X,Y,AString);
      end;
    end;
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      TexteAngle('Bonjour',Form1.Canvas,Form1.Font,100,100,45);
      TexteAngle('Bonjour',Form1.Canvas,Form1.Font,100,100,180);
      TexteAngle('Bonjour',Form1.Canvas,Form1.Font,100,100,-90);
    end;
     
    end.
    Bon dev

Discussions similaires

  1. probleme de rotation de texte
    Par Kobe70 dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 14/03/2008, 14h36
  2. Positionnement et taille du texte à l'impression
    Par electroremy dans le forum Vos contributions VB6
    Réponses: 2
    Dernier message: 12/01/2008, 19h55
  3. [Direct3D] Rotation de texte
    Par tnarol dans le forum DirectX
    Réponses: 4
    Dernier message: 26/01/2007, 18h13
  4. [TLabel] rotation du text dans un label
    Par Bourak dans le forum Delphi
    Réponses: 1
    Dernier message: 16/05/2006, 18h08
  5. Rotation de texte et impression
    Par rizom dans le forum Langage
    Réponses: 6
    Dernier message: 16/11/2004, 20h46

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