ورود

View Full Version : حرفه ای: ثبت تصویر دور موس



salam007
دوشنبه 16 دی 1392, 13:13 عصر
سلام دوستان
آیا در دلفی میشود تصویر جایی رو که موس کلیک میکند را ثبت کرد ؟ مثلا جایی که کاربر کلیک میکند حدود 100px از هر طرف کروسر موس رو ذخیره نمود نه تمام صفحه نمایش رو ؟

یوسف زالی
دوشنبه 16 دی 1392, 14:32 عصر
سلام. بله با تابع BitBlt. می تونید تمام اون قسمت رو هم بگیرید. تنها کار اینه که هندل پنجره زیر ماوس رو داشته باشید (یا بدست بیارید)

salam007
دوشنبه 16 دی 1392, 14:37 عصر
سلام. بله با تابع BitBlt. می تونید تمام اون قسمت رو هم بگیرید. تنها کار اینه که هندل پنجره زیر ماوس رو داشته باشید (یا بدست بیارید)

ممنون امکان یک نمونه کد برای راهنمایی واسم بگذارید ؟ من زیاد حرفه ای نیستم

یوسف زالی
دوشنبه 16 دی 1392, 15:41 عصر
باید یک عدد ApplicationEvents روی فرم اصلی بگذارید و در رویداد OnMessage هنگام وقوع مسیج کلیک کارهای لازم رو انجام بدید.
با استفاده از تابعی مثل ControlAtPos می تونید کنترل فعال رو بدست بیارید و اگر لازم بود با GetParentForm هم فرم فعال رو.
با دادن هندل به تابع BitBlt تصویر شما گرفته خواهد شد.
موفق باشید.

Ananas
دوشنبه 16 دی 1392, 16:35 عصر
procedure TForm1.Timer1Timer(Sender: TObject);
var
cursor_pos : TPoint;
dc : HDC;
dsktp_hwnd : HWND;
begin
dsktp_hwnd := GetDesktopWindow();
dc := GetDC(dsktp_hwnd);
//-----------------------
GetCursorPos(cursor_pos);
BitBlt(
Self.Canvas.Handle, 0, 0, 200, 200,
dc, cursor_pos.X - 100, cursor_pos.Y - 100, SRCCOPY);
//-----------------------
ReleaseDC(dsktp_hwnd, dc)
end;

salam007
دوشنبه 16 دی 1392, 17:31 عصر
واقعا ممنونم ازتون مخصوصا دوست عزیزم آناناس .
فقط میخاستم ببنیم چطوری محدوده پازیشن این عکس رو بیشتر و کمتر کنم و اون رو چطوری ذخیره کنم با توجه به اینکه اصلا نمیدونم چطوری نمایش داده میشه تو فرم ، امکان داره که فقط موقع کلیک کردن عکس بگیره و تو تایمر نباشه حتی وقتی برنامه مینیمایز هم هست کار کنه

firststep
دوشنبه 16 دی 1392, 18:42 عصر
می خواین که تو محیط برنامه خودتون عکس بگیره یا..................

salam007
جمعه 20 دی 1392, 10:23 صبح
از دسکتاپ عکس بگیره و در آدرس مشخصی از هارددیسک ذخیره بشه

Ananas
جمعه 20 دی 1392, 10:56 صبح
یک TBitmap میسازید و سایز اون رو تغییر میدید با تابع TBitmap.setSize به اندازه ی دلخواهتون. بعد تابع BitBlt رو اجرا میکنید به همون شکلی که قبلا نوشتم فقط این با به جای Self.Canvase.Handle هندل Bitmap رو بهش میدید: TBitmap.Canvase.Handle .بعد برای ذخیره کردنش از تابع TBitmap.SaveToFile استفاده کنید. برای تغییر ناحیه ای که میخواید ازش تصویر بگیرید هم کافیه اعداد 100 و 200 ای که بنده تو کدم نوشتم رو تغییر بدید. در واقع دو عدد اول که 0و 0 نوشتم مکان شروع blit کردن در تصویر مقصد هستند و دو عدد بعدی طول و عرض blit که من 200و 200 نوشتم و دو عدد آخر هم که مشخص کننده ی مکان شروع در تصویر منبع هستند که با مکان موس 100 تا کمتر، تعیین کردم.

salam007
سه شنبه 24 دی 1392, 10:49 صبح
متشکرم داداش

اگر بخوام فقط مواقعی که کلیک میکنم تصویر رو ذخیره کنه حتی موقعی که برنامه مینیمایز هست باید این دستور رو در کجا بنویسم ؟ من در رویداد onclick مینویسم اما کار نمیکنه