⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unitmain.~pas

📁 一个背单词程序。是我闲着没事做的。 给大家看看
💻 ~PAS
📖 第 1 页 / 共 3 页
字号:
    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 + -