| RichEditFunction | |
|
|
Auteur | Message |
---|
Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: RichEditFunction Mer 29 Jan 2014 - 14:47 | |
| @ Klaus, Dans KGF.chm tu dis renvoies à KGF_Sub.bas pour les paramètres par% mais je ne trouve pas les subs.... | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: RichEditFunction Mer 29 Jan 2014 - 17:57 | |
| Cet oubli sera corrigé dans la prochaine version. Désolé. | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: RichEditFunction Mer 29 Jan 2014 - 18:16 | |
| Cet oubli est corrigé. Recharge KGF_SUB.bas. | |
|
| |
Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mer 29 Jan 2014 - 21:34 | |
| Merci pour la mise à jour express de KGF_SUB.bas. Cependant, cela ne nous en dit pas plus sur les valeurs à passer en paramètre dans par%. ex : si je mets "0" pour l' option "1" j' ai quoi en retour ?...et idem pour les autres options... | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: RichEditFunction Mer 29 Jan 2014 - 23:09 | |
| Pour bold, intalic, underline, strike et invisible, tu passes 1 pour activer et 0 pour désactiver. Pour FontName, tu passes adr(x$) avec x$ contenant le nom de la police. Pour FontSize, tu passes la valeur de la taille de la police. Pour Color, tu passes la valeur RGB de la couleur: (B*256+G)*256+R
Dans tous les cas, la fonctioin retourne -1 si erreur, et autre chose sinon. | |
|
| |
Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mer 29 Jan 2014 - 23:43 | |
| Merci Klaus. Je comprends mieux avec ces explications... | |
|
| |
Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: autre question Jeu 30 Jan 2014 - 14:33 | |
| Salut Klaus, Y a t il un moyen de rendre le focus automatiquement au RichText après le clic sur un bouton ? Ex : Je tape mon texte dans le RE et je veux que le texte suivant soit en gras. Je clique sur mon bouton "B" ( ce bouton est créé et il fonctionne bien ). Je voudrais qu' une fois le bouton cliqué le focus soit rendu au RE. Sauf que ce n' est pas un objet Panoramic et je ne peux pas utiliser "Set_Focus". Y a t il quelque part dans la dll un moyen de le faire ?... ou est ce possible de rajouter une petite fonction à la dll pour ses objets ?... Actuellement, je suis obligé de cliquer sur le RE pour lui rendre le focus avant de continuer à taper mon texte. | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: RichEditFunction Jeu 30 Jan 2014 - 14:59 | |
| Oui. Je vais faire un nouveau code pour RichEditFunction: code 9 = Set Focus. Patience... EDIT En fait, ce n'est pas la peine. C'est déjà le cas ! Regarde le code suivant (il faut changer le nom du fichier pour prendre un fichier RTF de chez toi: - Code:
-
label bleu dim RE%, res%, f$, clr%
dll_on "KGF.dll"
RE% = dll_call1("RichEditCreate",handle(0))
f$ = "ListeDesMois.rtf"
res% = dll_call2("RichEditFileLoad",RE%,adr(f$)) button 1 : top 1,10 : left 1,300 caption 1,"Bleu" : on_click 1,bleu end
bleu: clr% = (255*256+0)*256+0 : ' blue color res% = dll_call3("RichEditFunction",RE%,7,clr%) return
Surligne une partie du texte et clique sur "Bleu". Le texte se met en bleu, et le curseur RESTE dans le RichEdit. La preuve: tape directement une lettre, et elle viendra se mettre dans le RichEdit, à la bonne place ! Il en est de même pour les autres options de RichEditFunction.
Dernière édition par Klaus le Jeu 30 Jan 2014 - 15:12, édité 1 fois | |
|
| |
Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Jeu 30 Jan 2014 - 15:11 | |
| Je vais te faire un petit memo pour la doc de RE bold, italic ,.... ne fonctionne pas tout à fait comme expliqué dans la doc actuelle. Si il s' agit d' un texte en cours d' écriture, l' attribut est actif depuis le dernière position du curseur jusqu' à ce qu' il soit rendu inactif par "par%=0". Si il s'agit d' un texte "loader" il agit bien comme le dit la doc mais si il n' est pas désactiver par par%=0 si on ajoute du texte, même en fin de RE, il aura l' attribut. d' où l'intérêt : de connaitre la position du curseur de pouvoir dé-sélectionner un texte par commande de pouvoir replacer le curseur par commande au sein du texte etc... J' arrête, tu vas finir par me maudire... Je dois m'absenter une heure ou deux, je ferai cela à mon retour. | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: RichEditFunction Jeu 30 Jan 2014 - 15:34 | |
| On s'est croisé, avec mon EDIT du post précédent. Mais regarde ce code un peu plus complet: - Code:
-
label couleur, gras
dim RE%, res%, f$, clr%, bold%
dll_on "KGF.dll"
RE% = dll_call1("RichEditCreate",handle(0))
f$ = "ListeDesMois.rtf"
res% = dll_call2("RichEditFileLoad",RE%,adr(f$)) button 1 : top 1,10 : left 1,300 caption 1,"Bleu" : on_click 1,couleur button 2 : top 2,40 : left 2,300 caption 2,"Noir" : on_click 2,couleur button 3 : top 3,70 : left 3,300 caption 3,"Gras" : on_click 3,gras
end
couleur: select number_click case 1 clr% = (255*256+0)*256+0 : ' blue color res% = dll_call3("RichEditFunction",RE%,7,clr%) case 2 clr% = 0 : ' black color res% = dll_call3("RichEditFunction",RE%,7,clr%) end_select return
gras: bold% = 1 - bold% res% = dll_call3("RichEditFunction",RE%,1,bold%) return
Procède comme suit: 1. place le curseur n'importe où dans le texte, là où le texte est noir et non-gras 2. tape quelques caractères - ils s'afficheront en noir, non-gras 3. clique sur le bouton "Bold" ==> le curseur RESTE dans le RichEdit 4. tape quelques caractères ==> ces caractères s'affichent en GRAS 5. clique à nouveau sur le bouton "Bold" ==> le curseur RESTE dans le RichEdit 6. tape quelques caractères ==> ces caractères s'affichent en non-gras 7. clique sur "Bleu" ==> Le curseur RESTE dans le RichEdit 8. tape quelques caractères ==> ces caractères s'affichent en bleu 9. clique sur "Noir" ==> le curseur RESTE dans le RichEdit 10 tape à nouveau quelques caractères ==> ces caractères s'affichent en noir Tu vois ? La couleur reste active tan que tu ne la changes pas. Les attributs aussi. Pour les attributs, la valeur 1 du paramètre active l'attribut, la valeur 0 désactive l'attribut. Si, au moment de l'emploi de la fonction RichEditFunction, du texte était sélectionné (surligné), la fonction s'applique sur le texte sélectionné, et la couleur ou l'attribut RESTE ACTIF jusqu'au changement suivant. J'espère que c'est plus clair come ça. | |
|
| |
Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Jeu 30 Jan 2014 - 18:30 | |
| Je ne sais pas si ce que j' ai chez moi est la même chose que chez toi mais :
Selection du texte >>surlignage du texte en noir Clic sur un bouton >>changement de la couleur clic sur la fin d' une ligne >> le curseur s' affiche et clignote sur le RE clic sur une des touches de direction >> le RE perd le focus et selection du bouton suivant du changement de couleur
Apparemment pour panoramic c' est toujours le dernier bouton cliqué qui a le focus
Je crois que la fonction s' impose de même que des ascenceurs seraient les bienvenues | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: RichEditFunction Jeu 30 Jan 2014 - 18:45 | |
| Tu as esayé le code et le mode d'emploi que j'ai posté ci-dessus ? Je crois que tu interprètes mal tes résultats.
Pour l'ascenseur, c'est une vraie suggestion, et je vais l'étudier. | |
|
| |
Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Jeu 30 Jan 2014 - 18:57 | |
| Grrrr !.... Je crois que le Pb vient du fait que mes boutons sont des "Button_Picture" il doit y avoir un truc qui se passe avec... J' ai mis à jour mon webdav. Les boutons Bold, italic et underline sont actifs si tu veux y jeter un oeil. Je te propose une fonction plus générale pour les objets KGF. res%=dll_call1("SetFocusByHandle",obj%) RE% pour RchEditText | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: RichEditFunction Jeu 30 Jan 2014 - 19:48 | |
| Je vais regarder ça, Ygeronimi. Mais avec le code que j'ai posté, tu vois clairement que le focus est redonné au RichEdit après chaque exécution de RichEditFunction. Et j'ai vérifié dans le source de KGF.dll: le focus est restauré explicitement. Voici la partie du code Delphi concerné: - Code:
-
{ codes fonction: 1 = sélection en gras si par=1 2 = sélection en italique si par=1 3 = sélection soulignée si par=1 4 = sélection barrée si par=1 5 = nom de police par 6 = taille de police par 7 = sélection en couleur par 8 = visibilité } function RichEditFunction(obj,fct,par: integer):integer; stdcall; export; var RE: TRichEdit; s: string; begin result := -1; try RE := TRichEdit(obj); case fct of 1: begin if par=1 then RE.SelAttributes.Style := RE.SelAttributes.Style+[fsBold] else RE.SelAttributes.Style := RE.SelAttributes.Style-[fsBold]; RE.SetFocus; //Rend la main au RichEdit end; 2: begin if par=1 then RE.SelAttributes.Style := RE.SelAttributes.Style+[fsItalic] else RE.SelAttributes.Style := RE.SelAttributes.Style-[fsItalic]; RE.SetFocus; //Rend la main au RichEdit end; 3: begin if par=1 then RE.SelAttributes.Style := RE.SelAttributes.Style+[fsUnderline] else RE.SelAttributes.Style := RE.SelAttributes.Style-[fsUnderline]; RE.SetFocus; //Rend la main au RichEdit end; 4: begin if par=1 then RE.SelAttributes.Style := RE.SelAttributes.Style+[fsStrikeOut] else RE.SelAttributes.Style := RE.SelAttributes.Style-[fsStrikeOut]; RE.SetFocus; //Rend la main au RichEdit end; 5: begin s := pstring(par)^; RE.SelAttributes.Name := s; RE.SetFocus; //Rend la main au RichEdit end; 6: begin RE.SelAttributes.Size := par; RE.SetFocus; //Rend la main au RichEdit end; 7: begin RE.SelAttributes.Color := par; RE.SetFocus; //Rend la main au RichEdit end; 8: begin RE.Visible := (par=1); if par=1 then RE.SetFocus; //Rend la main au RichEdit end; end; result := 0; except end; end;
on voit clairement que le focus est restauré systématiquement. Si ça ne marche pas chez toi, c'est que ça vient de ron programme. Je vais regarder ça ce soir. | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: RichEditFunction Jeu 30 Jan 2014 - 22:04 | |
| J'ai regardé ton code. Le problème vien du fait que seule la procédure Bold_text() est appelée lors du clic sur le bouton correspondant. Mais les procédures Italic_text() et Underline_text() ne sont jamais appelées par leur bouton correspondant. Place une commande MESSAGE immédiatement après la commande SUB, et tu peux le constater. La sub Color_text() est vide - pas encore codée. Voici ma petite démo, encore complétée pour voir les italiques et soulignés: - Code:
-
label opt
dim RE%, res%, f$, clr%, bold%, italic%, underline%
dll_on dir_current$+"\PPE_fichiers\KGF.dll"
RE% = dll_call1("RichEditCreate",handle(0))
f$ = "ListeDesMois.rtf"
res% = dll_call2("RichEditFileLoad",RE%,adr(f$)) button 1 : top 1,10 : left 1,300 caption 1,"Bleu" : on_click 1,opt button 2 : top 2,40 : left 2,300 caption 2,"Noir" : on_click 2,opt button 3 : top 3,70 : left 3,300 caption 3,"Gras" : on_click 3,opt button 4 : top 4,100 : left 4,300 caption 4,"Italic" : on_click 4,opt button 5 : top 5,130 : left 5,300 caption 5,"Underline" : on_click 5,opt
end
opt: select number_click case 1 clr% = (255*256+0)*256+0 : ' blue color res% = dll_call3("RichEditFunction",RE%,7,clr%) case 2 clr% = 0 : ' black color res% = dll_call3("RichEditFunction",RE%,7,clr%) case 3 bold% = 1 - bold% res% = dll_call3("RichEditFunction",RE%,1,bold%) case 4 italic% = 1 - italic% res% = dll_call3("RichEditFunction",RE%,2,italic%) case 5 underline% = 1 - underline% res% = dll_call3("RichEditFunction",RE%,3,underline%) end_select return
Tu constates aisément que le problème ne vient pas de la DLL, mais de ton programme. En fait, puisque tes procédures pour italique et souligné ne sont jamais appelées, la fonction RichEditFunction n'est pas exxécutée non plus. Et donc, le focus reste sur l'objet qui a reçu le clic, donc le bouton image. Et c'est ce qui m'a mis la puce à l'oreille. | |
|
| |
Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Jeu 30 Jan 2014 - 22:19 | |
| Pour les deux ( italic et underline ) je me suis apperçu de l' horreur..euh...erreur. Mais cela n' explique pas que je doive recliquer sur le RE pour lui rendre le focus après avoir cliquer sur le bouton "Bold" En fait, le RE perd le focus dès que je passe sur un des "bouton picture".
Je pense que cela vient d'une des fonctions de ces boutons ( Fichier OBJ.bas lignes 225 à 243 )
Ps : Je vais activer tous ces boutons pour ne plus avoir d' autres surprises. | |
|
| |
Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Jeu 30 Jan 2014 - 22:59 | |
| Le Casse..... est toujours là. pour les couleurs, tu mets cette formule : clr% = (255*256+0)*256+0 : ' blue color pourrais tu traduire en placant R,G,B dans ta formule svp ? | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: RichEditFunction Ven 31 Jan 2014 - 0:11 | |
| Formule: RGB% = (B%*256+G%)*256+R%
Ton bouton B marche très bien, tant que tu ne repasses pas sun un autre bouton image. Essaie ceci: commence à saisir tu texte - il se met en mode normal monte le curseur sur le bouton "Bold" et clique - le curseur réapparaît dans le RichEdit ! continue à saisir tu texte sans bouger la souris - le texte est en gras reclique sur le bouton "Bold" (la souris est toujours dessus) - le curseur réapparait dans le RichEdit ! continue à saisir du texte sans bouger la souris - le texte est en normal
Cela montre que RichEdit fonctionne bien. Tu as néanmoins un problème avec la synchronisation des boutons image. | |
|
| |
Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Ven 31 Jan 2014 - 0:38 | |
| Je me pose la question sur la variable res% qui sert à beaucoup de monde...ne pourrait elle pas se court-circuiter entre les fonctions du bouton et celle de bold ?J' ai dit une bêtise, dans l' objet Picture_button elle s' appelle KGF_res%. | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: RichEditFunction Ven 31 Jan 2014 - 2:11 | |
| J'ai mis en place la version V2.77 de KGF.dll qui contient la fonction dont tu as besoin... | |
|
| |
Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Ven 31 Jan 2014 - 2:22 | |
| Ok Klaus, une nouvelle fois merci pour le temps que tu passes à nous aider. | |
|
| |
Contenu sponsorisé
| Sujet: Re: RichEditFunction | |
| |
|
| |
| RichEditFunction | |
|