WebGadget en edition, je commence à comprendre...[Résolu]

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Stefou
Messages : 234
Inscription : jeu. 18/janv./2007 14:08

WebGadget en edition, je commence à comprendre...[Résolu]

Message par Stefou »

Salut tous,

Pas à pas j'arrive à faire marcher ce WebGadget en édition, mais je n'arrive pas à me débloquer de cette situation !
Dans l'exemple fournis, on a la procedure pour insérer un lien, soit avec l'interface du webgadget soit en direct.
Ensuite on a la procedure pour insérer une image par l'interface, et cela marche ! Mais je n'arrive pas à insérer une image en direct !

Je ne sais pas si je suis clair....

La question est donc : comment insérer une image dans le web gadget sans passer par l'interface.

Lien vers doc Hyperlink : http://msdn.microsoft.com/fr-fr/library ... S.85).aspx
Lien ver doc InsertImage : http://msdn.microsoft.com/fr-fr/library ... S.85).aspx

Merci d'avance

Code : Tout sélectionner

#SIZEOF_WORD=2
Procedure.l Ansi2Uni(string.s) ; Converts normal (Ansi) string To Unicode 
  *out = AllocateMemory(Len(string)*2 * #SIZEOF_WORD) 
  MultiByteToWideChar_(#CP_ACP, 0, string, -1, *out, Len(string))  
  ProcedureReturn *out  
EndProcedure 

If OpenWindow(0, 0, 0, 800, 600, "WebGadget Edit", #PB_Window_ScreenCentered|#PB_Window_SystemMenu)
  If CreateGadgetList(WindowID(0))
    
    WebGadget(0, 5, 5, 790, 500, "http://www.purebasic.com/")
    ButtonGadget(1, 5, 540, 100, 25, "Bold")
    ButtonGadget(2, 110, 540, 100, 25, "Link...")
    ButtonGadget(3, 210, 540, 100, 25, "Link google")
    ButtonGadget(4, 310, 540, 100, 25, "Insert image...")
    ButtonGadget(5, 410, 540, 200, 25, "Insert image ess.jpg (don't work !)")
    ButtonGadget(10, 210, 510, 100, 25, "Edit mode",#PB_Button_Toggle)
    ;{initialisation webgadget
    ; get webgadgets IWebBrowser2 interface:
    Browser.IWebBrowser2 = GetWindowLong_(GadgetID(0), #GWL_USERDATA)   
    
    ; wait For page To be loaded..
    Repeat
      While WindowEvent(): Wend
      Delay(1)
      Browser\get_Busy(@IsBusy.l)
    Until IsBusy = 0
    
    ; get the document interface
    If Browser\get_Document(@DocumentDispatch.IDispatch) = #S_OK
      
      ; query For IHTMLDocument3:
      If DocumentDispatch\QueryInterface(?IID_IHTMLDocument2, @Document.IHTMLDocument2) = #S_OK
        
        ; here you have a IHTMLDocument2 pointer,  can work with it...
        Document\put_designMode("Off") ; Turns off Edit Mode
        ;Document\put_designMode(Ansi2Uni("On")) ; Turns on Edit Mode ;
        CmdTarget.IOleCommandTarget
        If DocumentDispatch\QueryInterface(?IID_IOleCommandTarget, @CmdTarget.IOleCommandTarget) = #S_OK
          
          ;CmdTarget\Exec(?CGID_MSHTML, #IDM_2D_POSITION, #OLECMDEXECOPT_DONTPROMPTUSER, @var, NULL) ;Lets you drag  drop items
          ; CmdTarget\Release()
        EndIf
        
        Document\Release()
      EndIf
      
      DocumentDispatch\Release()   
    EndIf
    ;}
    edit=0
    Success.VARIANT
    Command.VARIANT
    Repeat
      EventID = WaitWindowEvent()
      
      If EventID = #PB_Event_Gadget ;checks For the events
        Select EventGadget() ;Checks For Gadget Events
          Case 1
            Command\vt = #VT_BSTR
            Command\bstrVal = 0
            Document\execCommand("Bold", 0, @Command , @Success)
          Case 2
            Command\vt = #VT_BSTR
            Command\bstrVal = 0
            Document\execCommand("CreateLink", 1, @Command , @Success)
          Case 3
            Command\vt = #VT_BSTR
            Command\bstrVal = Ansi2Uni("http://www.google.fr")
            Document\execCommand("CreateLink", 0, @Command , @Success)
          Case 4  
            Command\vt = #VT_BSTR
            Command\bstrVal = 0
            Document\execCommand("InsertImage", 1, @Command , @Success)
          Case 5  
            Command\vt = #VT_BSTR
            Command\bstrVal = Ansi2Uni("ess.jpg")
            Document\execCommand("InsertImage", 0, @Command , @Success)
          Case 10
            If edit=1
              edit=0
              Document\put_designMode("Off")
            Else
              edit=1
              Document\put_designMode("On")
            EndIf
            
        EndSelect
      EndIf

    Until EventID = #PB_Event_CloseWindow
    If CmdTarget
      CmdTarget\Release()
    EndIf
  EndIf
EndIf

End


DataSection

IID_IHTMLDocument2:  ; {332c4425-26cb-11d0-b483-00c04fd90119}
Data.l $332C4425
Data.w $26CB, $11D0
Data.b $B4, $83, $00, $C0, $4F, $D9, $01, $19

IID_IOleCommandTarget:  ; {b722bccb-4e68-101b-a2bc-00aa00404770}
Data.l $B722BCCB
Data.w $4E68, $101B
Data.b $A2, $BC, $00, $AA, $00, $40, $47, $70
 
CGID_MSHTML: ; { 0xDE4BA900, 0x59CA, 0x11CF, { 0x95, 0x92, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00 } }
Data.l $DE4BA900
Data.w $59CA, $11CF
Data.b $95, $92, $44, $45, $53, $54, $00, $00
EndDataSection
Dernière modification par Stefou le jeu. 29/mai/2008 19:25, modifié 1 fois.
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Message par Ar-S »

Je ne peux hélas pas t'aider mais je suis ce topic avec grand intérêt !

Petite remarque, en "Edit Mode", la touche "Retour Arriere" fonctionne pour effacer mais pas la touche "Suppr"

Sinon l'edit mode est très sympa et je me demandais si il serait possible de modifier la source en temps réel comme le permet la fonction "Editer le HTLM" de webdevelopper pour firefox?

Exemple :

Image
Stefou
Messages : 234
Inscription : jeu. 18/janv./2007 14:08

Message par Stefou »

Merci ARS de ton soutien
Petite remarque, en "Edit Mode", la touche "Retour Arriere" fonctionne pour effacer mais pas la touche "Suppr"
Oui il faut traiter cette évenement
Sinon l'edit mode est très sympa et je me demandais si il serait possible de modifier la source en temps réel comme le permet la fonction "Editer le HTLM" de webdevelopper pour firefox?
Je ne comprend pas bien ta question. On peut éditer la page puis la sauver, et il faut la renvoyer sur internet pour la mettre à jour. :?
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

pour le problem d'image , c'est vraiment bizarre

d'autant qu'ici
http://msdn.microsoft.com/en-us/library/bb212550.aspx

il donnent la meme façon de faire que ton code..

peut etre un bug a signaler a Fred ...

parle en sur le Forum anglais .. :)
Stefou
Messages : 234
Inscription : jeu. 18/janv./2007 14:08

Message par Stefou »

Merci Dobro de t'interesser à mon problème.

J'ai poster cet apres midi sur le forum anglais :
http://www.purebasic.fr/english/viewtop ... 889#245889

Apparement une personne y arrive mais son code ne marche pas chez moi !

Si quelqu'un pouvait essayer cela m'arangerais.

a pluche les accros et merci d'avance
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Message par Ar-S »

Stefou a écrit : Je ne comprend pas bien ta question. On peut éditer la page puis la sauver, et il faut la renvoyer sur internet pour la mettre à jour. :?
Et bien justement non, ce plugin sur FF permet de modifier la source à la volée ! C'est excellent ! Je ne sais pas comme ça fonctionne mais ça marche.
la preuve avec mon image non ? je n'ai rien uppé du tout, j'ai édité la source à la volée et ai indiqué l'@ de l'image de google et Zouuupp elle est apparue à la place du logo purebasic.
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

BSTR et Unicode sont deux choses différentes, en fait un BSTR est une chaine unicode précédé de 4 octets indiquant la longueur de la chaine, mais pour créer un BSTR il faut utiliser les API window.

Une procédure qui transforme un string (ascii ou unicode)en BSTR:

Code : Tout sélectionner

Procedure StringToBStr (string$) ; By Zapman Inspired by Fr34k
	Protected Unicode$ = Space(Len(String$)* 2 + 2)
	Protected bstr_string.l
	PokeS(@Unicode$, String$, -1, #PB_Unicode)
	bstr_string = SysAllocString_(@Unicode$)
	ProcedureReturn bstr_string
EndProcedure
Ton code devient:

Code : Tout sélectionner

					Case 5
						Command\vt = #VT_BSTR
						Command\bstrVal = StringToBStr("ess.jpg")
						Document\execCommand("InsertImage", 0, @Command , @Success)
						SysFreeString_(@Command\bstrVal)
Dernière modification par nico le dim. 01/juin/2008 11:39, modifié 2 fois.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

Merci Nico :) ça marche :)

Code : Tout sélectionner

; voir ici : http://msdn.microsoft.com/en-us/library/ms531073(VS.85).aspx
Declare StringToBStr (string$) 

#SIZEOF_WORD=2

Enumeration
  #bold
  #link
  #link_google
  #insert_image
  #insert_image2
  #edit_mode
  #web_gadget
  #Window
EndEnumeration

; Procedure.l Ansi2Uni(string.s) ; Converts normal (Ansi) string To Unicode
  ; *out = AllocateMemory(Len(string)*2 * #SIZEOF_WORD)
  ; MultiByteToWideChar_(#CP_ACP, 0, string, -1, *out, Len(string)) 
  ; ProcedureReturn *out 
; EndProcedure

If OpenWindow(#Window, 0, 0, 800, 600, "WebGadget Edit", #PB_Window_ScreenCentered|#PB_Window_SystemMenu)
  If CreateGadgetList(WindowID(#Window))
    
    WebGadget(#web_gadget, 5, 5, 790, 500, "http://www.purebasic.com/")
    ButtonGadget(#bold, 5, 540, 100, 25, "Bold")
    ButtonGadget(#link, 110, 540, 100, 25, "Link...")
    ButtonGadget(#link_google, 210, 540, 100, 25, "Link google")
    ButtonGadget(#insert_image, 310, 540, 100, 25, "Insert image...")
    ButtonGadget(#insert_image2, 410, 540, 200, 25, "Insert image ess.jpg (don't work !)")
    ButtonGadget(#edit_mode, 210, 510, 100, 25, "Edit mode",#PB_Button_Toggle)
    
    ;{initialisation webgadget
    ; get webgadgets IWebBrowser2 interface:
    Browser.IWebBrowser2 = GetWindowLong_(GadgetID(#web_gadget), #GWL_USERDATA)   
    
    ; wait For page To be loaded..
    Repeat
      While WindowEvent(): Wend
      Delay(1)
      Browser\get_Busy(@IsBusy.l)
    Until IsBusy = 0
    
    ; get the document interface
    If Browser\get_Document(@DocumentDispatch.IDispatch) = #S_OK
      
      ; query For IHTMLDocument3:
      If DocumentDispatch\QueryInterface(?IID_IHTMLDocument2, @Document.IHTMLDocument2) = #S_OK
        
        ; here you have a IHTMLDocument2 pointer,  can work with it...
        Document\put_designMode("Off") ; Turns off Edit Mode
        ;Document\put_designMode(Ansi2Uni("On")) ; Turns on Edit Mode ;
        CmdTarget.IOleCommandTarget
        If DocumentDispatch\QueryInterface(?IID_IOleCommandTarget, @CmdTarget.IOleCommandTarget) = #S_OK
          
          ;CmdTarget\Exec(?CGID_MSHTML, #IDM_2D_POSITION, #OLECMDEXECOPT_DONTPROMPTUSER, @var, NULL) ;Lets you drag  drop items
          ; CmdTarget\Release()
        EndIf
        
        Document\Release()
      EndIf
      
      DocumentDispatch\Release()   
    EndIf
    ;}
    edit=0
    Success.VARIANT
    Command.VARIANT
    Repeat
      EventID = WaitWindowEvent()
      
      If EventID = #PB_Event_Gadget ;checks For the events
        Select EventGadget() ;Checks For Gadget Events
          Case  #bold
            
            
            
            
            
            
            Command\vt = #VT_BSTR
            Command\bstrVal = 0
            Document\execCommand("Bold", 0, @Command , @Success)
          Case #link
            Command\vt = #VT_BSTR
            Command\bstrVal = 0
            Document\execCommand("CreateLink", 1, @Command , @Success)
          Case #link_google
            Command\vt = #VT_BSTR
            Command\bstrVal = Ansi2Uni("http://www.google.fr")
            Document\execCommand("CreateLink", 0, @Command , @Success)
          Case #insert_image
            Command\vt = #VT_BSTR
            Command\bstrVal = 0
            Document\execCommand("InsertImage", 1, @Command , @Success) 
          Case #insert_image2
            CallDebugger
            Command\vt = #VT_BSTR
            
            ; Command\bstrVal = Ansi2Uni("far_breton.jpg") 
            Command\bstrVal = StringToBStr("D:\PureBasic\dobro\ExemplePerso\internet\far_breton.jpg") 
            Document\execCommand("insertimage",#False, @Command , @Success)
          Case #edit_mode
            If edit=1
              edit=0
              Document\put_designMode("Off")
            Else
              edit=1
              Document\put_designMode("On")
            EndIf
            
        EndSelect
      EndIf
      
    Until EventID = #PB_Event_CloseWindow
    If CmdTarget
      CmdTarget\Release()
    EndIf
  EndIf
EndIf

End

Procedure StringToBStr (string$) ; By Zapman Inspired by Fr34k
  Protected Unicode$ = Space(Len(string$)* 2 + 2)
  Protected bstr_string.l
  PokeS(@Unicode$, string$, -1, #PB_Unicode)
  bstr_string = SysAllocString_(@Unicode$)
  ProcedureReturn bstr_string
EndProcedure



DataSection
  
  IID_IHTMLDocument2:  ; {332c4425-26cb-11d0-b483-00c04fd90119}
  Data.l $332C4425
  Data.w $26CB, $11D0
  Data.b $B4, $83, $00, $C0, $4F, $D9, $01, $19
  
  IID_IOleCommandTarget:  ; {b722bccb-4e68-101b-a2bc-00aa00404770}
  Data.l $B722BCCB
  Data.w $4E68, $101B
  Data.b $A2, $BC, $00, $AA, $00, $40, $47, $70
  
  CGID_MSHTML: ; { 0xDE4BA900, 0x59CA, 0x11CF, { 0x95, 0x92, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00 } }
  Data.l $DE4BA900
  Data.w $59CA, $11CF
  Data.b $95, $92, $44, $45, $53, $54, $00, $00
EndDataSection
l'image qui va avec :D

(c'est MOA qui l'a Fais :D )
Far aux Pruneaux
Image
Stefou
Messages : 234
Inscription : jeu. 18/janv./2007 14:08

Message par Stefou »

:D :D :D :D :D :D :D :D :D :D :D :D :D

Et voilà quelques heures de galère qui se termine !

:D :D :D :D :D :D :D :D :D :D :D :D :D

Merci Nico tu es un as

Je me permet de poster ta solution sur le forum anglais.

@Dobro : laisse moi un peu de Far, j'arrive :wink:
Stefou
Messages : 234
Inscription : jeu. 18/janv./2007 14:08

Message par Stefou »

Et voilà le cadeau bonux livré avec !

Un editeur Web, enfin un début avec encore des bug... mais bon c'est un bon début !
Open et New ne marche pas encore car je ne m'en sert pas !

Les icones sont là : http://perso.ecligne.net/icone.zip

a+

Code : Tout sélectionner

;{- html constante

; WG library. By Fr34k and Zapman.
;
; Some of the followings procedure are from Fr34k (Freak) of the english PureBasic Forum
; Thanks a lot to him for sharing!!
; The other ones are from Zapman (french and english forum)
;
;- IID Datasection

DataSection

IID_IPersistFile: ; {0000010b-0000-0000-C000-000000000046}
Data.l $0000010B
Data.w $0000, $0000
Data.b $00, $00, $00, $00, $00, $00, $00, $46

IID_IHTMLElement: ; {3050F1FF-98B5-11CF-BB82-00AA00BDCE0B}
Data.l $3050F1FF
Data.w $98B5, $11CF
Data.b $BB, $82, $00, $AA, $00, $BD, $CE, $0B
    
IID_IHTMLElement2: ; "3050f434-98b5-11cf-bb82-00aa00bdce0b";
Data.l $3050F434
Data.w $98B5, $11CF
Data.b $BB, $82, $00, $AA, $00, $BD, $CE, $0B

IID_IHTMLElement3: ; "3050f673-98b5-11cf-bb82-00aa00bdce0b";
Data.l $3050F673
Data.w $98B5, $11CF
Data.b $BB, $82, $00, $AA, $00, $BD, $CE, $0B
    
IID_IOleCommandTarget: ; {B722BCCB-4E68-101B-A2BC-00AA00404770}
Data.l $B722BCCB
Data.w $4E68, $101B
Data.b $A2, $BC, $00, $AA, $00, $40, $47, $70
    
IID_IHTMLCurrentStyle: ;3050f3db-98b5-11cf-bb82-00aa00bdce0b
Data.l $3050F3DB
Data.w $98B5, $11CF
Data.b $BB, $82, $00, $AA, $00, $BD, $CE, $0B
    
IID_IHTMLCurrentStyle2: ;3050f658-98b5-11cf-bb82-00aa00bdce0b
Data.l $3050F658
Data.w $98B5, $11CF
Data.b $BB, $82, $00, $AA, $00, $BD, $CE, $0B    
    
IID_IHTMLTxtRange: ; {0x20F25030, 0xB598, 0xCF11, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, ...
Data.l $3050F220
Data.w $98B5, $11CF
Data.b $BB, $82, $00, $AA, $00, $BD, $CE, $0B
  
IID_IHTMLDocument2: ; {332C4425-26CB-11D0-B483-00C04FD90119}
Data.l $332C4425
Data.w $26CB, $11D0
Data.b $B4, $83, $00, $C0, $4F, $D9, $01, $19
   
IID_IHTMLWindow2: ; {332c4427-26cb-11d0-b483-00c04fd90119}
Data.l $332C4427
Data.w $26CB, $11D0
Data.b $B4, $83, $00, $C0, $4F, $D9, $01, $19
   
IID_IDisplayServices: ;  { 3050F69D - 98B5 - 11CF - BB82 - 00AA00BDCE0B }. 
Data.l $3050F69D
Data.w $98B5, $11CF
Data.b $BB, $82, $00, $AA, $00, $BD, $CE, $0B
    
IID_IHTMLEditServices: ; { 3050F663 - 98B5 - 11CF - BB82 - 00AA00BDCE0B }.  
Data.l $3050F663
Data.w $98B5, $11CF
Data.b $BB, $82, $00, $AA, $00, $BD, $CE, $0B
    
SID_SHTMLEditServices: ;TGUID = (D1: $3050f7f9; D2: $98b5; D3: $11cf; D4: ($bb, $82, $00, $AA, $00, $bd, $ce, $0b));
Data.l $3050F7F9
Data.w $98B5, $11CF
Data.b $BB, $82, $00, $AA, $00, $BD, $CE, $0B
    
IID_IMarkupServices: ; {3050F4A0-98B5-11CF-BB82-00AA00BDCE0B}.
Data.l $3050F4A0
Data.w $98B5, $11CF
Data.b $BB, $82, $00, $AA, $00, $BD, $CE, $0B
    
IID_IMarkupTextFrags: ; {3050F5FA-98B5-11CF-BB82-00AA00BDCE0B}.  
Data.l $3050F5FA
Data.w $98B5, $11CF
Data.b $BB, $82, $00, $AA, $00, $BD, $CE, $0B
    
IID_IServiceProvider: ;  {6D5140C1- 7436-11CE-8034-00AA006009FA}. 
Data.l $6D5140C1
Data.w $7436, $11CE
Data.b $80, $34, $00, $AA, $00, $60, $09, $FA
    
IID_IHTMLCaret: ; {3050F604-98B5-11CF-BB82-00AA00BDCE0B}. 
Data.l $3050F604
Data.w $98B5, $11CF
Data.b $BB, $82, $00, $AA, $00, $BD, $CE, $0B
    
    
IID_NULL: ; {00000000-0000-0000-0000-000000000000}
Data.l $00000000
Data.w $0000, $0000
Data.b $00, $00, $00, $00, $00, $00, $00, $00 
    
IID_IUnknown: ; {00000000-0000-0000-C000-000000000046}
Data.l $00000000
Data.w $0000, $0000
Data.b $C0, $00, $00, $00, $00, $00, $00, $46

IID_IDispatch: ; {00020400-0000-0000-C000-000000000046}
Data.l $00020400
Data.w $0000, $0000
Data.b $C0, $00, $00, $00, $00, $00, $00, $46
    
CGID_MSHTML: ; { DE4BA900 - 59CA - 11CF - 9592 - 444553540000 }
Data.l $DE4BA900
Data.w $59CA, $11CF
Data.b $95, $92, $44, $45, $53, $54, $00, $00

EndDataSection

#IDM_SHOWALLTAGS = 2320;
#IDM_SHOWALIGNEDSITETAGS = 2321;
#IDM_SHOWSCRIPTTAGS = 2322;
#IDM_SHOWSTYLETAGS = 2323;
#IDM_SHOWCOMMENTTAGS = 2324;
#IDM_SHOWAREATAGS = 2325;
#IDM_SHOWUNKNOWNTAGS = 2326;
#IDM_SHOWMISCTAGS = 2327;
#IDM_SHOWZEROBORDERATDESIGNTIME = 2328;
;
#IDM_EDITMODE = 2127
#IDM_2D_POSITION = 2394
#IDM_2D_ELEMENT = 2395
#IDM_1D_ELEMENT = 2396

#IDM_EMPTYGLYPHTABLE = 2336
#IDM_ADDTOGLYPHTABLE = 2337
#IDM_REMOVEFROMGLYPHTABLE = 2338
#IDM_REPLACEGLYPHCONTENTS = 2339


#IDM_SHOWALIGNEDSITETAGS = 2321;
#IDM_SHOWSCRIPTTAGS = 2322;
#IDM_SHOWSTYLETAGS = 2323;
#IDM_SHOWCOMMENTTAGS = 2324;
#IDM_SHOWAREATAGS = 2325;
#IDM_SHOWUNKNOWNTAGS = 2326;
#IDM_SHOWMISCTAGS = 2327;
#IDM_SHOWZEROBORDERATDESIGNTIME = 2328;

Enumeration 0 
  #OLECMDEXECOPT_DODEFAULT 
  #OLECMDEXECOPT_PROMPTUSER 
  #OLECMDEXECOPT_DONTPROMPTUSER 
  #OLECMDEXECOPT_SHOWHELP 
EndEnumeration


#OLECMDERR_E_NOTSUPPORTED = -2147221248
#OLECMDERR_E_DISABLED = -2147221247
#OLECMDERR_E_NOHELP = -2147221246
#OLECMDERR_E_CANCELED = -2147221245
#OLECMDERR_E_UNKNOWNGROUP = -2147221244

Enumeration 0
  #MOVEUNIT_PREVCHAR
  #MOVEUNIT_NEXTCHAR
  #MOVEUNIT_PREVCLUSTERBEG
  #MOVEUNIT_NEXTCLUSTERBEG
  #MOVEUNIT_PREVCLUSTEREND
  #MOVEUNIT_NEXTCLUSTEREND
  #MOVEUNIT_PREVWORDBEG
  #MOVEUNIT_NEXTWORDBEG
  #MOVEUNIT_PREVWORDEND
  #MOVEUNIT_NEXTWORDEND
  #MOVEUNIT_PREVPROOFWORD
  #MOVEUNIT_NEXTPROOFWORD
  #MOVEUNIT_NEXTURLBEG
  #MOVEUNIT_PREVURLBEG
  #MOVEUNIT_NEXTURLEND
  #MOVEUNIT_PREVURLEND
  #MOVEUNIT_PREVSENTENCE
  #MOVEUNIT_NEXTSENTENCE
  #MOVEUNIT_PREVBLOCK
  #MOVEUNIT_NEXTBLOCK
  #MOVEUNIT_ACTION_Max = 2147483647
EndEnumeration
;
Enumeration 0
  #ELEM_ADJ_BeforeBegin
  #ELEM_ADJ_AfterBegin
  #ELEM_ADJ_BeforeEnd
  #ELEM_ADJ_AfterEnd
EndEnumeration
;}
;{-html constante 2
Enumeration 1
  #olecmdid_open         
  #olecmdid_new       
  #olecmdid_save         
  #olecmdid_saveas           
  #olecmdid_savecopyas   
  #olecmdid_print       
  #olecmdid_printpreview       
  #olecmdid_pagesetup       
  #olecmdid_spell           
  #olecmdid_properties 
  #olecmdid_cut         
  #olecmdid_copy       
  #olecmdid_paste           
  #olecmdid_pastespecial   
  #olecmdid_undo           
  #olecmdid_redo         
  #olecmdid_selectall       
  #olecmdid_clearselection
  #olecmdid_zoom           
  #olecmdid_getzoomrange     
  #olecmdid_updatecommands 
  #olecmdid_refresh           
  #olecmdid_stop             
  #olecmdid_hidetoolbars     
  #olecmdid_setprogressmax   
  #olecmdid_setprogresspos 
  #olecmdid_setprogresstext   
  #olecmdid_settitle         
  #olecmdid_setdownloadstate 
  #olecmdid_stopdownload   
  #olecmdid_ontoolbaractivated
  #olecmdid_find
  #olecmdid_delete
  #olecmdid_httpequiv
  #olecmdid_httpequiv_done
  #olecmdid_enable_interaction
  #olecmdid_onunload
  #olecmdid_propertybag2
  #olecmdid_prerefresh
  #olecmdid_showscripterror
  #olecmdid_showmessage
  #olecmdid_showfind
  #olecmdid_showpagesetup
  #olecmdid_showprint
  #olecmdid_clos
  #olecmdid_allowuilesssaveas
  #olecmdid_dontdownloadcss
  #olecmdid_updatepagestatus
  #olecmdid_print2
  #olecmdid_printpreview2
  #olecmdid_setprinttemplate
  #olecmdid_getprinttemplate
  #olecmdid_pageactionblocked      = 55; no 53 or 54
  #olecmdid_pageactionuiquery     
  #olecmdid_focusviewcontrols     
  #olecmdid_focusviewcontrolsquery
  #olecmdid_showpageactionmenu   
EndEnumeration

Enumeration 0
  #OLECMDEXECOPT_DODEFAULT     
  #OLECMDEXECOPT_PROMPTUSER       
  #OLECMDEXECOPT_DONTPROMPTUSER   
  #OLECMDEXECOPT_SHOWHELP       
EndEnumeration


Enumeration
  #idm_alignbottom             
  #idm_alignhorizontalcenters 
  #idm_alignleft               
  #idm_alignright             
  #idm_aligntogrid             
  #idm_aligntop               
  #idm_alignverticalcenters   
  #idm_arrangebottom           
  #idm_arrangeright           
  #idm_bringforward           
  #idm_bringtofront           
  #idm_centerhorizontally     
  #idm_centervertically       
  #idm_code                   
  #idm_delete     =17             
  #idm_fontname               
  #idm_fontsize               
  #idm_group                   
  #idm_horizspaceconcatenate   
  #idm_horizspacedecrease     
  #idm_horizspaceincrease     
  #idm_horizspacemakeequal     
  #idm_insertobject           
  #idm_multilevelredo     =30     
  #idm_sendbackward        =32     
  #idm_sendtoback             
  #idm_showtable               
  #idm_sizetocontrol           
  #idm_sizetocontrolheight     
  #idm_sizetocontrolwidth     
  #idm_sizetofit               
  #idm_sizetogrid             
  #idm_snaptogrid             
  #idm_taborder               
  #idm_toolbox                 
  #idm_multilevelundo      =44   
  #idm_ungroup               
  #idm_vertspaceconcatenate   
  #idm_vertspacedecrease       
  #idm_vertspaceincrease       
  #idm_vertspacemakeequal     
  #idm_justifyfull             
  #idm_backcolor               
  #idm_bold                   
  #idm_bordercolor             
  #idm_flat                   
  #idm_forecolor               
  #idm_italic                 
  #idm_justifycenter           
  #idm_justifygeneral         
  #idm_justifyleft             
  #idm_justifyright           
  #idm_raised                 
  #idm_sunken                 
  #idm_underline               
  #idm_chiseled               
  #idm_etched                 
  #idm_shadowed               
  #idm_find                   
  #idm_showgrid               = 69
EndEnumeration
#IDM_2D_POSITION = 2394
Global CmdTarget.IOleCommandTarget
Global Browser.IWebBrowser2
Global DocumentDispatch.IDispatch
Global Document.IHTMLDocument2
;Global CmdTarget.IOleCommandTarget
;Global CmdTarget.IOleCommandTarget
;}
DataSection ;{include des icones
ic_nouveau: IncludeBinary "icone\nouveau.bmp"
ic_ouvrir: IncludeBinary "icone\ouvrir.bmp"
ic_barrer: IncludeBinary "icone\barrer.bmp"
ic_centrer_droite: IncludeBinary "icone\centrer_droite.bmp"
ic_centrer_gauche: IncludeBinary "icone\centrer_gauche.bmp"
ic_centrer_milieu: IncludeBinary "icone\centrer_milieu.bmp"
ic_couleur_texte: IncludeBinary "icone\couleur_texte.bmp"
ic_decalage_droite: IncludeBinary "icone\decalage_droite.bmp"
ic_decalage_gauche: IncludeBinary "icone\decalage_gauche.bmp"
ic_sauver: IncludeBinary "icone\sauver.bmp"
ic_gras: IncludeBinary "icone\gras.bmp"
ic_italique: IncludeBinary "icone\italique.bmp"
;ic_ouvrir: IncludeBinary "icone\ouvrir.bmp"
ic_souligner: IncludeBinary "icone\souligner.bmp"
ic_surligne: IncludeBinary "icone\surligner.bmp"
ic_desurligne: IncludeBinary "icone\desurligner.bmp"
ic_taille_moins: IncludeBinary "icone\taille_moins.bmp"
ic_taille_plus: IncludeBinary "icone\taille_plus.bmp"

ic_zoom_plus: IncludeBinary "icone\zoom_plus.bmp"
ic_zoom_moins: IncludeBinary "icone\zoom_moins.bmp"
ic_choix: IncludeBinary "icone\choix.bmp"
ic_palette: IncludeBinary "icone\palette.bmp"
ic_ctrl_z: IncludeBinary "icone\ctrl_z.bmp"
ic_ctrl_y: IncludeBinary "icone\ctrl_y.bmp"
ic_couper: IncludeBinary "icone\couper.bmp"
ic_copier: IncludeBinary "icone\copier.bmp"
ic_coller: IncludeBinary "icone\coller.bmp"
ic_inserer_image: IncludeBinary "icone\inserer_image_ds_texte.bmp"
ic_inserer_image_gauche: IncludeBinary "icone\inserer_image_ds_texte_gauche.bmp"
ic_inserer_image_droite: IncludeBinary "icone\inserer_image_ds_texte_droite.bmp"
ic_inserer_lien: IncludeBinary "icone\inserer_lien.bmp"
ic_inserer_lien_inter_site: IncludeBinary "icone\inserer_lien_inter_site.bmp"
ic_supprimer_lien: IncludeBinary "icone\supprimer_lien.bmp"
;ic_: IncludeBinary "icone\.bmp"
;ic_: IncludeBinary "icone\.bmp"
;ic_: IncludeBinary "icone\.bmp"

EndDataSection
;}
Procedure StringToBStr(string$) ; By Zapman Inspired by Fr34k
  Protected Unicode$ = Space(Len(string$)* 2 + 2)
  Protected bstr_string.l
  PokeS(@Unicode$, string$, -1, #PB_Unicode)
  bstr_string = SysAllocString_(@Unicode$)
  ProcedureReturn bstr_string
EndProcedure
Procedure.s RelativePath(Path.s, FromPath.s = "")
  Protected l.w,c.w,NewPath.s
  NewPath.s=""
  c=0
  
  If Not FromPath
    FromPath = GetCurrentDirectory()
  EndIf
  
  If Left(Path, 1) <> Left(FromPath, 1)
    ProcedureReturn Path
  EndIf
  
  For l=Len(FromPath) To 1 Step -1
    
    If Mid(FromPath, l, 1)="\"
      c+1
      
      If FindString(Path, Left(FromPath,l), 1)
        Break
      EndIf
      
    EndIf
    
  Next l
  
  For z=1 To c-1
    NewPath+"..\"
  Next
  
  NewPath+Right(Path, Len(Path)-l)
  
  ProcedureReturn NewPath
EndProcedure
;{- Variable
Global test
test=27
Global nom_fichier_web$,MaxD,code_fin_sauvegarde_texte$,code_fin_sauvegarde_format$

;nom_fichier_web$="file://f:\Informatique\34_Creation_site_web\1_client\04_teddymotos\site\base/test.html"

Global zoom,affiche_palette.b
affiche_palette=1

Global Couleur_texte,couleur_fond_texte,web_editor_der_path_image$
Couleur_texte=$000000
couleur_fond_texte=$00FFFF
Global Dim Nom_Font.s(1)
Nom_Font(0)="0"

;Declare Callback_EvenementWebgadget(Hnd,msg,wParam,lParam)
;}
Global hHook.l
ProcedureDLL DisableWebGadgetRightClick(nCode, wParam, lParam)
  Static *MOUSESTRUCT.MOUSEHOOKSTRUCT,Name.s
  
  If nCode < 0
    ProcedureReturn CallNextHookEx_(hHook, nCode, wParam, lParam)
  EndIf
  
  *MOUSESTRUCT.MOUSEHOOKSTRUCT = lParam
  
  Select wParam
    Case #WM_RBUTTONUP,#WM_RBUTTONDOWN
      Name=Space(100)
      GetClassName_(*MOUSESTRUCT\hwnd,@Name,99)
      If Name="Internet Explorer_Server"
        ProcedureReturn 1
      EndIf
  EndSelect
  
  ProcedureReturn CallNextHookEx_(hHook, nCode, wParam, lParam)
EndProcedure
Enumeration #PB_Compiler_EnumerationValue
  #web_ID
  #web_nouveau
  #web_load
  #web_save
  #web_zoom
  
  #web_alig_gauche
  #web_alig_centre
  #web_alig_droite
  #web_text_plus
  #web_text_moins
  
  #web_gras
  #web_italique
  #web_surligner
  #web_barrer
  
  #web_liste_font
  #web_decallage_droite
  #web_decallage_gauche
  #web_zoom_moins
  #web_zoom_plus
  
  #web_inserer_lien
  #web_inserer_lien_inter_site
  #web_supprimer_lien
  
  #web_couleur_texte
  #web_couleur_surligne
  #web_couleur_desurligne
  #web_couleur_texte_choix
  #web_couleur_surligne_choix
  #web_affiche_palette
  #web_ctrl_z
  #web_ctrl_y
  #web_couper
  #web_copier
  #web_coller
  #web_selection_tout
  #web_inserer_image
  #web_inserer_image_gauche
  #web_inserer_image_droite
  #web_delete
  
  ;ne pas changer l'ordre d'ici
  #im_coul_texte
  #im_coul_fond
  #im_coul_page
  ;ne pas changer l'ordre a ici
  
  #im_web_editor
EndEnumeration
Enumeration #PB_Compiler_EnumerationValue ;enumeration des icones
  #ic_nouveau
  #ic_ouvrir
  #ic_barrer
  #ic_centrer_droite
  #ic_centrer_gauche
  #ic_centrer_milieu
  #ic_couleur_texte
  #ic_decalage_droite
  #ic_decalage_gauche
  #ic_sauver
  #ic_gras
  #ic_italique
  ;
  #ic_souligner
  #ic_surligne
  #ic_desurligne
  #ic_taille_moins
  #ic_taille_plus
  #ic_zoom_plus
  #ic_zoom_moins
  #ic_choix
  #ic_palette
  #ic_inserer_lien
  #ic_inserer_lien_inter_site
  #ic_supprimer_lien
  
  #ic_ctrl_z
  #ic_ctrl_y
  #ic_couper
  #ic_copier
  #ic_coller
  #ic_inserer_image
  #ic_inserer_image_gauche
  #ic_inserer_image_droite
  ;#ic_
  ;#ic_
EndEnumeration
Procedure Hide_web_editor(type)
  For i=#web_ID To #web_inserer_image_droite
    If IsGadget(i)
      HideGadget(i,type)
    EndIf
    
  Next
  
  
EndProcedure

Procedure SetIconeCouleurFond(Couleur)
  ;debug "Procedure SetIconeCouleurFond(Couleur)"
  ;debug Couleur
  If IsGadget(#web_couleur_surligne)
    ;debug "ok"
    StartDrawing(ImageOutput(#ic_surligne))
    Box(3,14,15,5,Couleur)
    StopDrawing()
    SetGadgetState(#web_couleur_surligne,ImageID(#ic_surligne))
  EndIf
  
EndProcedure
Procedure SetIconeCouleurTexte(Couleur)
  If IsGadget(#web_couleur_texte)
    StartDrawing(ImageOutput(#ic_couleur_texte))
    Box(3,14,15,5,Couleur)
    StopDrawing()
    SetGadgetState(#web_couleur_texte,ImageID(#ic_couleur_texte))
  EndIf
  
EndProcedure
Procedure raccourci_clavier(id_window)
  
  AddKeyboardShortcut(id_window,#PB_Shortcut_Control | #PB_Shortcut_X, #web_couper)
  AddKeyboardShortcut(id_window,#PB_Shortcut_Control | #PB_Shortcut_C, #web_copier)
  AddKeyboardShortcut(id_window,#PB_Shortcut_Control | #PB_Shortcut_V, #web_coller)
  AddKeyboardShortcut(id_window,#PB_Shortcut_Control | #PB_Shortcut_A, #web_selection_tout)
  AddKeyboardShortcut(id_window,#PB_Shortcut_Control | #PB_Shortcut_Z, #web_ctrl_z)
  AddKeyboardShortcut(id_window,#PB_Shortcut_Control | #PB_Shortcut_Y, #web_ctrl_y)
  AddKeyboardShortcut(id_window,#PB_Shortcut_Control | #PB_Shortcut_S, #web_save)
  AddKeyboardShortcut(id_window, #PB_Shortcut_Delete, #web_delete)
EndProcedure
Procedure ouvrir_canal_web_gadget()
  
  Browser = GetWindowLong_(GadgetID(#web_ID), #GWL_USERDATA) 
  ; wait For page To be loaded..
  Repeat
    While WindowEvent(): Wend
    Delay(1)
    Browser\get_Busy(@IsBusy.l)
  Until IsBusy = 0
  
  ; get the document interface
  If Browser\get_Document(@DocumentDispatch) = #S_OK
    
    ; query For IHTMLDocument3:
    If DocumentDispatch\QueryInterface(?IID_IHTMLDocument2, @Document) = #S_OK
      
      ; here you have a IHTMLDocument2 pointer,  can work with it...
      Document\put_designMode("On") ; Turns on Edit Mode
      ;Document\put_designMode(Ansi2Uni("On")) ; Turns on Edit Mode ;
      
      If DocumentDispatch\QueryInterface(?IID_IOleCommandTarget, @CmdTarget) = #S_OK
        
        CmdTarget\Exec(?CGID_MSHTML, #IDM_2D_POSITION, #OLECMDEXECOPT_DONTPROMPTUSER, @var, NULL) ;Lets you drag  drop items
        ; CmdTarget\Release()
      EndIf
      
      Document\Release()
    EndIf
    
    DocumentDispatch\Release()   
  EndIf
  
EndProcedure
Procedure fermer_canal_web_gadget()
  If CmdTarget
    CmdTarget\Release()
  EndIf
EndProcedure
Procedure inserer_image(type$)
  
 
  file_image$=OpenFileRequester("Choix images","","",0)
  nom_image$=ReplaceString(RelativePath(file_image$,GetPathPart( nom_fichier_web$)),"\","/")
  Debug file_image$
  Debug GetPathPart( nom_fichier_web$)
  Debug nom_image$
  
  If nom_image$<>""
      Select type$
        Case "gauche"
          style$=" style="+Chr(34)+"FLOAT: left"+Chr(34)
        Case "centrer"
          style$=""
        Case "droite"
          style$=" style="+Chr(34)+"FLOAT: right"+Chr(34)
      EndSelect

        texte_insert_image$=nom_image$+Chr(34)+style$+" alt="+GetFilePart(nom_image$);+" width="+l_im$+" Height="+h_im$

      Success.VARIANT
      Command.VARIANT
      Command\vt = #VT_BSTR
      Command\bstrVal = StringToBStr(texte_insert_image$);"http://www.cpur.fr");"CreateLink")
      Document\execCommand("InsertImage", 0, @Command , @Success)
      

    EndIf
  
EndProcedure
Procedure save_web_gadget()
  Browser\ExecWB(#olecmdid_save, #OLECMDEXECOPT_DONTPROMPTUSER, 0, 0)
EndProcedure

Procedure CreateWebGadgetEditor(id_window,x,yd,l,h,menu$="111111111111")
  y=yd
  menu$=LSet(menu$,12,"0")
  ;menu$="11111111111111111111"
  ;{catchimages
  CatchImage(#ic_nouveau,?ic_nouveau)
  CatchImage(#ic_ouvrir         ,?ic_ouvrir  )
  CatchImage(#ic_barrer         ,?ic_barrer  )
  CatchImage(#ic_centrer_droite ,?ic_centrer_droite )
  CatchImage(#ic_centrer_gauche ,?ic_centrer_gauche )
  CatchImage(#ic_centrer_milieu ,?ic_centrer_milieu )
  CatchImage(#ic_couleur_texte  ,?ic_couleur_texte  )
  CatchImage(#ic_decalage_droite,?ic_decalage_droite)
  CatchImage(#ic_decalage_gauche,?ic_decalage_gauche)
  CatchImage(#ic_sauver         ,?ic_sauver         )
  CatchImage(#ic_gras           ,?ic_gras           )
  CatchImage(#ic_italique       ,?ic_italique       )
  CatchImage(#ic_ouvrir         ,?ic_ouvrir         )
  CatchImage(#ic_souligner      ,?ic_souligner      )
  CatchImage(#ic_surligne       ,?ic_surligne       )
  CatchImage(#ic_desurligne       ,?ic_desurligne       )
  CatchImage(#ic_taille_moins   ,?ic_taille_moins   )
  CatchImage(#ic_taille_plus,?ic_taille_plus)
  CatchImage(#ic_zoom_plus,?ic_zoom_plus)  
  CatchImage(#ic_zoom_moins,?ic_zoom_moins)  
  CatchImage(#ic_choix,?ic_choix) 
  CatchImage(#ic_palette,?ic_palette)
  CatchImage(#ic_ctrl_z,?ic_ctrl_z)  
  CatchImage(#ic_ctrl_y,?ic_ctrl_y)  
  CatchImage(#ic_couper,?ic_couper)             
  CatchImage(#ic_copier,?ic_copier)
  CatchImage(#ic_coller,?ic_coller)
  CatchImage(#ic_inserer_image,?ic_inserer_image)
  CatchImage(#ic_inserer_image_gauche,?ic_inserer_image_gauche)
  CatchImage(#ic_inserer_image_droite,?ic_inserer_image_droite)
  CatchImage(#ic_inserer_lien,?ic_inserer_lien)
  CatchImage(#ic_inserer_lien_inter_site,?ic_inserer_lien_inter_site)
  CatchImage(#ic_supprimer_lien,?ic_supprimer_lien)
  
  ;CatchImage(#ic_,?ic_)
  ;CatchImage(#ic_,?ic_)
  
  ;}
  
  pos=x
  h_g=22
  l_g=22
  ;{Bouton : nouveau,load,save
  If Mid(menu$,1,1)="1"
    ButtonImageGadget(#web_nouveau,pos,y,l_g,h_g,ImageID(#ic_nouveau))
    
    pos=pos+l_g
    ButtonImageGadget(#web_load,pos,y,l_g,h_g,ImageID(#ic_ouvrir))
    pos=pos+l_g
    ;l_g=50
    ButtonImageGadget(#web_save,pos,y,l_g,h_g,ImageID(#ic_sauver))
    pos=pos+l_g+5
  EndIf
  ;}
  ;{Bouton : couper coller
  If Mid(menu$,2,1)="1"
    ButtonImageGadget(#web_couper,pos,y,l_g,h_g,ImageID(#ic_couper));,#PB_Button_Toggle )
    GadgetToolTip(#web_couper, "Couper")
    pos=pos+l_g
    
    ButtonImageGadget(#web_copier,pos,y,l_g,h_g,ImageID(#ic_copier));,#PB_Button_Toggle )
    GadgetToolTip(#web_copier, "Copier")
    pos=pos+l_g
    ;l_g=40
    ButtonImageGadget(#web_coller,pos,y,l_g,h_g,ImageID(#ic_coller));,#PB_Button_Toggle )
    GadgetToolTip(#web_coller  , "Coller")
    pos=pos+l_g+5
  EndIf
  ;}
  ;{Bouton : annuler refaire
  
  If Mid(menu$,3,1)="1"
    ButtonImageGadget(#web_ctrl_z,pos,y,l_g,h_g,ImageID(#ic_ctrl_z));,#PB_Button_Toggle )
    GadgetToolTip( #web_ctrl_z , "Annuler")
    pos=pos+l_g
    ;l_g=40
    ButtonImageGadget(#web_ctrl_y,pos,y,l_g,h_g,ImageID(#ic_ctrl_y));,#PB_Button_Toggle )
    GadgetToolTip(#web_ctrl_y  , "Refaire")
    pos=pos+l_g+5
  EndIf
  ;}
  ;{Bouton : alignement texte
  If Mid(menu$,4,1)="1"
    ButtonImageGadget(#web_alig_gauche,pos,y,l_g,h_g,ImageID(#ic_centrer_gauche));,#PB_Button_Toggle )
    GadgetToolTip(#web_alig_gauche  , "Aligner le texte à gauche")
    pos=pos+l_g
    ;l_g=40
    ButtonImageGadget(#web_alig_centre,pos,y,l_g,h_g,ImageID(#ic_centrer_milieu));,#PB_Button_Toggle )
    GadgetToolTip( #web_alig_centre , "Aligner le texte au centre")
    pos=pos+l_g
    ;l_g=40
    ButtonImageGadget(#web_alig_droite,pos,y,l_g,h_g,ImageID(#ic_centrer_droite));,#PB_Button_Toggle )
    GadgetToolTip(#web_alig_droite  , "Aligner le texte à droite")
    ;l_g=45
    pos=pos+l_g+5
  EndIf
  ;}
  ;{Bouton : indentation du texte
  If Mid(menu$,5,1)="1"
    If pos+2*l_g+2>x+l
      pos=x
      y=y+22
    EndIf
    ButtonImageGadget(#web_decallage_gauche,pos,y,l_g,h_g,ImageID(#ic_decalage_gauche));,#PB_Button_Toggle )
    GadgetToolTip(#web_decallage_gauche  , "Décallage gauche du texte")
    
    pos=pos+l_g
    ButtonImageGadget(#web_decallage_droite,pos,y,l_g,h_g,ImageID(#ic_decalage_droite));,#PB_Button_Toggle )
    GadgetToolTip( #web_decallage_droite , "Décallage droit du texte")
    
    pos=pos+l_g+5
  EndIf
  ;}
  ;{Bouton : liste police
  If Mid(menu$,6,1)="1"
    If pos+165>x+l
      pos=x
      y=y+22
    EndIf
    
    ComboBoxGadget(#web_liste_font,pos,y,160,300 )
    AddGadgetItem(#web_liste_font,-1,"Arial")
    AddGadgetItem(#web_liste_font,-1,"Arial Black")
    AddGadgetItem(#web_liste_font,-1,"Comic Sans ms")
    AddGadgetItem(#web_liste_font,-1,"Courier New")
    AddGadgetItem(#web_liste_font,-1,"Georgia")
    AddGadgetItem(#web_liste_font,-1,"Impact")
    AddGadgetItem(#web_liste_font,-1,"Symbol")
    AddGadgetItem(#web_liste_font,-1,"Times")
    AddGadgetItem(#web_liste_font,-1,"Trebuchet MS")
    AddGadgetItem(#web_liste_font,-1,"Verdana")
    AddGadgetItem(#web_liste_font,-1,"Webdings")
    pos=pos+165
  EndIf
  ;}
  ;{Bouton : agrandire diminuer texte
  If Mid(menu$,7,1)="1"
    ButtonImageGadget(#web_text_moins,pos,y,l_g,h_g,ImageID(#ic_taille_moins))
    GadgetToolTip(#web_text_moins  , "Diminuer la taille des caractère")
    
    pos=pos+l_g
    ButtonImageGadget(#web_text_plus,pos,y,l_g,h_g,ImageID(#ic_taille_plus))
    GadgetToolTip(#web_text_plus  , "Augnmenter  la taille des caractère")
    pos=pos+l_g+5
  EndIf
  ;}
  ;{Bouton : gras italique
  If Mid(menu$,8,1)="1"
    ;l_g=20
    If pos+4*l_g>x+l
      pos=x
      y=y+22
    EndIf
    ButtonImageGadget(#web_gras,pos,y,l_g,h_g,ImageID(#ic_gras));,#PB_Button_Toggle )
    GadgetToolTip(#web_gras  , "Texte en gras")
    pos=pos+l_g
    ButtonImageGadget(#web_italique,pos,y,l_g,h_g,ImageID(#ic_italique));,#PB_Button_Toggle )
    GadgetToolTip( #web_italique , "Texte en italique")
    ; pos=pos+l_g
    ; ButtonImageGadget(#web_surligner,pos,y,l_g,h_g,ImageID(#ic_souligner));,#PB_Button_Toggle )
    ; GadgetToolTip(#web_surligner  , "Texte souligné")
    ; pos=pos+l_g
    ; ButtonImageGadget(#web_barrer,pos,y,l_g,h_g,ImageID(#ic_barrer));,#PB_Button_Toggle )
    ; GadgetToolTip( #web_barrer , "Texte barré")
    pos=pos+l_g+5
  EndIf
  ;}
  ;{Bouton : couleur texte
  If Mid(menu$,9,1)="1"
    If pos+3*l_g+20>x+l
      pos=x
      y=y+22
    EndIf
    
    ButtonImageGadget(#web_couleur_texte,pos,y,l_g,h_g,ImageID(#ic_couleur_texte));,#PB_Button_Toggle )
    GadgetToolTip( #web_couleur_texte , "Changer la couleur du texte")
    pos=pos+l_g
    ButtonImageGadget(#web_couleur_texte_choix,pos,y,10,h_g,ImageID(#ic_choix));,#PB_Button_Toggle )
    GadgetToolTip( #web_couleur_texte_choix , "Choisir la couleur du texte")
    
    pos=pos+10+3
    ButtonImageGadget(#web_couleur_surligne,pos,y,l_g,h_g,ImageID(#ic_surligne));,#PB_Button_Toggle )
    GadgetToolTip( #web_couleur_surligne , "Surligner la selection")
    pos=pos+l_g
    ButtonImageGadget(#web_couleur_surligne_choix,pos,y,10,h_g,ImageID(#ic_choix));,#PB_Button_Toggle )
    GadgetToolTip( #web_couleur_surligne_choix , "Choisir la couleur de surlignage")
    pos=pos+10
    ButtonImageGadget(#web_couleur_desurligne,pos,y,l_g,h_g,ImageID(#ic_desurligne));,#PB_Button_Toggle )
    GadgetToolTip( #web_couleur_desurligne , "Retirer le surlignage")
    pos=pos+l_g+5
  EndIf
  ;}
  ;{Bouton : inserer image
  If Mid(menu$,10,1)="1"
    If pos+3*l_g+2>x+l
      pos=x
      y=y+22
    EndIf
    
    ButtonImageGadget(#web_inserer_image,pos,y,l_g,h_g,ImageID(#ic_inserer_image));,#PB_Button_Toggle )
    GadgetToolTip( #web_inserer_image, "Inserer une image")
    pos=pos+l_g+2 
    ButtonImageGadget(#web_inserer_image_gauche,pos,y,l_g,h_g,ImageID(#ic_inserer_image_gauche));,#PB_Button_Toggle )
    GadgetToolTip( #web_inserer_image_gauche, "Inserer une image à gauche avec habillage de texte")
    pos=pos+l_g   
    ButtonImageGadget(#web_inserer_image_droite,pos,y,l_g,h_g,ImageID(#ic_inserer_image_droite));,#PB_Button_Toggle )
    GadgetToolTip( #web_inserer_image_droite, "Inserer une image à droite avec habillage de texte")
    
    
    pos=pos+l_g+5
    
  EndIf
  
  
  ;}
  ;{Bouton : inserer lien
  If Mid(menu$,11,1)="1"
    If pos+2*l_g+2>x+l
      pos=x
      y=y+22
    EndIf
    
    If FileSize(repertoire_site$+"liste_pages.txt")>0
      ButtonImageGadget(#web_inserer_lien_inter_site,pos,y,l_g,h_g,ImageID(#ic_inserer_lien_inter_site));,#PB_Button_Toggle )
      GadgetToolTip( #web_inserer_lien_inter_site, "Inserer un lien à une page du site")
      pos=pos+l_g+2 
    EndIf
    
    ButtonImageGadget(#web_inserer_lien,pos,y,l_g,h_g,ImageID(#ic_inserer_lien));,#PB_Button_Toggle )
    GadgetToolTip( #web_inserer_lien, "Inserer un lien")
    pos=pos+l_g+2 
    ButtonImageGadget(#web_supprimer_lien,pos,y,l_g,h_g,ImageID(#ic_supprimer_lien));,#PB_Button_Toggle )
    GadgetToolTip( #web_supprimer_lien, "Supprimer le lien")
    pos=pos+l_g+5
    
  EndIf
  
  ;}
  
  WebGadgetHandle = WebGadget(#web_ID,x,y+26,l,h-(y-yd)-15,"file://"+nom_fichier_web$)
  
  
  hHook = SetWindowsHookEx_(#WH_MOUSE, @DisableWebGadgetRightClick(), GetModuleHandle_(0), GetWindowThreadProcessId_(WindowID(id_window),0))
  ;
  SendMessage_(GadgetID(#web_ID), #EM_SETTARGETDEVICE, #Null, 0) ;retour à la ligne automatique
  SetIconeCouleurFond(couleur_fond_texte)
  SetIconeCouleurTexte(Couleur_texte)
  
  raccourci_clavier(id_window)
  
  ;-Nouveau_notepad(#web_ID)
  ;-If IsGadget(#web_liste_font)
  ;-list_font(GetActiveWindow(),#web_liste_font)
  ;-EndIf
  
  couleur_fond_texte=$34D330
  SetIconeCouleurFond(couleur_fond_texte)
  Couleur_texte=$2E41E9
  SetIconeCouleurTexte(Couleur_texte)
  
  ouvrir_canal_web_gadget()
  
EndProcedure


Procedure evenement_webgadget(id_window,event )
  Select event
    Case #WM_KEYDOWN  ;{touche clavier
      ;}
    Case #PB_Event_Gadget;{ *****************Choix d'un bouton
      
      Select EventGadget()
        ;{-Commande OK
        ;Browser\ExecWB(#olecmdid_saveas, #OLECMDEXECOPT_PROMPTUSER, 0, 0)
        ;Browser\ExecWB(#olecmdid_printpreview, #OLECMDEXECOPT_PROMPTUSER, 0, 0)
        ;Browser\ExecWB(#olecmdid_pagesetup, #OLECMDEXECOPT_PROMPTUSER, 0, 0)
        ;Browser\ExecWB(#olecmdid_selectall, #OLECMDEXECOPT_PROMPTUSER, 0, 0)
        ;}
        
        Case #web_inserer_lien;{
          
          Success.VARIANT
          Command.VARIANT
          Command\vt = #VT_BSTR
          Command\bstrVal = StringToBStr("http://www.cpur.fr");"CreateLink")
          
          Document\execCommand("CreateLink", 1, @Command , @Success)
          Debug Success
          ;}      
        Case #web_supprimer_lien;{
          Success.VARIANT
          Command.VARIANT
          Command\vt = #VT_BSTR
          Command\bstrVal = 0
          
          Document\execCommand("Unlink", 0, @Command , @Success)
          Debug Success
          
          ;}
        Case #web_inserer_image_gauche;{
          inserer_image("gauche")
          
          ;}
        Case #web_inserer_image;{
          inserer_image("centrer")
          
          ;}
        Case #web_inserer_image_droite;{
          inserer_image("droite")
          
          ;}
        Case #web_couper ;{
          ;debug "ikikik"
          ;Document\queryCommandState("Cut", @vb)
          ;CmdTarget\Exec(?CGID_MSHTML, #olecmdid_cut ,#OLECMDEXECOPT_DONTPROMPTUSER , 0,0)
          ;Browser\ExecWB(#olecmdid_paste, #OLECMDEXECOPT_DONTPROMPTUSER, 0, 0)
          Browser\ExecWB(#olecmdid_cut, #OLECMDEXECOPT_DONTPROMPTUSER, 0, 0)
          ;CmdTarget\Exec(?CGID_MSHTML, #idm_cut     ,#OLECMDEXECOPT_DONTPROMPTUSER, 0,0)
          ;}
        Case #web_copier;{
          
          Browser\ExecWB(#olecmdid_copy, #OLECMDEXECOPT_DONTPROMPTUSER, 0, 0)
          ;}
        Case #web_coller;{
          Browser\ExecWB(#olecmdid_paste, #OLECMDEXECOPT_DONTPROMPTUSER, 0, 0)
          ;CmdTarget\Exec(?CGID_MSHTML, #olecmdid_paste ,#OLECMDEXECOPT_DONTPROMPTUSER, 0,0)
          
          ;}
        Case #web_ctrl_z;{
          Browser\ExecWB(#olecmdid_undo, #OLECMDEXECOPT_DONTPROMPTUSER, 0, 0)
          ;}
        Case #web_ctrl_y;{
          Browser\ExecWB(#olecmdid_redo, #OLECMDEXECOPT_DONTPROMPTUSER, 0, 0)
          ;}
        Case #web_couleur_desurligne;{
          Cl.VARIANT
          Cl\vt = 0;#VT_BSTR
          Cl\bstrVal = -1
          CmdTarget\Exec(?CGID_MSHTML, #idm_backcolor,#OLECMDEXECOPT_DONTPROMPTUSER, @Cl,0)
          
          SysFreeString_(Cl_bstr)
          ;}
        Case #web_couleur_surligne;{
          Cl.VARIANT
          Cl\vt = 3;#VT_BSTR
          Cl\bstrVal = couleur_fond_texte ; ABGR Cl_bstr
          CmdTarget\Exec(?CGID_MSHTML, #idm_backcolor,#OLECMDEXECOPT_DONTPROMPTUSER, @Cl, 0)
          SysFreeString_(Cl_bstr)
          ;}
        Case #web_couleur_texte;{
          
          Cl.VARIANT
          Cl\vt = 3;#VT_BSTR
          Cl\bstrVal =  Couleur_texte ; ABGR Cl_bstr
          CmdTarget\Exec(?CGID_MSHTML, #idm_forecolor,#OLECMDEXECOPT_DONTPROMPTUSER, @Cl, 0)
          SysFreeString_(Cl_bstr)
          
          
          ;}
        Case #web_couleur_surligne_choix;{
          couleur_fond_texte=ColorRequester(couleur_fond_texte)
          SetIconeCouleurFond(couleur_fond_texte)
          
          Cl.VARIANT
          Cl\vt = 3;#VT_BSTR
          Cl\bstrVal = couleur_fond_texte ; ABGR Cl_bstr
          CmdTarget\Exec(?CGID_MSHTML, #idm_backcolor,#OLECMDEXECOPT_DONTPROMPTUSER, @Cl, 0)
          SysFreeString_(Cl_bstr)
          ;}
        Case #web_couleur_texte_choix;{
          Couleur_texte=ColorRequester(Couleur_texte)
          SetIconeCouleurTexte(Couleur_texte)
          
          Cl.VARIANT
          Cl\vt = 3;#VT_BSTR
          Cl\bstrVal =  Couleur_texte ; ABGR Cl_bstr
          CmdTarget\Exec(?CGID_MSHTML, #idm_forecolor,#OLECMDEXECOPT_DONTPROMPTUSER, @Cl, 0)
          SysFreeString_(Cl_bstr)
          ;}
        Case #web_ID ;{
          ;;debug "c"
          ;;debug EventType()
          ;;debug EventlParam()
          ;;debug EventwParam()
          ;}
        Case #web_nouveau ;{
          
          ;}
        Case #web_load;{
          Debug "load"
          ;fermer_canal_web_gadget()
          Browser\ExecWB(#olecmdid_open, #OLECMDEXECOPT_PROMPTUSER, 0, 0)
          ;}
        Case #web_save;{
          Browser\ExecWB(#olecmdid_save, #OLECMDEXECOPT_DONTPROMPTUSER, 0, 0)
          ;}
        Case #web_zoom_moins;{
          ;debug "zoom"
          ;debug zoom
          zoom=zoom-2 
          
          lRet=SendMessage_(GadgetID(#web_ID),#EM_SETZOOM,zoom,10) 
          ;debug zoom
          ;}
        Case #web_zoom_plus;{
          zoom=zoom+2 
          ;debug zoom
          lRet=SendMessage_(GadgetID(#web_ID),#EM_SETZOOM,zoom,10) 
          ;}
        Case #web_alig_gauche;{
          CmdTarget\Exec(?CGID_MSHTML, #idm_justifyleft,#OLECMDEXECOPT_DONTPROMPTUSER  , 0, 0)
          ;}
        Case #web_alig_centre;{
          CmdTarget\Exec(?CGID_MSHTML, #idm_justifycenter,#OLECMDEXECOPT_DONTPROMPTUSER, @Cl, 0)
          ;}
        Case #web_alig_droite;{
          CmdTarget\Exec(?CGID_MSHTML, #idm_justifyright,#OLECMDEXECOPT_DONTPROMPTUSER, @Cl, 0)
          ;}
        Case #web_text_moins  ;{ 
          Cl.VARIANT
          CmdTarget\Exec(?CGID_MSHTML, #olecmdid_zoom,#OLECMDEXECOPT_DONTPROMPTUSER, 0,@Cl)
          
          Cl\bstrVal-1
          If Cl\bstrVal<1 : Cl\bstrVal=1 : EndIf
          CmdTarget\Exec(?CGID_MSHTML, #olecmdid_zoom,#OLECMDEXECOPT_DONTPROMPTUSER, @Cl,0)
          SysFreeString_(Cl_bstr)
          
          ;}
        Case #web_text_plus;{
          Cl.VARIANT
          CmdTarget\Exec(?CGID_MSHTML, #olecmdid_zoom,#OLECMDEXECOPT_DONTPROMPTUSER, 0,@Cl)
          
          Cl\bstrVal+1
          If Cl\bstrVal>7 : Cl\bstrVal=7 : EndIf
          CmdTarget\Exec(?CGID_MSHTML, #olecmdid_zoom,#OLECMDEXECOPT_DONTPROMPTUSER, @Cl,0)
          SysFreeString_(Cl_bstr)
          ;}
        Case #web_gras;{
          CmdTarget\Exec(?CGID_MSHTML, #idm_bold,#OLECMDEXECOPT_DONTPROMPTUSER  , 0, 0)
          ;}
        Case #web_italique;{
          CmdTarget\Exec(?CGID_MSHTML, #idm_italic,#OLECMDEXECOPT_DONTPROMPTUSER  , 0, 0)
          ;}
        Case #web_surligner;{ certainement sous ligner !
          ;debug "ok"
          CmdTarget\Exec(?CGID_MSHTML, #idm_backcolor,#OLECMDEXECOPT_DONTPROMPTUSER  , 0, 0)
          ;}
        Case #web_liste_font ;{
          Select EventType()
            Case 1
              If GetGadgetText(#web_liste_font)<>""
                Success.VARIANT
                Success\vt = #VT_BSTR
                Command.VARIANT
                Command\vt = #VT_BSTR
                Command\bstrVal = StringToBStr(GetGadgetText(#web_liste_font))
                Document\execCommand("FontName", 0, @Command , @Success)
              EndIf
              
          EndSelect
          
          ;}
        Case #web_decallage_droite ;{
          Debug "outdent"
          Success.VARIANT
          Command.VARIANT
          Command\vt = #VT_BSTR
          Command\bstrVal = 0
          Document\execCommand("Indent", 0, @Command , @Success)
          
          ;}
        Case #web_decallage_gauche;{
          Debug "indent"
          Success.VARIANT
          Command.VARIANT
          Command\vt = #VT_BSTR
          Command\bstrVal = 0
          Document\execCommand("Outdent", 0,@Command , @Success)
          ;}
      EndSelect
      ;}
    Case #PB_Event_Menu ;{
      Select EventMenu()
        Case #web_couper;{
          Browser\ExecWB(#olecmdid_cut, #OLECMDEXECOPT_DONTPROMPTUSER, 0, 0)
          ;}
        Case #web_copier;{
          Browser\ExecWB(#olecmdid_copy, #OLECMDEXECOPT_DONTPROMPTUSER, 0, 0)
          ;}
        Case #web_coller;{
          Browser\ExecWB(#olecmdid_paste, #OLECMDEXECOPT_DONTPROMPTUSER, 0, 0)
          ;}
        Case #web_selection_tout;{
          Browser\ExecWB(#idm_delete, #OLECMDEXECOPT_DONTPROMPTUSER, 0, 0)
          ;}
        Case #web_ctrl_z;{
          Browser\ExecWB(#olecmdid_undo, #OLECMDEXECOPT_DONTPROMPTUSER, 0, 0)
          ;}
        Case #web_ctrl_y;{
          Browser\ExecWB(#olecmdid_redo, #OLECMDEXECOPT_DONTPROMPTUSER, 0, 0)
          ;}
        Case #web_save;{
          save_web_gadget()
          
          ;}
        Case #web_delete;{
          ;debug "dele"
          Browser\ExecWB(#olecmdid_delete, #OLECMDEXECOPT_DONTPROMPTUSER, 0, 0)
          ;}
      EndSelect
      ;}
  EndSelect
EndProcedure

;{- Code de Test
nom_fichier_web$="F:\Informatique\03_notepad\page_test.html"
If FileSize(nom_fichier_web$)=-1
  CreateFile(0,nom_fichier_web$)
  CloseFile(0)
EndIf


id_web_gadget=20    
OpenWindow(0,0,0,900,600,"Web gadget Editeur",#PB_Window_SystemMenu  )
CreateGadgetList(WindowID(0))
     
CreateWebGadgetEditor(0,20,10,870,500,"11111111111")

Repeat
  event=WaitWindowEvent()
  evenement_webgadget(0,event )
  Select event
    
    Case #WM_KEYDOWN  ;touche clavier
      ;debug "Appuye touche "+Str(EventwParam())
      id_touche=EventwParam()
      
      Select id_touche

        Case 117
          
          
      EndSelect
  EndSelect
  
Until event=#WM_CLOSE
fermer_canal_web_gadget()
;}
Répondre