📄 unitmain.~pas
字号:
n21.Checked:=not n21.Checked;
If n21.Checked then
SetWindowPos( FrmMain.Handle,Hwnd_Topmost,0,0,0,0,
(SWP_NOMOVE Or SWP_NOSIZE))
else
SetWindowPos( FrmMain.Handle,Hwnd_Notopmost,0,0,0,0,
(SWP_NOMOVE Or SWP_NOSIZE));
end;
procedure TFrmMain.FormResize(Sender: TObject);
var hr :thandle;
begin
{hr:=createroundrectrgn(0,0,width,height,20,20);//定义园角矩形(win API函数)
setwindowrgn(handle,hr,true); //设置园角窗口 }
end;
{------------------------star屏幕取词部分--------------------------}
// 以字母'b'开头的第一个英文单词(不区分大小写)
//如:在English.dic中的对应位置为:第5931条记录值.
function GetFirstEnd(str:char):integer;
begin
result:=0;
case str of
'a':result:=0;
'b':result:=5931;
'c':result:=9187;
'd':result:=15466;
'e':result:=20212;
'f':result:=23578;
'g':result:=26590;
'h':result:=28714;
'i':result:=31414;
'j':result:=34592;
'k':result:=35078;
'l':result:=35812;
'm':result:=38245;
'n':result:=43039;
'o':result:=44834;
'p':result:=46891;
'q':result:=52546;
'r':result:=53026;
's':result:=56523;
't':result:=64482;
'u':result:=68599;
'v':result:=70852;
'w':result:=72017;
'x':result:=73603;
'y':result:=73686;
'z':result:=73829;
end;
end;
Function GetCX(strtem:char):string;
begin
result:='';
if strtem='a' then
result:='adj. ';
if strtem='d' then
result:='adv. ';
if strtem='g' then
result:='art. ';
if strtem='j' then
result:='prep. ';
if strtem='n' then
result:='n. ';
if strtem='v' then
result:='v. ';
if strtem='c' then
result:='conj. ';
end;
procedure TFrmMain.Timer_GetWordTimer(Sender: TObject);
var
ptMousePos : TPOINT;
begin
ptMousePos.x := 0;
ptMousePos.y := 0;
if (GetCursorPos(ptMousePos)) then begin
NHD_BeginGetWord(ptMousePos);
end;
end;
procedure TFrmMain.GetWordFromBuffer(var message: tmessage);
var words,cnStr,tmp:String;
tmppos:integer;
begin
(*从缓冲区里面取词*)
// ZeroMemory(@qcbuffer,sizeof(qcbuffer)); (*清空内存*)
if BL_GetText32(g_TextBuffer,sizeof(g_TextBuffer),@G_Rect)>0 then
begin
if strpas(g_TextBuffer)<>'' then
begin
words :=strpas(g_TextBuffer);
tmppos:= pos(' ',words);
if tmppos>0 then words:=copy(words,0,tmppos-1);
if words<>oldGetWord then
begin
oldGetWord:=words;
Getcn(words);
end;
end;
end;
end;
procedure TFrmMain.Getcn(Searchname:String);
var // ListItem: TListItem;
cnStr,cnstr1,cnStr2,Cxstrtem,tmpResult:string;
//找到的中文解释,找到的中文解释1,找到的中文解释2,找到的单词词性,查找的单词
SearchEnd,SearchFirst,i,k:integer;
//查找的单词的结束位置,查找的单词的开始位置
CxStr,Searchtemstr,cnjs:char;
//找到单词的临时词性,查找的单词的首字母,中文解释文件的字符变量
function GetcnStr(EN:TEnglish):String ;
var
ResultComm,Result1,Result2,tmpStr:String;
tmpStr1:char;
begin
Seek(cnFile,En.offset);
Read(cnFile,tmpStr1);
tmpStr:='';
repeat
En.offset:=En.offset+1;
tmpStr:=tmpStr+tmpStr1;
Seek(cnFile,En.offset);
Read(cnFile,tmpStr1);
until pos('#',tmpStr1)>0 ;
k:=pos('$',tmpStr);
if k > 0 then
begin
Result1:=copy(tmpStr,1,k-1);
Result2:=copy(tmpStr,k+1,length(tmpStr)-k);
end else Result:=GetCX(En.cx[1])+tmpStr;
if En.cx[2]<>'' then
begin
Result:=GetCX(En.cx[1])+Result1+GetCX(En.cx[2])+ Result2;
end;
end;
begin
l_word.Caption:=Searchname;
l_comm.Caption:='';
if SearchName='' then exit;
SearchName:=Lowercase(SearchName);
Searchtemstr:=SearchName[1];
SearchFirst:=GetFirstEnd(Searchtemstr);
if Searchtemstr='z' then
SearchEnd:=FileSize(EnglishFile)-1
else
SearchEnd :=GetFirstEnd(Chr(ord(Searchtemstr)+1));
if SearchFirst>SearchEnd then exit;
for I:=SearchFirst to SearchEnd do
begin
Seek(EnglishFile,I);
Read(EnglishFile,En);
if POS(SearchName,Lowercase(En.English))=1 then
// if SearchName=Lowercase(En.English) then
begin
l_word.Caption :=En.english;
l_comm.Caption:=GetcnStr(EN);
allResize;
exit;
end;
end;
l_word.Width:=l_word.Width*2;
allResize;
end;
{------------------------end屏幕取词部分--------------------------}
procedure TFrmMain.N22Click(Sender: TObject);
begin
n22.Checked:= not n22.Checked;
Timer_GetWord.Enabled:=n22.Checked;
if n22.Checked then
begin
n5.Click;
l_yb.Caption:='';
allResize;
end else begin
n5.Click;
end;
end;
procedure TFrmMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
CloseFile(EnglishFile);
CloseFile(cnFile);
end;
procedure TFrmMain.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var magicx,magicy:integer;
begin
//以下用于不会出现拖动虚框。
//检查鼠标左键是否按下
if hiword(getasynckeystate(vk_lbutton)) > 0 then
begin
magicx:=left + x - lastx;
magicy:=top + y - lasty;
if (magicx < 20) and (magicx <> 0) then magicx:=0; // 设定移动到左边 10
if (magicy < 20) and (magicy <> 0) then magicy:=0;
//重设窗口位置
SetBounds(magicx, magicy, Width, Height);
if Assigned(FrmPosSet) then
begin
FrmPosSet.Left:=FrmMain.Left;
FrmPosSet.Top:=FrmMain.Top+FrmMain.Height;
end;
if Assigned(FrmWordList) then
begin
FrmWordList.Left:=FrmMain.Left;
FrmWordList.Top:=FrmMain.Top+FrmMain.Height;
end;
if Assigned(FrmSet) then
begin
FrmSet.Left:=FrmMain.Left;
FrmSet.Top:=FrmMain.Top+FrmMain.Height;
end;
end;
end;
//书签点击事件。
procedure TFrmMain.newitemclick(sender:Tobject);
var BMString,BMdict,BMIndex:String;
ta,tb:integer;
begin
// Messagebox(handle,Pchar((sender as TMenuItem).Caption),'提示',MB_OK++ MB_IconInformation);
BMString:=(sender as TMenuItem).Caption;
ta:=pos('/',BMString);
tb:=pos('-',BMString);
BMdict:=trim(copy(BMString,0,ta-1));
BMIndex:=trim(copy(BMString,ta+1,tb-ta-1));
RSrangStar:=strtoint(BMIndex);
RSrangEnd:=StrToInt(trim(copy(BMString,tb+1,length(BMString)-tb)));
ReLoadDict(BMdict);
RSIndex:=strtoint(BMIndex)-1;
// Messagebox(handle,'test','提示',MB_OK++ MB_IconInformation);
end;
function TFrmMain.LoadBookMark():Boolean ;
var
pathbm,BMString,StrCaption:String;
bmfp:textfile;
NewItem : TMenuItem;
i:integer;
begin
i:= MenuBM.Count;
if MenuBM.Count>3 then
begin
for i:=3 to menuBM.Count-1 do
MenuBM.Delete(3);
end;
pathbm:= dictdb.path+'\mindict.bm';
assignfile(bmfp, pathbm);
if FileExists(pathbm) then
begin
reset(bmfp);
while not eof(bmfp) do begin
readln(bmfp,BMString);
NewItem := TMenuItem.Create(self);
NewItem.Caption:=BMString;
NewItem.OnClick:=newitemclick;
menuBm.Add(newitem);
end;
closefile(bmfp);
Result:=True;
end else Result:=False;
end;
procedure TFrmMain.N30Click(Sender: TObject);
var
pathbm,str:String;
bmfp:textfile;
NewItem : TMenuItem;
begin
pathbm:= dictdb.path+'\mindict.bm';
assignfile(bmfp, pathbm);
if FileExists(pathbm) then reset(bmfp)
else rewrite( bmfp );
str:=CurDict+'/'+inttostr(Rsindex)+'-'+IntToStr(RSCount);
append(bmfp);
writeln(bmfp,str);
closefile(bmfp);
NewItem := TMenuItem.Create(self);
NewItem.Caption:=str;
NewItem.OnClick:=newitemclick;
menuBm.Add(newitem);
end;
procedure TFrmMain.N29Click(Sender: TObject);
begin
if not Assigned(frmSET) then
begin
frmSET:=TfrmSET.Create(Application);
frmSET.Show;
frmset.PageControl1.ActivePage:=FrmSet.PageControl1.Pages[2];
end;
end;
procedure TFrmMain.N32Click(Sender: TObject);
begin
n32.Checked:=not n32.Checked;
end;
procedure TFrmMain.N33Click(Sender: TObject);
begin
if not Assigned(frmSET) then
begin
frmSET:=TfrmSET.Create(Application);
frmSET.Show;
frmset.PageControl1.ActivePage:=FrmSet.PageControl1.Pages[0];
FrmSet.PageControl1.Pages[1].Visible:=False;
FrmSet.PageControl1.Pages[2].Visible:=False;
end;
end;
procedure TFrmMain.N34Click(Sender: TObject);
var i,Lstar,LEnd:integer;
tmpStr:String;
begin
if not Assigned(FrmWordList) then
begin
FrmWordList:=TFrmWordList.Create(Application);
if n32.Checked and (RSrangStar<RSrangEnd) then
begin
if RSrangStar>0 then Lstar:=RSrangStar-1 else Lstar:=0;
LEnd:=RSrangEnd-1;
end else begin
Lstar:=0;LEnd:=wordrs.Count-1;
end;
for i:=Lstar to LEnd do
begin
FrmWordList.ListBox1.Items.Add(inttostr(i+1)+': '+WordRS[i]+' '+CommRS[i]);
end;
end;
FrmWordList.Caption:='播放列表---'+CurDict;
FrmWordList.Top:=FrmMain.Top+FrmMain.Height;
FrmWordList.left:=Frmmain.left;
FrmWordList.Show;
end;
procedure TFrmMain.l_WordClick(Sender: TObject);
begin
if Assigned(SpeechEx) then SpeechEx.Speak(trim(l_Word.Caption));
end;
{ ================star鼠标跟随(hook 鼠标)=====================}
function hookproc(icode:integer;wparam:wparam;lparam:lparam):lresult;stdcall;
var
evtmsg:teventmsg;
begin
evtmsg:=peventmsg(lparam)^;
frmmain.Left:=mouse.CursorPos.X+20; ///////这里被改动了,你也可以改的更精确。
frmmain.Top:=mouse.CursorPos.Y+20; ///////
if evtmsg.message=WM_RBUTTONUP then Frmmain.n35.Click;
end;
procedure TFrmMain.N35Click(Sender: TObject);
begin
n35.Checked:= not n35.Checked;
if n35.Checked then
Hook:=setwindowshookex(WH_JOURNALRECORD,hookproc,hinstance,0)
else
unhookwindowshookex(hook);
FrmMain.Top:=0;
FrmMain.Left:=(screen.Width - width-55) div 2;
end;
{ ================end鼠标跟随(hook 鼠标)=====================}
procedure TFrmMain.N36Click(Sender: TObject);
begin
main.show;
end;
procedure TFrmMain.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
Timer1.Enabled:= not Timer1.Enabled;
n5.checked:= not Timer1.Enabled;
end;
procedure TFrmMain.Panel1DockOver(Sender: TObject; Source: TDragDockObject;
X, Y: Integer; State: TDragState; var Accept: Boolean);
begin
Timer1.Enabled:= not Timer1.Enabled;
n5.checked:= not Timer1.Enabled;
end;
procedure TFrmMain.Panel1Enter(Sender: TObject);
begin
Timer1.Enabled:= not Timer1.Enabled;
n5.checked:= not Timer1.Enabled;
end;
procedure TFrmMain.Panel1Click(Sender: TObject);
begin Timer1.Enabled:= not Timer1.Enabled;
n5.checked:= not Timer1.Enabled;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -