<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<META content="MSHTML 6.00.2900.2873" name=GENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=#ffffff>
<DIV><FONT face=Arial size=2>Hi everyone</FONT></DIV>
<DIV><FONT face=Arial size=2>I'm very new to DrScheme and to scheme as 
well!</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>I'm trying to use MrEd to develop a little tool to 
store text, including the Hyperlinks facilities. As documented, I'd like to 
store text information (with the text% editore class), including some 
hyperlinks.</FONT></DIV>
<DIV><FONT face=Arial size=2>I tried to&nbsp;</FONT><FONT face=Arial 
size=2>derive new classes from editor-data% and editor-data-class%, then I wrote 
a </FONT><FONT face=Arial size=2>new class from the text% class, and tried to 
override the set-region-data and get-region-data methods.</FONT></DIV>
<DIV><FONT face=Arial size=2>Well, I'm puzzled, I don't know what is really the 
classes hierachy and thefore I struggle in understanding when and where&nbsp;to 
store the hyperlink (in the write method from the editor-class? 
Elsewhere?)</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>I join my code here below.</FONT></DIV>
<DIV><FONT face=Arial size=2>Any help very much appreciated.</FONT></DIV>
<DIV><FONT face=Arial size=2>Pascal</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>(I'm 44 and not a programmer, that may explain my 
weakness! I discovered DrScheme - and Scheme -&nbsp;on a France 
site).</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>;;the code</FONT></DIV>
<DIV><FONT face=Arial size=2>(define MyIcon .) </FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>; Type de données pour mes Tags<BR>(define 
AmjP-editor-data-class%<BR>&nbsp; (class 
editor-data-class%<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (define/override 
get-classname (lambda () 
"AmjP-editor-data-class%"))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (define/override 
set-classname (lambda (n) ()))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
(define/override read&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
(lambda (f)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
((bytes/utf-8-&gt;string (send f get (send f 
get-exact))))))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
(super-instantiate())))</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>(define My-AmjP-editor-data-class (instantiate 
AmjP-editor-data-class% ()))<BR>(send (get-the-editor-data-class-list) add 
My-AmjP-editor-data-class) </FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>;(define AmjP-editor-data-class (instantiate 
editor-data-class% ()))<BR>;(send AmjP-editor-data-class set-classname 
"AmjP-editor-data-class")<BR>;(send (get-the-editor-data-class-list) add 
AmjP-editor-data-class) </FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>; Dérivation de la Class Données 
(editor-data<BR>(define AmjP-editor-data%<BR>&nbsp; (class 
editor-data%<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (init-field (MyTag 
"Toto"))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (define/public get-tag (lambda () 
MyTag))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (define/public set-tag (lambda (n) 
(set! MyTag n)))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (define/override 
get-dataclass (lambda () 
AmjP-editor-data-class%))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (define/override 
set-dataclass (lambda (c) ()))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
(define/override write&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (lambda 
(f) <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (send f 
put-exact (string-length 
MyTag))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (send f 
put (string-length MyTag) (string-&gt;bytes/utf-8 
MyTag))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ())) 
<BR>&nbsp;&nbsp;&nbsp; (super-instantiate())))</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (define 
tedo (instantiate AmjP-editor-data% 
("tedo")))<BR>;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (display (send tedo 
get-tag))<BR>;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (define teda 
(instantiate AmjP-editor-data% 
("teda")))<BR>;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (display (send teda 
get-tag))<BR>;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (send teda set-tag 
"plouplou")<BR>;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (display (send teda 
get-tag))</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>; Nouvelle Class text% pour gérer les Données 
Tag<BR>(define AmjP-text%<BR>&nbsp; (class text%<BR>&nbsp;&nbsp;&nbsp; 
<BR>;&nbsp; (define/override write-headers-to-file<BR>;&nbsp;&nbsp; (lambda 
(stream)<BR>;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
(send this begin-write-header-footer-to-file stream "AmjP:HyperLiens" (box 
100))<BR>;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (send stream put 9 
(string-&gt;bytes/utf-8 "123456789"))<BR>;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (send 
this end-write-header-footer-to-file stream 
100)<BR>;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (super write-headers-to-file 
stream)))</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>;&nbsp; (define/override 
read-header-from-file<BR>;&nbsp;&nbsp;&nbsp; (lambda (stream 
name)<BR>;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (equal? name 
"AmjP:HyperLiens")<BR>;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (send stream read 9 
(string-&gt;bytes/utf-8 "123456789"))<BR>;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
(super read-header-from-file stream)))</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>&nbsp; (define MonClick&nbsp; 
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (lambda (MyText debut 
fin)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;(send t insert 
(ListeClasseData) 
debut)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (display 
"&gt;&gt;") (display debut) (display "-") (display fin) (display 
"&lt;&lt;")<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (display 
(ListeClasseData))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;(display 
(send (send MyText get-snip-data (send MyText find-snip debut 'after #f)) 
get-tag))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;(display (send 
(send MyText get-snip-data (send MyText find-snip (+ debut 1) 'after #f)) 
get-tag))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (display (send 
(send MyText get-region-data debut fin) 
get-tag))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; (display (send (send 
MyText get-snip-data (send MyText find-snip (+ debut 3)'after #f)) 
get-tag))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; (display (send (send 
MyText get-snip-data (send MyText find-snip (+ debut 4) 'after #f)) 
get-tag))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; (display (send (send 
MyText get-snip-data (send MyText find-snip (+ debut 5) 'after #f)) 
get-tag))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; (display (send (send 
MyText get-snip-data (send MyText find-snip (+ debut 6)'after #f)) 
get-tag))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )) 
<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp; (define/public 
set-snip-tag-data<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (lambda (begin 
end text tag)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (define 
tedor (instantiate AmjP-editor-data% 
()))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (send tedor 
set-tag tag)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; (define 
MySnip (instantiate string-snip% 
()))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; (send MySnip 
set-style MonStyle) <BR>;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
(send MySnip insert text (string-length text) 
0)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (send this insert 
text begin)<BR>;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (send 
this set-snip-data MySnip 
tedor)<BR>;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (send this 
insert MySnip begin end 
#t)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (send this 
set-position begin (+ begin (string-length 
text)))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (send this 
change-style MonStyle)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
;(send (send this get-snip-data MySnip) 
get-tag)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (send this 
set-clickback begin (+ begin (string-length text)) MonClick #f 
#f)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (send this 
set-region-data begin (+ begin (string-length text)) 
tedor)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (display 
"***")<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (display (send 
this get-region-data begin (+ begin (string-length 
text))))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (display 
"***")<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
))<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;; (define/override 
get-snip-data<BR>&nbsp;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (lambda 
(snip)<BR>&nbsp;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (display 
"coucou")<BR>&nbsp;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (super 
get-snip-data snip)));;</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>&nbsp;; (define/override 
set-snip-data<BR>&nbsp;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (lambda (snip 
data)<BR>&nbsp;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (display 
"copie")<BR>&nbsp;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (super 
set-snip-data snip data)));;<BR>;<BR>&nbsp;&nbsp; 
(super-instantiate())))</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>; Class pour prise en compte des Drop 
File<BR>(define AmjP-DropFrame%<BR>&nbsp;&nbsp;&nbsp;&nbsp; (class 
frame%<BR>&nbsp;&nbsp;&nbsp;&nbsp; (define/override 
on-drop-file<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (lambda 
(FileName)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (send t insert 
(path-&gt;string&nbsp; 
FileName))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (super 
on-drop-file FileName))) <BR>&nbsp;&nbsp;&nbsp;&nbsp; (super-instantiate 
())))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>; Defines pour listers les classes Snip et 
Data<BR>(define (ListeClasseSnip)<BR>&nbsp; (begin (define temp "")&nbsp; 
<BR>&nbsp; (do ((i 1 (+ i 1))) <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((= i (send 
(get-the-snip-class-list) number))()) <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (set! 
temp&nbsp; (string-append&nbsp; temp&nbsp; " &gt;&gt; " (send (send 
(get-the-snip-class-list) nth i) get-classname))))<BR>&nbsp; (string-append " 
&gt;&gt;&gt;&gt;&gt;&gt; " temp " &lt;&lt;&lt;&lt;&lt;&lt;")))<BR>(define 
(ListeClasseData)<BR>&nbsp; (begin (define temp "")&nbsp; <BR>&nbsp; (do ((i 1 
(+ i 1))) <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((= i (send 
(get-the-editor-data-class-list) number))()) <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
(set! temp&nbsp; (string-append&nbsp; temp&nbsp; " &gt;&gt; " (send (send 
(get-the-editor-data-class-list) nth i) get-classname))))<BR>&nbsp; 
(string-append " &gt;&gt;&gt;&gt;&gt;&gt; " temp " 
&lt;&lt;&lt;&lt;&lt;&lt;")))</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>(define f (instantiate AmjP-DropFrame% ("Simple 
Editor" #f 800 600 100 100)))<BR>(send f set-icon (send MyIcon 
get-bitmap))<BR>(send f accept-drop-files #t)<BR>(define t (instantiate 
AmjP-text%()))<BR>;(define t (instantiate pasteboard%()))<BR>(define c 
(instantiate editor-canvas% (f)))<BR>(send c set-editor t)</FONT></DIV>
<DIV>&nbsp;</DIV><FONT face=Arial size=2>
<DIV><BR>; Style<BR>(define MyStyleDelta (instantiate style-delta% ()))<BR>(send 
MyStyleDelta set-underlined-on #t)<BR>(define MonStyle (send (send t 
get-style-list) find-or-create-style (send (send t get-style-list) basic-style) 
MyStyleDelta))<BR>(send (send t get-style-list) new-named-style "AmjP-style" 
MonStyle)<BR>;(display MonStyle)</DIV>
<DIV>&nbsp;</DIV>
<DIV><BR>(define mb (instantiate menu-bar% (f)))<BR>(define m-file (instantiate 
menu% ("File" mb)))<BR>(define m-edit (instantiate menu% ("Edit" 
mb)))<BR>(define m-font (instantiate menu% ("Font" mb)))<BR>(define m-help 
(instantiate menu% ("?" mb)))<BR>(append-editor-operation-menu-items 
m-edit)<BR>(append-editor-font-menu-items m-font)<BR>(define 
m-file-Open&nbsp;&nbsp; <BR>&nbsp; (instantiate menu-item%() 
<BR>&nbsp;&nbsp;&nbsp; (label "Open") <BR>&nbsp;&nbsp;&nbsp; (parent 
m-file)<BR>&nbsp;&nbsp;&nbsp; (callback <BR>&nbsp;&nbsp;&nbsp;&nbsp; 
(lambda(menu event)(send t load-file "")))))<BR>(define m-file-Save&nbsp;&nbsp; 
(instantiate menu-item%() (label "Save") (parent 
m-file)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
(callback (lambda(menu event)(send t save-file #f)))))<BR>(define m-file-SaveAs 
(instantiate menu-item%() (label "Save as...") (parent 
m-file)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
(callback (lambda(menu event)(send t save-file ""))))) <BR>(define 
m-edit-dummy&nbsp; (instantiate separator-menu-item%() (parent 
m-edit)))<BR>(define m-edit-InsImg (instantiate menu-item%() (label "Insert 
Picture...") (parent 
m-edit)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
(callback (lambda(menu event)(send t insert-image #f)))))<BR>(define 
m-edit-InsHT <BR>&nbsp; (instantiate menu-item%() <BR>&nbsp;&nbsp;&nbsp; (label 
"Insert HyperLink...") <BR>&nbsp;&nbsp;&nbsp; (parent 
m-edit)<BR>&nbsp;&nbsp;&nbsp; (callback (lambda (menu 
event)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (define deb (send t 
get-start-position))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (define fin 
(send t get-end-position)&nbsp;&nbsp; )&nbsp;&nbsp;&nbsp; 
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (send t set-snip-tag-data deb fin 
(send t get-text deb fin)&nbsp; "turlututu")&nbsp;&nbsp;&nbsp; 
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
))))<BR>(define m-help-AboutB (instantiate menu-item%() (label 
"About...")(parent 
m-help)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
(callback (lambda(menu event)(message-box "Simple editor" "Test 
editor<BR>Copyright (c) 2006-2010, AmjP Inc.</DIV>
<DIV>&nbsp;</DIV>
<DIV>Developed with DrScheme, base on MrEd version 301, Copyright (c) 2004-2005 
PLT Scheme Inc.http://www.plt-scheme.org/" f '(ok&nbsp; caution)))))) </DIV>
<DIV>&nbsp;</DIV>
<DIV>(send t insert "Bonjour, c'est un test." 24 0 )<BR>(send t 
set-snip-tag-data&nbsp; 5 15 "Tag" "hello")</DIV>
<DIV>&nbsp;</DIV>
<DIV>(send t auto-wrap #t)<BR>(send f show #t)</FONT></DIV></BODY></HTML>