Superposer deux caractères [Résolu]

YB28 39 Messages postés lundi 23 avril 2012Date d'inscription 29 juillet 2012 Dernière intervention - 21 mai 2012 à 11:47 - Dernière réponse : cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention
- 23 mai 2012 à 12:32
Bonjour,

je souhaiterai obtenir dans mon richedit une flèche mais je n'arrive pas à utiliser l'unicode sous delphi 7, il me remplace le caractère attendu (flèche) par "?".je ne sais pas si c'est possible de dessiner pixel par pixel à la place d'un caractère,ou sinon je pensai superposer deux caractères "-" et ">" est possible? et si oui Comment? J'ai regarder sur le net et j'ai trouvé peu de choses à part ca {\EQ \o(A;¯)}
Mais je ne sais pas comment ca fonctionne, apparement ca serait pour enlever la barre horizontale du A...

Merci de bien vouloir m'éclairer svp ;)
Afficher la suite 

Votre réponse

13 réponses

Meilleure réponse
cs_Jean_Jean 639 Messages postés dimanche 13 août 2006Date d'inscription 5 mai 2016 Dernière intervention - 22 mai 2012 à 14:06
3
Merci
J'ai trouvé,

plutôt que de t'embêter à charger une table, il y a la fonction API SendMessage qui gère directement l'unicode avec la Constante : WM_IME_CHAR

Richedit1.Font.Name:='Lucida Console';
sendmessage(Richedit1.handle,WM_IME_CHAR,$2192,0);



Jean_Jean

Merci cs_Jean_Jean 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de cs_Jean_Jean
cs_Jean_Jean 639 Messages postés dimanche 13 août 2006Date d'inscription 5 mai 2016 Dernière intervention - 21 mai 2012 à 12:32
0
Merci
Salut YB,

Oui tu peux dessiner sur un richEdit car il a un canvas:

var DC : hdc;
   Pen : HPen;
begin
// obtient le handle et contexte du TRichEdit
DC := GetDc(Editor.Handle);
Pen:=CreatePen(PS_Dot,0,RGB(0,0,255));
SelectObject(DC,Pen);
// Dessine une ligne
MoveToEx(Dc, 0, 0, nil);
LineTo(Dc, 0, 30);


J'ai Pas essayé, mais l'idée est là. Il te reste ensuite le pb de positionner ton dessin au milieu du texte.

Mais il y a surement une meilleure solution.Chr ne peut pas fonctionner car c'est un code Octet et don l'unicode ne peut s'afficher.
Il faut utiliser une autre fonction que je ne connais pas. Peut-être WideChar ou Widestring...

A vérifier

Jean_Jean
Commenter la réponse de cs_Jean_Jean
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 21 mai 2012 à 17:21
0
Merci
Bonjour,

procedure TForm1.Button3Click(Sender: TObject);
var
  UnicodeString: PWideChar;
begin
  UnicodeString := WideChar($003E);
  RichEdit1.Lines.Add(WideCharToString(UnicodeString));
end;



cantador
Commenter la réponse de cs_cantador
cs_Jean_Jean 639 Messages postés dimanche 13 août 2006Date d'inscription 5 mai 2016 Dernière intervention - 21 mai 2012 à 20:42
0
Merci
Yo Cantador,

Simple en fait. Va falloir que je me mette sérieux à l'unicode...

Jean_Jean
Commenter la réponse de cs_Jean_Jean
YB28 39 Messages postés lundi 23 avril 2012Date d'inscription 29 juillet 2012 Dernière intervention - 22 mai 2012 à 09:19
0
Merci
Bonjour,
Merci de vos réponse, j'ai bien essayé vos solutions. Cependant Cantador lorsque je veux mettre l'unicode 2192, qui est celui de la flèche d'après la table des caractères pour lucida console, cela ne fonctionne pas je peux juste observer un '?' .
Merci pour ta solution Jean_Jean mais je me suis rendu compte que cette méthode n'est pas adaptée car je dois pouvoir copier le texte et le coller dans word.

YB
Commenter la réponse de YB28
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 22 mai 2012 à 10:26
0
Merci
@YB28:

