PDA

View Full Version : چجوری میشه قیافه الان منیتور رو بدست آورد



Sepidar
یک شنبه 09 فروردین 1383, 21:23 عصر
سلام

البته شاید این سوال بیشتر مربوط به Windows API باشه :?
میخواستم بدونم چجوری میشه قیافه الان منیتور رو بدست آورد؟؟
مثلا چجوری موقع فشرده شدن کلید Print Screen قیافه مونیتور میره
تو Clipboard ؟

البته سوراخ سمبه های TScreen رو هم گشتم اما چیزی گیرم نیومد.

ممنون

SReza1
یک شنبه 09 فروردین 1383, 22:44 عصر
سوالت یه کمی عجیبه!
اگه بخواهی مثلا روی canvas صفحه کار کنی با canvas نمیشه! باید با bitblt کار کنی و hanlde صفحه رو هم با تابع زیر بدست بیاری

createdc("DISPLAY",nil,nil,nil,nil);حالا میتونی با bitblt کار کنی
در مورد clipboard هم خودش تعریف داره
متغیر از نوع TClibboard
همین!

houshmand
یک شنبه 09 فروردین 1383, 23:37 عصر
Procedure DrawOnScreen;
Var DC:HDC;
DesktopCanvas:TCanvas;
begin
DC:=GetDC(0);

try
DesktopCanvas:=TCanvas.Create;
DesktopCanvas.Handle:=DC;
..................
// do some thing
..................
finally
ReleaseDC(0,DC);
DesktopCanvas.Free;
end;
end;

Sepidar
دوشنبه 10 فروردین 1383, 00:20 صبح
مهم همون گیر آوردن DCHandler بود.
از هر دوتون متشکرم :)

Sepidar
دوشنبه 10 فروردین 1383, 12:04 عصر
راستیاتش این سوال رو پرسیدم چون میخواستم برنامه ای
بنویسم که به شکل ذره بین عمل کنه. به این معنی که وقتی
فرم برنامه رو روی desktop حرکت می دیم محتویات زیرش رو
به شکل بزرگتری نمایش بده. (نمی دونم تونستم منظورم رو
برسونم یا نه؟)

حالا مشکلی که پیش اومده اینه:
وقتی که فرم حرکت میکنه به همون نسبت شکل دسکتاپ هم
عوض میشه و نمی شود فهمید که قبلا جای فرم چی بوده.

البته یه راه حل اینه که قبل از حرکت دادن فرمم دسکتاپ رو بخونم.
اما مشکلی که داره اینه که اگه بعد از حرکت، در فرم زیرین تغییری
ایجاد بشه متوجه نخواهم شد.

کسی ایده ای برای حل این مشکل داره؟

SReza1
سه شنبه 11 فروردین 1383, 19:45 عصر
شاید event وجود داشته باشه! ولی یه راه گذاشتن timer است که هر چند وقت یکبار ان کار رو بکنه!

Sepidar
چهارشنبه 12 فروردین 1383, 01:53 صبح
یه راه گذاشتن timer است که هر چند وقت یکبار ان کار رو بکنه!

این کار رو به یه نحو دیگه قبلا امتحان کردم. برای این منظور باید یه خاصیت visible
فرمم رو false و سپس true کنم تا بتونم زمینه desktop رو بدست بیارم. اما این کار
اولا خیلی کنده و ثانیا موجب یه جور چشمک زدن فرم میشه که اصلا خوشایند نیست :(

شفیعی
چهارشنبه 12 فروردین 1383, 04:49 صبح
سلام
دوست عزیز من یک برنامه قبلا داشتم دقیقا همین کار را انجام می داد اگر پیدا کردم برایت ارسال می کنم
برنامه زیر صفحه نمایش را در یک فایل ذخیره می کند


var
Form1: TForm1;
Image1:TImage;

implementation
uses Clipbrd;
{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
Form1.Visible:=False;
Sleep(1000);
Keybd_event(VK_SNAPSHOT,1,0,0);
Sleep(1000);
Form1.Visible:=True;
Image1:=TImage.Create(Self);
if Clipboard.HasFormat(CF_BITMAP) then
begin
Image1.Picture.Bitmap.Assign(Clipboard);
end;
Image1.Picture.SaveToFile('Test.Bmp');
ShowMessage('Image Stored In Test.Bmp');
IMAGE2.Picture.LoadFromFile('Test.Bmp');
end;