PDA

View Full Version : انتقال text به برنامه با Right Click



DAMAVAND
پنج شنبه 16 اردیبهشت 1389, 20:29 عصر
دوستان حتما ديديد که وقتي توي ويندوز يک متن رو انتخاب ميکنيد بعد با کليک راست روي متن ميتونيد از منوي باز شده گزينه کپي رو انتخاب کنيد به اين صورت متن انتخاب شده در Clipboard کپي ميشه. حالا چطوري ميشه يک گزينه به منوي Right Click اضافه کرد که مثلا با انتخاب اون ,متن به برنامه ما فرستاده بشه ? دو مشکل وجود داره اضافه کردن يک آيتم جديد به Right Click که از رجيستري قابل حله ولي براي قسمت دوم و اينکه چطوري متن رو به برنامه خودمون بفرستيم هيچ ايده اي ندارم .....
اگه ديده باشيد بعضي از مترجم ها اين قابليت رو دارند که کافيه متن رو انتخاب کنيد بعد Right Click کنيد يک گزينه هست که با زدن اون متن به مترجم فرستاده ميشه .
با تشکر.

hojjatcroos
جمعه 17 اردیبهشت 1389, 10: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.