ايران ويج

نسخه‌ی کامل: کار این کد چیه؟
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
صفحه‌ها: 1 2
سلام.
کسی میدونه این دستور چیکار میکنه؟
PaintTo(GetDc(F Associate.Handle),0,0);q
این تابع میاد کنترل مورد نظر شما رو در dc یا همون device context کنترلی که هندلشو با getdc بدست اوردین در مختصات XوY نمایش میده
مثلا شما میخواهین وقتی رو button1 کلیک کردین این باتن در مختصات x=20 و y=30 به نمایش در بیاد

کد:
Button1.PaintTo(GetDC(Handle),20,30);

به جای handle میتونین handle مربوط به هر کنترلی رو قرار بدین تا تصویر button در محدوده داخلی اون کنترل به نمایش دربیاد
خیلی ممنون دوست عزیز.
1- معادل این دستور در C# رو میدونین؟
2- من میخوام یه فریم از فریم های یک فایل فلش رو نشون بدم (gotofram) بعد با همین دستور () هندلشو بگیرم و با دوتا حلقه پردازشش کنم. می شه کمک کنین؟
معادل دستورشو تو #c نمیدونم
جرا حالا میخواهی این کارو انجام بدی؟
دارم یه برنامه برا تابلوروانم مینویسم تا بتونه فلش رو نشون بده.
برا این کار باید فریم ها رو تک تک نشون بدم و بعد با دستور CanvasPixel مقدارش رو بخونم و با دوتا حلقه (برا مختصات x,y) کدهاشو در بیارم.
اگه شما راه بهتر و سریعتری میشناسن لطفاً راهنمایی کنین.
فرض کنیم من با دستور ShockwaveFlash1.PaintTo(GetDC(Handle),0,0);q هندل یکی از فریم ها رو گرفتم و نشون دادم.
حالا چطور میشه با دستور CanvasPixel این فریمی که نشون داده شده رو پردازش کرد؟
کد زیر میتونه همه چی رو براتون روشن کنه

کد:
procedure TForm1.Button2Click(Sender: TObject);
var
  bitmap:TBitmap;
  i,j:Integer;
begin
  // ijade yek ax bmp khali
bitmap:=TBitmap.Create;
try
bitmap.Width:=ShockwaveFlash1.Width;
bitmap.Height:=ShockwaveFlash1.Height;
// copy kardane dc flash dar bmp
bitmap.Canvas.CopyRect(bitmap.Canvas.ClipRect,Canvas,ShockwaveFlash1.BoundsRect);
//2 halghe for baraye pardazesh tool va arz
for i:=1 to bitmap.Width do
begin
  for j:=1 to bitmap.Height do
  begin
  // mahale gharar dadane code pardazesh
  if bitmap.Canvas.Pixels[i,j]=clred then
  //do somthing
  end;
end;

//bitmap.SaveToFile('c:\sam.bmp');
finally
  //azad kardane hafee bitmap
  bitmap.Free;
end;

end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if OpenDialog1.Execute then
ShockwaveFlash1.LoadMovie(0,OpenDialog1.FileName);
end;

قسمت پردازش از 2 حلقه for تو در تو تشکیل شده که اولی درازا یا X و دومی پهنا یا Y رو پردازش می کنه تابع .Canvas.Pixels شما باید مقدار X و Y رو بهش پاس بدین که XوY مختصات پیکسل مورد نظر شماست و خروجی این تابع یک مقدار از نوع Tcolor یا همون رنگ هست
عالی بود، همونی بود که می خواستم.
فقط یه مشکل داره.
وقتی فرم رو minimize میکنم (در کل هنگامی که فایل فلش دیده نشه) نمیتونه عکس بگیره.
آیا میشه این مشکل رو حل کرد؟
شما برای چی از minimize استفاده میکنین؟
ایا میخواهید موقع اجرای عملیات توسط برنامه فورم دیده نشه؟
اگه این طوره میتونین از خاصیت
کد:
form1.hide;
و

کد:
form1.show;
استفاده کنید
البته برای کنترل مخفی و ظاهر شدن فورم برای برنامتون یه hotkey تعریف کنین تا بتونین بهش دسترسی داشته باشین

یا از کامپوننت F-IN-BOX که قابلیتهای فوقالعاده ای برای کار با فلش در اختیارتون میزاره استفاده کنین
ممنون.
جسارتاً میشه بیشتر توضیح بدید که چطور hotkey تعریف کنم. آخه من تازه کارم!!!

من قبلاً زیاد دنبال کامپوننت F-IN-BOX بودم اما متاسفانه رجیستر شدش رو پیدا نکردم.
اگه شما دارین بذارین، هزینش هم مهم نیست.
سلام دوست عزیز
اینجا رو یه نگاه بنداز:
کد php:
for k:=0 to ShockwaveFlash1.TotalFrames do
begin
ShockwaveFlash1
.GotoFrame(k);
ShockwaveFlash1.PaintTo(GetDC(Handle),0,0);
for 
x:=0 to ShockwaveFlash1width do
for 
y:=0 to ShockwaveFlash1.height do
begin
pixel
:=Canvas.Pixels[x,y]; 
راحت کار می کنه.
مشکل اینجاست که فرمی که داره روی اون PaintTo انجام میشه اگه زیر فرم دیگه ای بره یا minimize بشه یا ... دیگه نمیشه درست پیکسل هاشو خوند. یعنی برا این کار حتماً باید صفحه دیده بشه که این بده. آیا راهی هست که بدون اینکه این عملیات دیده بشه این کارا رو کرد. راستی اگه اینا رو کامپوننت کنم توی سرعت کار چقدر تأثیر گذاره؟
اگه راهی بنظرتون می رسه لطفا راهنمایی کنین.
صفحه‌ها: 1 2