DAMAVAND
پنج شنبه 16 اردیبهشت 1389, 21:29 عصر
دوستان حتما ديديد که وقتي توي ويندوز يک متن رو انتخاب ميکنيد بعد با کليک راست روي متن ميتونيد از منوي باز شده گزينه کپي رو انتخاب کنيد  به اين صورت متن انتخاب شده در Clipboard کپي ميشه. حالا چطوري ميشه يک گزينه به منوي Right Click اضافه کرد که مثلا با انتخاب اون ,متن به برنامه ما فرستاده بشه  ? دو مشکل وجود داره اضافه کردن يک آيتم جديد به Right Click که از رجيستري قابل حله ولي براي قسمت دوم و اينکه چطوري متن رو به برنامه خودمون بفرستيم هيچ ايده اي ندارم .....
اگه ديده باشيد بعضي از مترجم ها اين قابليت رو دارند که کافيه متن رو انتخاب کنيد بعد Right Click کنيد يک گزينه هست که با زدن اون متن به مترجم فرستاده ميشه  .
با تشکر.
hojjatcroos
جمعه 17 اردیبهشت 1389, 11:24 صبح
سلام منو برنامت رو با Shell Plus اضافه کن خیلی بهتره
برای کپی متن هم باز هم باید مزاحم پیغام ها بشیم
EM_GETSEL 
نقطه ی شروع و پایان متن انتخاب شده رو بر می گردونه
EM_SETSEL 
می تونید یک قسمت از متن رو انتخاب کنید
wm_Copy هم که برای کپی متن
شما اول هندل اون قسمتی که متن کاربر در اون قرار داره رو به دست بیار بعد کلاسش رو تشخیص بده اگر TEdit بود از بالا استفاده کن اگر نبود کل متن رو بخون
یک کد میزارم خیلی وقت پیش توی سایت دیده بودمش
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls,shellapi;
type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Timer1: TTimer;
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    procedure ShowHwndAndClassName(CrPos: TPoint) ;
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
{$R *.dfm}
  procedure TForm1.ShowHwndAndClassName(CrPos: TPoint) ;
var
   hWnd: THandle;
   aName,
   Text : array [0..255] of char;
begin
   hWnd := WindowFromPoint(CrPos) ;
   Label1.Caption := 'Handle : ' + IntToStr(hWnd) ;
   if boolean(GetClassName(hWnd, aName, 256)) then
     Label2.Caption := 'ClassName : ' + string(aName)
   else
     Label2.Caption := 'ClassName : not found';
   SendMessage(hWnd, WM_GETTEXT,
               SizeOf(Text), integer(@Text)) ;
   Label3.Caption := 'Text :' + Text;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
   Form1.FormStyle := fsStayOnTop;
  // Timer1.Interval := 50;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var
   rPos: TPoint;
begin
   if boolean(GetCursorPos(rPos))
   then ShowHwndAndClassName(rPos) ;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
end;
end.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.