On ne peut pas vouloir le beurre et l'argent du beurre.
il faut s'adapter et éventuellement changer de fonte..
et chercher aussi de son côté.

J'ai répondu à ta question de départ.

cantador
Commenter la réponse de cs_cantador
cs_Jean_Jean 639 Messages postés dimanche 13 août 2006Date d'inscription 5 mai 2016 Dernière intervention - 22 mai 2012 à 12:48
0
Merci
Oui ben en fait c'est pas aussi simple que ça!

Car changer la police ne change rien. Donc soit la fonction WideChar gère le mécanisme de la Table unicode (2192 est bien le code de la flèche) et met en rapport avec la table de la police. Soit elle ne ne le fait pas et dans ce cas c'est au programmeur de le faire.

J'ai jamais essayé sous D7. En D5, j'utilisai des fonctions spécifiques de langue pour accéder aux tables windows. C'était pas très simple...

Je pense qu'avec XE2 les choses doivent être plus simples.

Bon YB as-tu essayé avec les propriétés du RichEdit? le ImeMode mais je maitrise pas...


Jean_Jean
Commenter la réponse de cs_Jean_Jean
cs_Jean_Jean 639 Messages postés dimanche 13 août 2006Date d'inscription 5 mai 2016 Dernière intervention - 22 mai 2012 à 13:04
0
Merci
@ YB

Regarde ICI!

ça devrait t'aider...

Jean_Jean
Commenter la réponse de cs_Jean_Jean
YB28 39 Messages postés lundi 23 avril 2012Date d'inscription 29 juillet 2012 Dernière intervention - 22 mai 2012 à 16:07
0
Merci
Merci Jean_Jean pour toute cette aide, c'est exactement ca qu'il me fallait !! ;)
Maintenant il me reste plus qu'à positionner la flèche dans mon richedit et ca sera parfait ;) Pour ca je vais sans doute utiliser selstart...

Merci encore !
YB
Commenter la réponse de YB28
YB28 39 Messages postés lundi 23 avril 2012Date d'inscription 29 juillet 2012 Dernière intervention - 22 mai 2012 à 16:28
0
Merci
richedit1.SelStart := SendMessage(richedit1.Handle, EM_LINEINDEX, ligne, 0)+colonne;
sendmessage(Richedit1.handle,WM_IME_CHAR,$2192,0);
Et voila pour ce qui est de la position ;)
Commenter la réponse de YB28
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 22 mai 2012 à 22:05
0
Merci
procedure TForm1.Button1Click(Sender: TObject);
begin
  richedit1.SelStart := SendMessage(richedit1.Handle, EM_LINEINDEX, 10, 0) + 5;
  sendmessage(Richedit1.handle, WM_IME_CHAR, $2192, 0);
end;


et là tu as bien ta flèche à la 10ème ligne et la 5ème colonne ?

cantador
Commenter la réponse de cs_cantador
YB28 39 Messages postés lundi 23 avril 2012Date d'inscription 29 juillet 2012 Dernière intervention - 23 mai 2012 à 09:25
0
Merci
Pour avoir la flèche à la bonne position j'ai d'abord initialisé les lignes comme ceci

Form1.richedit1.Clear;
  L0:='                    ';
  L1:='                    ';
  L2:='                    ';
  L3:='                    ';
  Form1.richedit1.Lines[0]:=L0+#13+#10;
  Form1.richedit1.Lines[1]:=L1+#13+#10;
  Form1.richedit1.Lines[2]:=L2+#13+#10;
  Form1.richedit1.Lines[3]:=L3;


Sinon ca ne fonctionnait pas.

Et ensuite avec le code précedent je place selon la ligne et la colonne (sachant que je n'utilise que 4 lignes pour mon projet).
Commenter la réponse de YB28
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 23 mai 2012 à 12:32
0
Merci
Autrement le ligne colonne ne fonctionne pas.

tu peux utiliser la fonction :
StringOfChar(Ch: Char; Count: Integer): string;
à la place des ' ';

Mais, il faut encore réfléchir sur ce truc là..

cantador
Commenter la réponse de cs_cantador

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.