[resolve]Webgadget : insert picture ?

Just starting out? Need help? Post your questions and find answers here.
Stefou
User
User
Posts: 19
Joined: Thu May 29, 2008 8:40 am

[resolve]Webgadget : insert picture ?

Post by Stefou »

Hi every body

It's my first message on the english Forum.

I work on a Webgadget Edit.

I find how put text on bold, add link with UserInterface or without UserInterface, insert pictures with UserInterface . but i'd like to insert pictures without UserInterface.

Sorry for my english and thank you to read me

Have a nice day

help for Hyperlink : http://msdn.microsoft.com/fr-fr/library ... S.85).aspx
help for insertimage : http://msdn.microsoft.com/fr-fr/library ... S.85).aspx

Code: Select all

#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
Last edited by Stefou on Thu May 29, 2008 7:25 pm, edited 1 time in total.
User avatar
Kiffi
Addict
Addict
Posts: 1503
Joined: Tue Mar 02, 2004 1:20 pm
Location: Amphibios 9

Re: Webgadget : insert picture ?

Post by Kiffi »

Stefou wrote:

Code: Select all

[...]
Command\bstrVal = Ansi2Uni("ess.jpg")
[...]
try to insert your picture with his full path.

Greetings ... Kiffi
Hygge
Stefou
User
User
Posts: 19
Joined: Thu May 29, 2008 8:40 am

Post by Stefou »

Thank you Kiffi for your answer 8)

But i try it yet, and there is no result.

The first way i have one result, is to change

Code: Select all

Command\bstrVal = Ansi2Uni("ess.jpg")  
by

Code: Select all

Command\bstrVal = 0  
then a code <IMG > write in html page.

The seconde way is to change

Code: Select all

Command\vt = #VT_BSTR 
by

Code: Select all

Command\vt = 1 
or

Code: Select all

Command\vt = 2 
... or

Code: Select all

Command\vt = 7 
then a code <IMG src="xxxx"> write in html page.

But it's the wrong way i think...
User avatar
Kiffi
Addict
Addict
Posts: 1503
Joined: Tue Mar 02, 2004 1:20 pm
Location: Amphibios 9

Post by Kiffi »

@Stefou: In PB 4.2 there is no need to use Ansi2Uni()

the following code works for me:

Code: Select all

[...]
Command\vt = #VT_BSTR
Command\bstrVal = @"d:\ess.jpg"
Document\execCommand("InsertImage", 0, @Command , @Success)
[...]
Greetings ... Kiffi
Hygge
Stefou
User
User
Posts: 19
Joined: Thu May 29, 2008 8:40 am

Post by Stefou »

Thank you Kiffi....but :cry: it's doesn't work on my computeur !

You write PB 4.2, you think 4.02 or 4.20 ?

I don't understand :shock: :cry: :shock: :cry:

Another one to try it ?
User avatar
Kiffi
Addict
Addict
Posts: 1503
Joined: Tue Mar 02, 2004 1:20 pm
Location: Amphibios 9

Post by Kiffi »

Stefou wrote:You write PB 4.2, you think 4.02 or 4.20 ?
i mean PB 4.20 (same as PB 4.2) ;-)
Stefou wrote:it's doesn't work on my computeur !
did you check the image-path?

Greetings ... Kiffi
Hygge
Stefou
User
User
Posts: 19
Joined: Thu May 29, 2008 8:40 am

Post by Stefou »

i mean PB 4.20 (same as PB 4.2) Wink
It was what i think !

Code: Select all

did you check the image-path? 
Yes


I'm going to do a break... :roll:

I don't understand....and that make me mad :evil:

In any way, thank you for your answer.
ricardo
Addict
Addict
Posts: 2438
Joined: Fri Apr 25, 2003 7:06 pm
Location: Argentina

Post by ricardo »

Stefou wrote: Another one to try it ?
With 4.20 here dosent work. Crashes.
Stefou
User
User
Posts: 19
Joined: Thu May 29, 2008 8:40 am

Post by Stefou »

On the french forum, nico post the solution !


BSTR is not Unicode !
A BSTR is a string unicode with one octet for the lenght of the string.

We must use this

Code: Select all

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
Then

Code: Select all

               Case 5
                  Command\vt = #VT_BSTR
                  Command\bstrVal = StringToBStr("ess.jpg")
                  Document\execCommand("InsertImage", 0, @Command , @Success)
                  SysFreeString_(@Command\bstrVal)
Thank you for everybody we help me.
dige
Addict
Addict
Posts: 1407
Joined: Wed Apr 30, 2003 8:15 am
Location: Germany
Contact:

Post by dige »

Wow, that editmode is pretty cool. never thought it could be so easy done with PB.
thx Stefou!
Stefou
User
User
Posts: 19
Joined: Thu May 29, 2008 8:40 am

Post by Stefou »

Then, after some hours of work, i give you my WebEditor.
New and Open doesn't work yet, becaus i don't use it.

Thank you for every one i catch them code ! 8)

The icone is here : http://perso.ecligne.net/icone.zip

Code: Select all

;{- 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()
;}
User avatar
pdwyer
Addict
Addict
Posts: 2813
Joined: Tue May 08, 2007 1:27 pm
Location: Chiba, Japan

Post by pdwyer »

:shock: This is fantastic!!! I had no idea you could do this

You could make an email client with HTML mail creation!!!!

Thank you for sharing !!! :D
Paul Dwyer

“In nature, it’s not the strongest nor the most intelligent who survives. It’s the most adaptable to change” - Charles Darwin
“If you can't explain it to a six-year old you really don't understand it yourself.” - Albert Einstein
Post Reply