Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: 2.16 du 22 avril 2013: nouvel objet RichEdit Lun 22 Avr 2013 - 21:16 | |
| Nouvelle version: KGF.dll V2.16 du 22/04/2013Nouveauté: une collection de fonctions (et les procédures associées) pour gérer un objet RichEdit dans un programme Panoramic !Modules modifiés: KGF.dll KGF_SUB.bas KGF.chm, KGF.doc, KGF.pdfLa doc est à jour. Un RichEdit est un objet qui ressemble à un mémo, mais il peut recevoir le contenu d'un fichier RTF, gérér les attributs (gras, italique, souligné et barré), la couleur, la police et la taille de police, et ce non seulement globalement pour tout le texte comme un mémo, mais sélectivement pour des portions de texte ! On applique ces attributs sur la portion de texte sélectionné (surligné) dans l'objet. Voici ce que ça donne: Cela vous intéresse ? Alors voici le programme correspondant: - Code:
-
' test RichEdit.bas
label create1, create2, delete1, delete2, load1, load2, save1, save2 label bold1, bold2, italic1, italic2, under1, under2, strike1, strike2 label font1, font2, size1, size2, color1, color2, hide1, hide2
dim res%, RE1%, RE2%, fic$, s$, n%, ncar%, nlin%, v1%, v2%
KGF_initialize("KGF.dll")
width 0,600 : height 0,600
button 1 : top 1,10 : left 1, 10 : width 1,20 : caption 1,"+" : on_click 1,create1 hint 1,"Créer RicheEdit 1" button 2 : top 2,10 : left 2,310 : width 2,20 : caption 2,"+" : on_click 2,create2 hint 2,"Créer RicheEdit 2"
button 3 : top 3,10 : left 3, 30 : width 3,20 : caption 3,"x" : on_click 3,delete1 hint 3,"Supprimer RicheEdit 1" button 4 : top 4,10 : left 4,330 : width 4,20 : caption 4,"x" : on_click 4,delete2 hint 4,"Supprimer RicheEdit 2"
button 5 : top 5,10 : left 5, 50 : width 5,20 : caption 5,"L" : on_click 5,load1 hint 5,"Charger RicheEdit 1 par fichier" button 6 : top 6,10 : left 6,350 : width 6,20 : caption 6,"L" : on_click 6,load2 hint 6,"Charger RicheEdit 2 par fichier"
button 7 : top 7,10 : left 7, 70 : width 7,20 : caption 7,"S" : on_click 7,save1 hint 7,"Enregistrer RicheEdit 1 dans fichier" button 8 : top 8,10 : left 8,370 : width 8,20 : caption 8,"S" : on_click 8,save2 hint 8,"Enregistrer RicheEdit 2 dans fichier"
button 9 : top 9,10 : left 9, 90 : width 9,20 : caption 9,"H" : on_click 9,hide1 hint 9,"Cacher RicheEdit 1" button 10 : top 10,10 : left 10,390 : width 10,20 : caption 10,"H" : on_click 10,hide2 hint 10,"Cacher RicheEdit 1"
check 11 : top 11,340 : left 11, 10 : caption 11,"G" : on_click 11,bold1 hint 11,"Appliquer Gras sur RichEdit 1" check 12 : top 12,340 : left 12,310 : caption 12,"G" : on_click 12,bold2 hint 12,"Appliquer Gras sur RichEdit 2"
check 13 : top 13,340 : left 13, 50 : caption 13,"I" : on_click 13,italic1 hint 13,"Appliquer Italique sur RichEdit 1" check 14 : top 14,340 : left 14,350 : caption 14,"I" : on_click 14,italic2 hint 14,"Appliquer Italique sur RichEdit 2"
check 15 : top 15,340 : left 15, 90 : caption 15,"S" : on_click 15,under1 hint 15,"Appliquer Souligné sur RichEdit 1" check 16 : top 16,340 : left 16,390 : caption 16,"S" : on_click 16,under2 hint 16,"Appliquer Souligné sur RichEdit 2"
check 17 : top 17,340 : left 17,130 : caption 17,"B" : on_click 17,strike1 hint 17,"Appliquer Barré sur RichEdit 1" check 18 : top 18,340 : left 18,430 : caption 18,"B" : on_click 18,strike2 hint 18,"Appliquer Barré sur RichEdit 2"
combo 21 : top 21,370 : left 21, 10 : font_names_load 21 : on_click 21,font1 combo 22 : top 22,370 : left 22,310 : font_names_load 22 : on_click 22,font2
combo 23 : top 23,400 : left 23, 10 : on_click 23,size1 combo 24 : top 24,400 : left 24,310 : on_click 24,size2
combo 25 : top 25,430 : left 25, 10 : on_click 25,color1 combo 26 : top 26,430 : left 26,310 : on_click 26,color2
open_dialog 101 : filter 101,"Textes|*.rtf;*.txt" save_dialog 102 : filter 102,"Textes|*.rtf;*.txt"
text 21,"Arial" : text 22,"Arial"
item_add 23, "8" : item_add 24, "8" item_add 23,"10" : item_add 24,"10" item_add 23,"12" : item_add 24,"12" item_add 23,"14" : item_add 24,"14" item_add 23,"16" : item_add 24,"16" item_add 23,"20" : item_add 24,"20" item_add 23,"24" : item_add 24,"20" text 23,10 : text 24,10
item_add 25,"Noir" : item_add 26,"Noir" item_add 25,"Rouge" : item_add 26,"Rouge" item_add 25,"Vert" : item_add 26,"Vert" item_add 25,"Bleu" : item_add 26,"Bleu" text 25,"Noir" : text 26,"Noir"
v1% = 1 : v2% = 1
end
create1: RichEditCreate(0) RE1% = RichEditCreate RichEditGeometry(RE1%,10,40,200,300) return
create2: RichEditCreate(0) RE2% = RichEditCreate RichEditGeometry(RE2%,310,40,200,300) return
delete1: RichEditDelete(RE1%) return
delete2: RichEditDelete(RE2%) return load1: fic$ = file_name$(101) if fic$="_" then return RichEditFileLoad(RE1%,fic$) RichEditGlobalStringLength(RE1%) RichEditGlobalLineCount(RE1%) message str$(RichEditGlobalLineCount)+" lignes "+str$(RichEditGlobalStringLength)+" caractères" return
load2: fic$ = file_name$(101) if fic$="_" then return RichEditFileLoad(RE2%,fic$) RichEditGlobalStringLength(RE2%) RichEditGlobalLineCount(RE2%) message str$(RichEditGlobalLineCount)+" lignes "+str$(RichEditGlobalStringLength)+" caractères" return
save1: fic$ = file_name$(102) if fic$="_" then return RichEditFileSave(RE1%,fic$) return
save2: fic$ = file_name$(102) if fic$="_" then return RichEditFileSave(RE2%,fic$) return bold1: RichEditBold(RE1%,checked(11)) return
bold2: RichEditBold(RE2%,checked(12)) return
italic1: RichEditItalic(RE1%,checked(13)) return
italic2: RichEditItalic(RE2%,checked(14)) return under1: RichEditUnderline(RE1%,checked(15)) return
under2: RichEditUnderline(RE2%,checked(16)) return
strike1: RichEditStrike(RE1%,checked(17)) return
strike2: RichEditStrike(RE2%,checked(18)) return
hide1: v1% = 1 - v1% RichEditVisible(RE1%,v1%) return
hide2: v2% = 1 - v2% RichEditVisible(RE2%,v2%) return
font1: s$ = text$(21) RichEditFontName(RE1%,s$) return
font2: s$ = text$(22) RichEditFontName(RE2%,s$) return
size1: n% = val(text$(23)) RichEditFontSize(RE1%,n%) return
size2: n% = val(text$(24)) RichEditFontSize(RE2%,n%) return
color1: s$ = text$(25) if s$="Rouge" then RichEditColor(RE1%,255,0,0) if s$="Vert" then RichEditColor(RE1%,0,255,0) if s$="Bleu" then RichEditColor(RE1%,0,0,255) return
color2: s$ = text$(26) if s$="Rouge" then RichEditColor(RE2%,255,0,0) if s$="Vert" then RichEditColor(RE2%,0,255,0) if s$="Bleu" then RichEditColor(RE2%,0,0,255) return end
#INCLUDE "KGF_SUB.bas"
| |
|
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: 2.16 du 22 avril 2013: nouvel objet RichEdit Lun 22 Avr 2013 - 23:12 | |
| En fait, ce qui a permis de le faire, c'est la mise au point, laborieuse, d'une nouvelle technique d'injection d'objet et de construction de lien vers l'objet injecté. Auparavant, je maintenais, dans la DLL, des tables des objets créés, et je les accédais par un numéro d'objet, en général entre 1 et 20. Cela limite considérablement, et est complexe à gérer, en particulier dans le cas des suppressions d'objets.
J'ai mis au point un mécanisme très simple (et que j'aurais dû trouver depuis bien longtemps si j'avais été moins dilettante). Je laisse Windows gérer la liste des objets créés, sans m'en préoccuper (et Windows fait ça très bien), et je passe à Panoramic un identifiant d'objet qui permet de retrouver l'objet à tout moment.
Du coup, je peux beaucoup plus facilement accéder aux propriétés et méthodes de l'objet (l'ensemble des fonctions pour le RichEdit a été codé aujourd'hui !), et je pourrai également gérer facilement les évènements si Jack implémenta la suggestion que je lui ai faite concernant les USER_EVENT en Panoramic.
Maintenant, lentement, je vais appliquer cette technique aux autres objets que j'ai ajoutés: MaskEdit, ValueListEditor, DateTimePicker, WebBrowser etc. Mais surtout, je vais étudier la faisabilité d'injection d'un objet "onglet". Je sais, j'ai fait un pseudo-objet TAB, entièrement en Panoramic. Mais je vais essayer d'utiliser un objet Windows existant. Enfin, si j'y arrive. Parallèlement, j'ajouterai d'autres fonctions pour rendre accessibles plus de capacités de RichEdit. Voilà ma feuille de route... | |
|