??xml version="1.0" encoding="utf-8" standalone="yes"?>
2>从Actioncȝ承的Action重写runҎ(gu),q是Action执行时候运行的代码.
3>内置Action 都实CIWorkbenchAction,用ActionFactory.QUIT.create获得Action.
3>相比Delphi,JFace的ActioncL?把他攑֜menubarManager?他就变成了一个菜?把他攑֜ ToolbarManager上就变成了工具图?delphi里面一个菜单是一个menuItem + Actionl成?工具栏是Button + Actionl成?
2. 菜单:
2>menubarManager.add(Action).q样添加了一个子菜单.
3>fillMenuBar(IMenuManager menuBar) Ҏ(gu)传进来的menuBar是最端的菜单面?相当于delphi里面d了一个XPMenu控g,会在form上增加一条菜单面?menuBar.add(menubarManager),q样d了一U菜?
3. 工具?/strong>
1>重写fillCoolBar(ICoolBarManager coolBar) 可以d工具?
2>创徏一个ToolbarManager实例.是一个工h.可以创徏多个.
3>ToolbarManager.add(Action).q样是d了一个工具图?
4>coolBar.add(ToolbarManager),是在界面上d一块工h,可以增加多块工具?
1>可以从扩展点配置一个Action: 从plugin.xml的Extension标签,点add,扑ևviews
2>也可以从ViewPartl承一个类.createPartControlҎ(gu)讄一些初始化工作.
3>View可以理解为Delphi的childwindow,子窗?可以攑U控?可以关闭,最大化,最化.
4>View的显C是依赖一个透视囄.透视囑֏以理解ؓ不同的View或Editor的组?叫透视?
5>重写Perspective默认透视图createInitialLayoutҎ(gu),q用layout.addViewdq显CZ个视?当加载默认视图时会加载该ViewH口.
5.Editor~辑?/strong>
1>EditorcdCISaveablePart接口.q绑定了内置的Save Action,SaveAsAction
2>当点击菜单中的保?Action时会自动调用doSaveҎ(gu).只要重写doSaveҎ(gu)保存当前的文件即可实C?
3>Editor依赖了一个EditorInputc?EditorInputcL理解为像Struts中的ActionFormcM?用来传递参数给Editor.
4>如果不是需求这U集成编辑器的功?一般用View可以满,但是如像QQ聊天q样的编辑框的时?用Editor开发应该是一个不错的选择.delphi里面像发送消息程?采用了一个HtmlEdit控g才解决了q个问题.
5>EditorH口可以用window.getActivePage.openEditor(input, TxtEditor.ID)打开.
]]>
查看了代?执行了一个存储过E主要执行了Insert语句. 把几个Insert语句的相兛_D늚长度一Ҏ(gu)发现有长度不相符,更改相关的长?问题搞定.
]]>
dwStackSize: DWORD;
lpStartAddress: TFNThreadStartRoutine;
lpParameter: Pointer;
dwCreationFlags: DWORD;
var lpThreadId: DWORD): THandle; stdcall;
其中lpStartAddressQlpParameterQlpThreadId三个参数是必ȝ?br /> lpStartAddress参数指向的是U程执行体ThreadProc的开始地址Q?br /> lpParameter指针cdQ线E的传入参数Q我们如果想l线E执行体ThreadProc传递我们自q数据Q?br /> p通过它了Q?br /> lpThreadIdq回创徏U程ID,q是我们控制U程必须的?/strong>
unit CreateThreadFrm;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
MyParam = record //U程的时候传?br />
str:string;
end;
PMyParam=^MyParam; //Recordcd指针
procedure CallAgent(msg: PMyParam);stdcall; //q个Ҏ(gu)声明Z么要攑֜q里可?攑֜cTForm1里面׃?
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{
发送消息给消息弹出代理E序 POPAgent.exe
DDZ
2010q??8?4:44:36
}
procedure TForm1.Button1Click(Sender: TObject);
var
PMyPara:PMyParam;
MyPara:MyParam;
Cthread: THandle; //U程句柄
Tid: DWord;
begin
new(PMyPara) ; //另外q里q有一个问?q里只New开辟类?q没有FreeMem会不会漏?br />
PMyPara.str := 'h太低发出?;
Cthread:=CreateThread(nil,0,@CallAgent,PMyPara,0,Tid); //创徏一个线E,同时调用U程函数
end;
procedure CallAgent(msg: PMyParam);stdcall;
var
HlAgent:HWND;
ds:TCopyDatastruct;
AgentMsg:string;
begin
//showmessage(msg^.str);
AgentMsg := msg.str;
//Application.ProcessMessages;
ds.cbData := Length(AgentMsg)+1;
GetMem(ds.lpData,ds.cbData); //分配内存
StrCopy(ds.lpData,PChar(AgentMsg)); //复制值到指针
HlAgent :=FindWindow('TmsgpopMainCaller','调用?);
if HlAgent <> 0 then
begin
SendMessage(HlAgent,WM_COPYDATA,0,Cardinal(@ds));
end;
FreeMem(ds.lpData); //释放内存 q里要释? 上面的Record记录要不要释??我这样写会报错的
end;
end.
看这个例子可以参?nbsp; CreateThread 函数?U程间的通信Ҏ(gu).q两个技术点.
procedure TMainForm.CallAgent(msg: string);
var
HlAgent:HWND;
ds:TCopyDatastruct; //定义一个TCopyDatastructl构体变?br />
begin
AgentMsg := msg;
ds.cbData := Length(msg)+1; //l构体的W一个元? 长度cbData
GetMem(ds.lpData,ds.cbData); //分配内存,l构体的W二个参? 数据的指针lpDATA
StrCopy(ds.lpData,PChar(msg)); //复制值到l构指针
HlAgent :=FindWindow('TmsgpopMainCaller','调用?); //查找目标H体的Handle
if HlAgent <> 0 then
begin
//ShowMessage('? + IntToStr(Cardinal(@ds)));
SendMessage(HlAgent,WM_COPYDATA,0,Cardinal(@ds)); //发送WM_COPYDATA消息,q带上参?@ds
end;
FreeMem(ds.lpData); //释放数据内存
end;
2.
接收方程?
public
procedure MyMessage(var m:TWmCopyData);message WM_CopyData; //定义一个消息响应过E?q传入一个TWmCopyData的参?br />
...
procedure TmsgpopMainCaller.MyMessage(var m: TWmCopyData); //实现响应
var
msg:string;
begin
msg :=StrPas(m.CopyDataStruct^.lpData); //获取参数数据
ShowMessageForm := TShowMessageForm.Create(self,msg); //处理
end;