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 :

Delphi7 texte Vertical


Sujet :

Delphi

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations forums :
    Inscription : Avril 2011
    Messages : 177
    Points : 111
    Points
    111
    Par défaut Delphi7 texte Vertical
    Bonjour,
    Comment je peu écrire un texte ou une valeur verticalement dans Delphi 7
    Aussi je cherche une idée pour simuler un bouton ON/OFF, j’ai utilisé un TEdit avec des couleurs Rouge et vert mes je cherche à utiliser un cercle (Contient le texte ON/Off et aussi la Couleur)
    Merci.

  2. #2
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 502
    Points : 3 133
    Points
    3 133
    Par défaut
    pour écrire en vertical ou à un angle précis, il existe des dizaines de composants déjà écrits pour ça.

    http://www.torry.net/pages.php?s=75

    Pour le bouton ON/OFF , utilise un TImage avec 2 images différentes qui alterneront sur le OnClick.

  3. #3
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    206
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 206
    Points : 143
    Points
    143
    Par défaut
    pour ecrire verticalement un petit text.

    un TEdit + un Tlabel + un bouton

    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 TForm1.Button1Click(Sender: TObject);
    Var St:String;
    i:Integer;
    begin
    St:=edit1.text; //Texte à écrire verticalement
    Label1.Caption:=''; //Efface le contenu du label
    for i:=1 to Length(St) do  // en boucle sur touts les charters
    Label1.Caption:=Label1.Caption+St[i]+#13; // après chaque mot retour chariot
     
    end;
     
    end.
    pour la simulation d'un bouton ON / Of

    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
     
     
    unit Unit2;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
     
    type
      TForm2 = class(TForm)
        Button1: TButton;
        Edit1: TEdit;
        procedure Button1Click(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form2: TForm2;
       etat:boolean;  // -----> 
    implementation
     
    {$R *.dfm}
     
    procedure TForm2.Button1Click(Sender: TObject);
    begin
    etat:= not etat; //  l'état de clic  
    if etat  then  // si vrais 
    edit1.color:=clRed // alors rouge
    else  // si faut 
    edit1.color:=clBlue; // alors bleu 
     
    end;
     
    end.
    enjoy;

  4. #4
    Expert éminent sénior

    Avatar de Nono40
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2002
    Messages
    8 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Loir et Cher (Centre)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 8 640
    Points : 19 104
    Points
    19 104
    Par défaut
    Citation Envoyé par MIWAN Voir le message
    pour ecrire verticalement un petit text.

    un TEdit + un Tlabel + un bouton
    Je ne crois pas que ce soit sa demande, dans ton cas les caratcères seront toujours verticaux mais les uns au dessus des autres.

  5. #5
    Membre confirmé
    Homme Profil pro
    Santé
    Inscrit en
    Septembre 2010
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Santé
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2010
    Messages : 290
    Points : 534
    Points
    534
    Par défaut
    Pour le texte, il faut utiliser l'API CreateFont.

    Pour le bouton, un simple TSpeedButton avec les propriétés :
    - GroupIndex : 1 (ou +)
    - AllowAllUp : true
    - Glyph : un Bitmap approprié
    - Flat : true (si tu ne veux qu'1 rond, comme un Icon)

  6. #6
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Sinon je crois me souvenir qu'il y a un composant dans la JVCL qui permet de le faire

  7. #7
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut
    Bonjour,

    Voici un bout de code permettant d'écrire un texte incliné (pour la verticale prendre AngleDD = 900) sur n'importe quel truc possédant un Canvas. Pour du texte monochrome prendre Texture=Nil.

    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
    // Ecrire sur un canvas un texte incliné, avec ou sans bordure, monochrome ou à face texturée
    procedure AffTexteIncliBordeTexture( C : TCanvas; X,Y : integer; Fonte : tFont;
                                         clBord : TColor; EpBord : integer; PenMode : TPenMode;
                                         Texture : tBitMap; Texte : string; AngleDD : longint);
    // params : C       = Canvas-cible
    //          X,Y     = Coordonnées angle supérieur gauche du début du texte.
    //          Fonte   = Police de caractères à utiliser : uniquement des fontes scalables.
    //          clBord  = Couleur de la bordure.
    //          EpBord  = Epaisseur de la bordure.
    //          PenMode = TPenMode : utiliser en général pmCopy.
    //          Texture = BitMap de texture : Si Texture = Nil alors la face sera de la couleur de Fonte avec un contour de clBord si EpBord > 0.
    //          Texte   = Texte à écrire.
    //          AngleDD = Angle d'inclinaison en Dixièmes de degré.
    var	  dc     : HDC;
              lgFont : LOGFONT;
              AncFonte,NouvFonte : HFONT;
    	  AncPen,NouvPen     : HPEN;
              AncBrush,NouvBrush : HBRUSH;
    begin     C.Pen.Mode:=PenMode;
              dc := C.Handle;
     
              // Initialisation de la fonte
              zeroMemory(@lgFont,sizeOf(lgFont));
              strPCopy(lgFont.lfFaceName,Fonte.Name);
              lgFont.lfHeight := Fonte.Height;
              if Fonte.style=[]       then lgFont.lfWeight:=FW_REGULAR; // Normal
              if Fonte.style=[fsBold] then lgFont.lfWeight:=FW_BOLD;    // Gras
     
              if fsItalic in Fonte.style    then lgFont.lfItalic:=1;
              if fsUnderline in Fonte.style then lgFont.lfUnderline:=1;
              if fsStrikeout in Fonte.style then lgFont.lfStrikeout:=1;
     
              lgFont.lfEscapement:=AngleDD; // Modification de l'inclinaison
     
              NouvFonte := CreateFontInDirect(lgFont);
              AncFonte := SelectObject(dc,NouvFonte);
     
              // Initialisation du contour :
              if EpBord<>0 then NouvPen := CreatePen(PS_SOLID,EpBord,clBord)
                           else NouvPen := CreatePen(PS_NULL,0,0);
              AncPen := SelectObject(dc,NouvPen);
     
              // Initialisation de la couleur de la police ou de la Texture :
              if Texture=nil then NouvBrush := CreateSolidBrush(Fonte.color) 
                             else NouvBrush := CreatePatternBrush(Texture.Handle);
              AncBrush := SelectObject(dc,NouvBrush);
              // Le contexte doit être transparent
              SetBkMode(dc,TRANSPARENT);
     
              // Dessin du texe :
              BeginPath(dc);
              TextOut(dc,X,Y,PChar(Texte),length(texte)); //<- au lieu de TextOut(dc,X,Y,PansiChar(Texte),length(texte)) pour rendre le code compatible avec toutes les versions de Delphi (de D2 à XE2);
              EndPath(dc);
              StrokeAndFillPath(dc);
     
              // Restauration objets et libération mémoire
              SelectObject(dc,AncFonte);
              DeleteObject(NouvFonte);
              SelectObject(dc,AncPen);
              DeleteObject(NouvPen);
              SelectObject(dc,AncBrush);
              DeleteObject(NouvBrush);
     
    end; // AffTexteIncliBordeTexture
    A+.

  8. #8
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 705
    Points : 25 575
    Points
    25 575
    Par défaut
    Comment écrire verticalement ?
    Gilbert Geyer avait déjà fourni un code similaire en 2008

    Pour approfondir le code de Gilbert Geyer qui utilise uniquement lfEscapement, je propose le mien, je ne l'ai plus en Delphi mais je l'ai encore en C++Builder pour afficher des Libellé penché dans un TTabControl
    Je l'ai juste fait pour le fun, je ne l'ai jamais utilisé en prod !

    En jouant sur lfEscapement et lfOrientation, on peut pencher le texte dans un sens mais les lettres dans l'autre sens !

    Code c++ : 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
     
          LOGFONT ParamFont;
          if (GetObject(Control->Canvas->Font->Handle, sizeof(ParamFont), &ParamFont) > 0)
          {
            int OldMode = SetGraphicsMode(Control->Canvas->Handle, GM_ADVANCED);
            try
            {
              if (GetGraphicsMode(Control->Canvas->Handle) == GM_ADVANCED)
              {
                ParamFont.lfEscapement = -450; // tenths of degrees, angle of Text
                ParamFont.lfOrientation = 450; // tenths of degrees, angle of Letters
              }
              else
                ParamFont.lfEscapement = -450; // tenths of degrees, angle of Text and Letters
     
              HGDIOBJ NewFontHandle = CreateFontIndirect(&ParamFont);
              try
              {
                HGDIOBJ OldFontHandle = SelectObject(Control->Canvas->Handle, NewFontHandle);
                try
                {
                  DrawText(Control->Canvas->Handle, ((TTabControl*)Control)->Tabs->Strings[TabIndex].c_str(), -1, (LPRECT)&Rect, 0);
                }
                __finally
                {
                  SelectObject(Control->Canvas->Handle, OldFontHandle);
                }
              }
              __finally
              {
                DeleteObject(NewFontHandle);
              }
            }
            __finally
            {
              SetGraphicsMode(Control->Canvas->Handle, OldMode);
            }
          }

  9. #9
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut
    Re-Bonjour,

    Gilbert Geyer avait déjà fourni un code similaire en 2008
    ... Yaiise, mais depuis 2008 je l'ai amélioré pour afficher du texte incliné, éventuellement texturé avec ou sans liseret de bordure ... mais c'est pour du texte de grande taille, par contre celui de 2008 peut suffire pour du texte simple incliné monochrome.

    A+.

Discussions similaires

  1. Pb de formatage de texte... Vertical, inversé...
    Par Grammaton dans le forum Access
    Réponses: 4
    Dernier message: 01/03/2007, 14h54
  2. [Etat] Texte Vertical
    Par Lejohnn dans le forum IHM
    Réponses: 4
    Dernier message: 06/12/2005, 16h46
  3. Texte vertical
    Par Noun dans le forum OpenGL
    Réponses: 1
    Dernier message: 01/06/2005, 18h13
  4. [C#] Affichage de texte vertical...
    Par AntiSAL dans le forum Windows Forms
    Réponses: 6
    Dernier message: 10/06/2004, 15h46
  5. Canvas et Texte vertical
    Par ulysse66x dans le forum Composants VCL
    Réponses: 8
    Dernier message: 01/02/2004, 17h46

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