求助,ps渐变编辑器在哪里里的面纱在哪里

求助关于ck编辑器更改内容时调取数据的问题 - ThinkPHP框架
我的新闻模块编辑时使用ck编辑器。整合到框架后填写文章没问题。但是修改的时候调取的数据无法显示到编辑器文本框里。大神们帮忙啊!!!
我首先在头部调用&script type=&text/javascript& src=&__PUBLIC__/ckeditor/ckeditor.js&&&/script&后面代码
&th width=&20%&&新闻内容&/th&
&td width=&30%&&&&&&input type=&textarea& id=&TextArea1& name=&content& value=&{$list['content']}& style=&width:200 height:18 font-size:14&&&/td&
&script type=&text/javascript&&
CKEDITOR.replace('content',{
toolbar : 'Full',
uiColor : '#9AB8F3',
height:'200'
CKEDITOR.instances.TextArea1.getData()
大家帮忙看看是怎么回事
蓝色风暴ddc
ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的WEB应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。1847人阅读
Windows 开发(9)
&Outlook ExpressHTMLHTMLIEMSHTMLVCDelphi&COMCOMWMSHTML&&lTWebBrowserlIHTMLDocument2IDocHostUIHandlelMSHTMLlMSHTMLllMSHTML&COMDelphiCOM&TWebBrowserMSHTMLIHTMLDocument2IDocHostUIHandlerFilterDataObjectIDataObject&&&&&&&& &&&&&&& &WWCOMYOutlook ExpressOEWOE&OEWOEOEOEHTMLHTMLWHTMLDHTMLOEIE&WVCSpy++Spy++OESpy++Internet Explorer_ServerIE &&&&&&& IESHDOCVW.DLLMSHTML.DLLInternet ExplorerIESHDOCVW.DLLWebBrowser ControlHTMLjavaSHDOCVW.DLLMSHTML.DLLSHDOCVW.DLLMSHTML.DLL&&&&&& &OEWebBrowserMSHTMLHTMLWebBrowserActiveXDelphiActiveXWebBrowserDelphiImportTLBSHDocVw_TLB MSHTML_TLB&DelphiTWebBrowser&&&&&& Delphi4DelphiInternetTWebBrowserWebBrowserDelphiWebBrowserDelphi7Shdocvw.dll&TWebBrowserDelphiWDelphiInternetTWebBrowserwbEditorTWebBrowserWDelphiD&WDTWebBrowserDTWebBrowserDocumentIDispatchIDispatchWDJavascriptCOMCOMCOMCOMIDispatchIDispatchCOMIDispatchCOM自动化对象WDOKIDispatchDelphiasIHTMLDocument2DHTMLWIHTMLDocument2DIHTMLDocument2disignModeOnDocumentTWebBrowserNavigatebusyW&procedure TForm1.FormCreate(Sender: TObject);begin& wbEditor.Navigate('about:blank');& while wbEditor.busy do Application.ProcessM& (wbEditor.Document as IHTMLDocument2).designMode := 'On';&DWTWebBrowserTWebBrowserWIHTMLDocument2&&&&&&& TWebBrowserExecWBOLETWebBrowserOLECOMTWebBrowserOLEinitializationfinalization&{uses ActiveX}initialization& OleInitialize(nil);finalization& try&&& OleU& except& &IHTMLDocument2&&&&&&& IHTMLDocument2MSHTML.pasActiveXMSHTML_TLB.pas&MSHTMLDocumentIHTMLDocument2DocumentIHTMLDocument2IHTMLDocument2DHTML&IHTMLDocument2WexecCommandexecCommand&//HRESULT&execCommand(&&&&&&&&&&BSTR&cmdID,&&&&VARIANT_BOOL&showUI,&&&&VARIANT&value,&&&&VARIANT_BOOL&*pfRet);&cmdIDOEWW&procedure TForm1.Button1Click(Sender: TObject);begin& with wbEditor.Document as IHTMLDocument2 dobegin//execCommand('ForeColor', False, 'red');//execCommand('Bold', False, 1);//execCommand('InsertImage', True, '');//execCommand('JustifyCenter', False, 0);//execCommand('Undo', False, 0);&
&execCommand&IOleCommandTarget::ExecexecCommandIOleCommandTarget::ExecScriptIOleCommandTargetExec&IOleCommandTarget::Exec&&&&&& &&&&&& procedure TForm1.Button2Click(Sender: TObject);&&&&&& const&&&&&&&&&&&&& CGID_MSHTML: TGUID = '{DE4BA900-59CA-11CF-40000}';&&&&&& begin&&&&&&&&&&&&& &(wbEditor.Document as IOleCommandTarget).Exec(@CGID_MSHTML,IDM_BOLD, &&&&//BoldIDMSDNOLECMDEXECOPT_DODEFAULT,0,POlevariant(nil)^);&&&&&& &&DocumentIHTMLDocument2DocumentDHTMLDocumentDocumentNavigateDocumentNavigate&procedure TForm1.InitDbegin& wbEditor.Navigate('about:blank');& while wbEditor.ReadyState && READYSTATE_COMPLETE do&&& Application.ProcessM&DocumentDocumentDocumentIPersistStreamInit&function TForm1.LoadFromStream(const AStream: TStream): HRESULT;begin& if not Assigned(wbEditor.Document) then&&& InitD& AStream.seek(0, 0);& Result := (wbEditor.Document as IPersistStreamInit).Load(TStreamadapter.Create(AStream));&function TForm1.LoadFromStrings(const AStrings: TStrings): HRESULT;var& M: TMemorySbegin& M := TMemoryStream.C& try&&& AStrings.SaveToStream(M);&&& Result := LoadFromStream(M);& except&&& Result := S_FALSE;& & M.&WMSHTMLTABDeleteBACKSPACE的事。&TWebBrowserOLEDelphiTWinControlTWinControlDelphiVCLOLEOLE&WWindowsApplication.OnMessage&procedure TForm1.IEMessageHandler(var Msg: TM var Handled: Boolean);const& StdKeys = [VK_TAB, VK_RETURN]; { 标准键 }& ExtKeys = [VK_DELETE, VK_BACK, VK_LEFT, VK_RIGHT]; { 扩展键 }& fExtended = $; { 扩展键标志 }begin& Handled := F& with Msg do&&& if ((Message &= WM_KEYFIRST) and (Message &= WM_KEYLAST)) and&&&&& ((wParam in StdKeys) or (GetKeyState(VK_CONTROL) & 0) or&&&&& (wParam in ExtKeys) and ((lParam and fExtended) = fExtended)) then&&& try&&&&& if IsChild(wbEditor.Handle, hWnd) then&&&&&&& { 处理所有的浏览器相关消息 }&&&&& begin&&&&&&& with wbEditor.Application as IOleInPlaceActiveObject do&&&&&&&&& Handled := TranslateAccelerator(Msg) = S_OK;&&&&&&& if not Handled then&&&&&&& begin&&&&&&&&& Handled := T&&&&&&&&& TranslateMessage(Msg);&&&&&&&&& DispatchMessage(Msg);&&&&&&& &&&&& &&& except&&&
// IEMessageHandler&procedure TForm1.FormCreate(Sender: TObject);begin&& &&&& Application.OnMessage := IEMessageH&&&&&&& OnDisplayChangedOnDisplayChangedMSDNWIDocHostUIHandleUpdateUIMSHTMLUpdateUI&IDocHostUIHandle工作原理:&&& 当MSHTML组件被加载到内存并执行初始化时,MSHTML开始在宿主客户端查询一个叫IDocHostUIHandle的接口实现。如果找到这样的接口实现,MSHTML将在其运行期间,根据需要动态的调用IDocHostUIHandle中的对应方法。&&&& 通过对IDocHostUIHandle接口的实现,MSHTML组件将能直接和用户接口界面(UI)进行通信。这样,宿主程序将有机会修改用户界面中的菜单、工具条、以及其它的用户接口元素。&UpdateUIWTWebBrowserIDocHostUIHandleTWebEditorUpdateUIOnDisplayChangedDelphi&TWebEditor = class(TWebBrowser, IDocHostUIHandle)&&& &&private&&& FOnDisplayChanged: TNotifyE //声明私有事件变量&&& function UpdateUI: HRESULT;publish&&& property OnDisplayChanged: TNotifyEvent &&&&&&&&&&&&&&& read FOnDisplayChanged write FOnDisplayC //声明属性事件&function TEmbeddedED.UpdateUI: HRESULT;begin& //在编辑器状态改变时,通知宿主程序& if Assigned(FOnDisplayChanged) then&&& FOnDisplayChanged(self);& Result := S_OK; //表示已经做了处理&TWebEditorInternetTWebBrowserOKOnDisplayChanged&MSHTMLWWIDocHostUIHandleWShowContextMenuWPopupMenuppMenuTWebEditor&&&//声明一个显示上下文事件类型TShowContextMenuEvent = function(const dwID: DWORD; const ppt: PPOINT;&&& const pcmdtReserved: IU const pdispReserved: IDispatch): HRESULT&TWebEditor = class(TWebBrowser, IDocHostUIHandle)&&& &&private&&& FOnShowContextMenu: TShowContextMenuE //声明响应上下文菜单私有事件变量&&& &&&&& function ShowContextMenu(const dwID: DWORD; const ppt: PPOINT;&&&&&&&&&&&&& const pcmdtReserved: IU &&&&& &&&&&&& const pdispReserved: IDispatch): HRESULT;publish&&& property OnShowContextMenu: TShowContextMenuEvent &&&&&&&&&&&&& read FOnShowContextmenu write FOnShowC //声明属性事件&function TWebEditor.ShowContextMenu(const dwID: DWORD; const ppt: PPOINT;& const pcmdtReserved: IU const pdispReserved: IDispatch): HRESULT;begin//在MSHTML组件企图显示上下文菜单时,通知宿主程序& if Assigned(FOnShowContextMenu) then&&& RESULT := FOnShowContextMenu (dwID, ppt, pcmdtreserved, pdispreserved)& else&&& RESULT := S_FALSE;&[]wbEditorOnShowContextMenuS_OKMSHTMLS_FALSE&function TForm1.wbEditorShowContextMenu(const dwID: C& const ppt: PP const pcmdtReserved: II& const pdispReserved: IDispatch): HRESULT;begin& ppMenu.Popup(ppt.X, ppt.Y); //显示自定义菜单& Result := S_OK; //告诉MSHTML组件将显示自定义菜单&OEWWMSHTMLWordExcelExcelWordWordWordWOEMSHTML&WWordHTMLXMLXMLOEHTMLWCOOL&W&procedure TForm1.Button3Click(Sender: TObject);var& i:& Buffer: PC& s:begin& Memo1.Lines.C &//Memo& with TClipboard.Create do& //TClipboard& begin&&& GetMem(Buffer, 20);&&& for i:=0 to FormatCount - 1 do&&& begin&&&&& GetClipboardFormatName(Formats[i], Buffer, 20);&&&&& s := StrPas(Buffer);&&&&& Memo1.Lines.Add(Format('%s:%d', [s, Formats[i]]));&&& FreeMem(Buffer);F& &Button3Memo1DataObject:49161Object Descriptor:49166Rich Text Format:49312HTML Format:49394HTML Format:14HTML Format:3PNG:49672GIF:49536JFIF:49538&4HTML Format:49394HTMLHTML FormatWAPIRegisterClipboardFormat&procedure TForm1.Button4Click(Sender: TObject);var& s:& hMem: DWORD;& CF_HTML: DWORD; // CF_HTML& txtPtr: PCbegin& CF_HTML := RegisterClipboardFormat('HTML Format'); &//HTML Format& with TClipboard.Create do& begin&&& hMem := GetAsHandle(CF_HTML);&&& txtPtr := GlobalLock(hMem);&&& s := StrPas(txtPtr);&&& GlobalUnlock(hMem);&Memo1.Lines.Add(s);F& &Memo1WWordHTML&Version:1.0StartHTML:EndHTML:StartFragment:EndFragment:&&html xmlns:v=&urn:schemas-microsoft-com:vml&xmlns:o=&urn:schemas-microsoft-com:office:office&xmlns:w=&urn:schemas-microsoft-com:office:word&xmlns=&http://www.w3.org/TR/REC-html40&&&body &&!--StartFragment--&&span &&!--[if gte vml 1]&&v:shapetype &&&v:imagedata src=&file:///C:/DOCUME~1/tttk/LOCALS~1/Temp/msohtml1/01/clip_image001.gif&& o:title=&el2&/&&/v:shape&&![endif]--&&![if !vml]&&img width=128 height=128src=&file:///C:/DOCUME~1/tttk/LOCALS~1/Temp/msohtml1/01/clip_image001.gif&v:shapes=&_x&&&![endif]&&/span&&!--EndFragment--&&WHTML&img&img&![if]&HTML&procedure TForm1.FilterData(var S: string);var& isOffice: Bbegin& & with TRegExpr.Create do& begin&&& isOffice := ExecRegExpr('(?i)xmlns:o=&urn:schemas-microsoft-com:office:office&', S);&&&& Expression := '(?i)&!--StartFragment--&(.*)&!--EndFragment--&';&&& if Exec(S) then S := Match[1];&&&& if isOffice then //trip office document&&& begin&&&&& S := ReplaceRegExpr('(?i)&!--[^&]+?&.+?&[^&]+?--&', S, '');&&&&& S := ReplaceRegExpr('(?i)&[^/]|&]*/[[if|endif][^&]+&', S, '');&&&&& S := ReplaceRegExpr('(?i)&/?[v|o|w]:[^&]+&', S, '');&&&&& S := ReplaceRegExpr('(?i)[/r|/n]{2,}', S, ' ');&&& & && S := UTF8Decode(S);&TRegExpr&WWInOutIDocHostUIHandleWFilterDataObjectInOut&HRESULT&FilterDataObject(&&&&IDataObject&*pDO,&&&&IDataObject&**ppDORet);&MSHTMLIDocHostUIHandleFilterDataObjectpDOS_OKppDORetNULLMSHTMLppDORetWOnPaste&//声明粘贴事件类型TPasteEvent = function(const pDO: IDataO&&&&&&&&&&&&&&&&&&&&&&& var ppDORet: IDataObject): HRESULTTWebEditor = class(TWebBrowser, IDocHostUIHandle, IOleCommandTarget, &)&&& &&private&&& &&&&& FOnPaste: TPasteE&&& function FilterDataObject(const pDO: IDataO &&&&&&&&&&&&&&&&&&&&&&&&&&&&& var ppDORet: IDataObject): HRESULT;&&& &&publish//声明粘贴事件属性&&& property OnPaste: TPasteEvent read FOnPaste write FOnP&&& &&&implementation&function TWebEditor.FilterDataObject(const pDO: IDataO &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& out ppDORet: IDataObject): HRESULT;begin& { 如果数据对象被替换,返回 S_OK,否则返回S_FALSE&&& 虽然文档没有明显指出, 这个方法只能用在处理粘贴事件}&& if Assigned(FOnPaste) then&&& Result := FOnPaste(pDO, ppDORet)& else&&& Result := E_NOTIMPL;&OnPasteWpDOppDORetpDOppDORetIDataObjectIDataObject &IDataObject接口:&&& 在OLE对象的数据操作方法中,IDataObject接口在传输和转换数据的过程中起到了关键的作用。OLE对象通过调用IDataObject接口对象的相关方法保存需要操作的数据格式、存储媒介等信息。&&& 在传送和接收数据前,OLE对象会根据需要分别填充FORMATETC和STGMEDIUM结构中的相关字段。传送数据时,OLE对象通过多次调用SetData方法来设置要传输数据的多种格式。相反,在获取数据时,OLE对象将先调用QueryGetData方法来查询是否存在指定格式,然后通过GetData方法来取得数据。&&&& 在IDataObject接口中,FORMATETC和STGMEDIUM这两个结构类型尤为重要,它们在Delphi中的定义如下:& tagFORMATETC = record&&& cfFormat: TClipF&&& ptd: PDVTargetD&&& dwAspect: L&&& lindex: L&&& tymed: L& & TFormatEtc = tagFORMATETC;& FORMATETC = TFormatE&& tagSTGMEDIUM = record&&& tymed: L&&& case Integer of&&&&& 0: (hBitmap: HB unkForRelease: Pointer{IUnknown});&&&&& 1: (hMetaFilePict: THandle);&&&&& 2: (hEnhMetaFile: THandle);&&&&& 3: (hGlobal: HGlobal);&&&&& 4: (lpszFileName: POleStr);&&&&& 5: (stm: Pointer{IStream});&&&&& 6: (stg: Pointer{IStorage});& & TStgMedium = tagSTGMEDIUM;& STGMEDIUM = TStgM&&& &IDataObjectIDataObjectppDORetDelphiIDataObjectIDataObjectIDataObjectQueryGetDataGetDataabstract&WpDOFDataSourceQueryGetDataS_OKGetDataFDataSourcemediumoutMSHTMLppDORetGetDatamedium&type& TDataObject = class(TInterfacedObject, IDataObject)& private&&& FDataSource: IDataO&&& function GetGlobalData(dataFormat: DWORD):& publicconstructor Create(pDO: IDataObject);{ 接口未实现部分全部声明为abstract即可 }function DAdvise(const formatetc: TFormatE advf: L&&&& &const advSink: IAdviseS &&&&& out dwConnection: Longint): HRfunction DUnadvise(dwConnection: Longint): HRfunction EnumDAdvise(out enumAdvise: IEnumStatData): HR&&&&& function EnumFormatEtc(dwDirection: L out enumFormatEtc:&&&&& IEnumFormatEtc): HRfunction GetCanonicalFormatEtc(const formatetc: TFormatE&&&&& out formatetcOut: TFormatEtc): HRfunction GetDataHere(const formatetc: TFormatE out medium: TStgMedium):&&&&& HRfunction GetObjectDescriptor: HGfunction SetData(const formatetc: TFormatE var medium: TStgM&&&&& fRelease: BOOL): HR{ 需要实现的部分 }function GetData(const formatetcIn: TFormatE out medium: TStgMedium): &&&&& HRfunction IsDataAvailable(dataFormat: DWORD): Bfunction QueryGetData(const formatetc: TFormatEtc): HR& &implementation&&constructor TDataObject.Create(pDO: IDataObject);begin& //在初始化过程中保存数据源& FDataSource := pDO;&function TDataObject.GetData(const formatetcIn: TFormatE out medium: TStgMedium): HRvar& s:& hMem: DWORD;& txtPtr: PCbegin& //只处理CF_HTML格式& if formatetcIn.cfFormat = CF_HTML then& begin&&& s := GetGlobalData(formatetcIn.cfFormat);&&& FilterData(s); //过滤数据&&& hMem := GlobalAlloc(GMEM_MOVEABLE, Length(s)); //分配全局内存&&& txtPtr := GlobalLock(hMem);&&& Move(PChar(s)^, txtPtr^, Length(s));&&& GlobalUnlock(hMem);&&&& with medium do&&& begin&&&&& tymed := TYMED_HGLOBAL;& //指定要存储数据的存储格式为全局内存&&&&& hGlobal := hM&&&&& unkForRelease :=& //指定由调用者负责释放内存&&& & & & Result := S_OK;& &//通过此函数取得全局内存中的数据function TDataObject.GetGlobalData(dataFormat: DWORD):var& stgMedium: TStgM& formatEtc: TFormatE& txtPtr: PCbegin& with formatEtc do& begin&&& cfFormat := dataF& //设置数据格式&&& ptd :=&&& dwAspect := DVASPECT_CONTENT;& //指定数据类型为CONTENT&&& lindex := -1;&&& tymed := TYMED_HGLOBAL;& //指定要获取数据的存储格式为全局内存& && //调用源数据的QueryGetData方法来查询指定格式是否存在& if FDataSource.QueryGetData(formatEtc) && S_OK then E&& //调用源数据的GetData方法取得数据,并存放在stgMedium结构中& OleCheck(FDataSource.GetData(formatEtc, stgMedium));& with stgMedium do& begin&&& txtPtr := GlobalLock(hGlobal); //从hGlobal全局句柄中获取数据&&& Result := StrPas(txtPtr);&&& GlobalUnlock(hGlobal);&&&& if unkForRelease = nil then&&&&& ReleaseStgMedium(stgMedium); //调用者负责释放内存& &function TDataObject.IsDataAvailable(dataFormat: DWORD): Bbegin& //MFC文档:尽管可以通过调用IDataObject的EnumFormatEtc方法来枚举格式类型, & //但通过剪贴板查询的效率更高,也更有效& Result := IsClipboardFormatAvailable(dataFormat)&function TDataObject.QueryGetData(const formatetc: TFormatEtc): HRbegin& //在这里可以定制哪些类型的数据将被过滤& Result := S_OK;&TWebEditorwbEditorOnPaste&function TForm1.wbEditorPaste(const pDO: IDataO &&&&&&&&&&&&&&&&&&&&&&&&&&&&& var ppDORet: IDataObject): HRESULT;begin& ppDoRet := TDataObject.Create(pDO);& Result := S_OK;&感谢在编辑器的实现过程中,作者参考了网络上很多技术文章和网友的智慧,由于行文仓促,没有记住来源,无法在此一一列出,仅此向他们表示深深的谢意。希望此文能起到画龙点睛的作用,给更多的程序员新手们提供学习的捷径。(2005年新年 全文完)
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:56263次
排名:千里之外
原创:37篇
转载:10篇
评论:12条
(1)(3)(5)(1)(28)(1)(1)(2)(2)(1)(2)

我要回帖

更多关于 公式编辑器在哪里 的文章

 

随机推荐