PDA

View Full Version : drag & drop خودکار



omid96yavari
دوشنبه 25 مرداد 1395, 13:39 عصر
سلام دوستان ببخشید من خیلی جستجو کردم ولی پاسخی برای سوال خودم پیدا نکردم.
من درحال ساخت یک برنامه به نوعی اسپمر هستم، یک تست انسان شناسی ساده روش اینکه چطوری حلش کنم رو بلدم فقط دوتا سوال دارم.

اول اینکه این تست انسان شناسی نیاز به درگ دراپ داره توی فایل ضمیمه عکسش رو گذاشتم باید تصویر رو با درگ دراپ تکمیل کنیم
خب من چطوری میتونم درگ دراپ رو خارج از محیط فرم انجام بدم؟ از هر روشی باشه اشکال api ویندوز یا روش دیگه
اگر میشه سورسی یا تکه کدی بزارید تا مشکلم حل بشه.

سوال دوم اینکه چطوری میتونم رنگ یک پیکسل از مانیتور رو خارج از فرم تشخیص بدم خیلی ممنون میشم کمکم کنید
زبان برنامه نویسی هم زیاد برام ملاک نیست سی شارپ یا vb
فقط کار انجام بشه ....


141988

mrprestige
دوشنبه 25 مرداد 1395, 20:19 عصر
سلام دوست من وقتت بخیر ، دوست عزیز من برای شما برای سوال اول و دومتون دوتا مثال میزنم در حدی که راه رو بهتون نشون بدم پیمودن راه با شما .

جواب سوال اولتون : توی این مثالی که براتون زدم شما اسم فایل یا عکس رو درگ میکنید روی تکس باکس و اون تکس باکس هم عکس مورد نظرتون در picboxنمایش میده

در Form_Load اینو بنویس

this.Allowdrop=true;
this.DragEnter+=DragEventHandler(Form1_DragEnter);
this.DragDrop+=DragDropHandler(Form1_DragDrop);

داخل رویداد Form1_DragEnter اینو بنویس

if(e.Data.GetDataPresent(DataFormats.fileDrop,fals e))
e.Effect=DragDropEffect.All;

داخل رویداد Form1_DragDrop اینو بنویس

string[] Filelist=e.Data.GetData(DataFormats.fileDrop) as string[];
Foreach(string s in Fillist)
Textbox.text+=string .format("{0}{1}",s,Enviroment.newLine);






و در رویداد Text_Changed مربوط به تکست باکس 1

Picturebox1.Image=Image.fromfile(Textbox1.text);

حالا در جواب سوال دومت عرض کنم این مثالی که برات زدم مقدار ARGB پیکسل صفحه مانیتورتون رو بهتون نمایش میده بصورت جداگانه
اول یک کنترل تایمر روی صفحه ایجاد کنید بعد این متد static رو در کلاس Form بنویس

static Color GetPixel(Point position)
{
using (var bitmap = new Bitmap(1, 1))
{
using (var graphics = Graphics.FromImage(bitmap))
{
graphics.CopyFromScreen(position, new Point(0, 0), new Size(1, 1));
}
return bitmap.GetPixel(0, 0);
}
}



داخل Form_load اینطوری بنویس

timer1.Interval = 50;
timer1.Tick +=new EventHandler(Timer1_Tick);
timer1.Start();


یادت باشه بعد از اینکه علامت+= رو گذاشتی بعد دو بار دکمه Tab رو بزنی تا رویداد مربوطه ایجاد بشه حالا در رویداد Timer1_Tick وارد شو و این رو بنویس

textBox1.Text = GetPixel(Cursor.Position).ToString();

بازم میگم اگه دیدی جواب هایی که دادم عین جواب های مورد نظرت نبود برای اینه که من خواستم فقط مسیر رو بهتون نشون بدم

پیروز و موفق باشید