PDA

View Full Version : سوال: لطفادرمورد اين پيغام خطا راهنمايي كنيد



mehdi_moosavi
سه شنبه 23 مهر 1392, 12:01 عصر
سلام،
اين خطا در هنگام اجراي دستور زير بوجود مياد :



procedure TForm1.Button1Click(Sender: TObject);
var Str:String;
begin
Str:=Clipboard.AsText;
end;

لطفاً راهنمايي كنيد
باتشكر

Mask
سه شنبه 23 مهر 1392, 17:24 عصر
مشکل که ملومه چیه.
فایل زیر رو اجرا کن. ببین اجرا میشه؟

mehdi_moosavi
سه شنبه 23 مهر 1392, 23:28 عصر
بله اجرا شد

Delphi Coder
چهارشنبه 24 مهر 1392, 04:42 صبح
بعضی وقتا پیش میاد.
exception رو هندل کن یه sleep 50 یا 100 تایی بزار و همون کد رو یکی دو بار retry کن درست میشه.

یوسف زالی
چهارشنبه 24 مهر 1392, 11:29 صبح
خب دلیلش رو هم می گفتید دیگه!

دلیل این ارور اینه که کلیپ بورد یک شی اشتراکی محسوب می شه و می تونه قفل شه.
به همین جهت ممکنه برنامه شما هنگام دسترسی، با ارور مواجه بشه.
راه حلی که فروم شرکت Embarcadero ارائه داده اینه:



const
MAX_CLIPBOARD_TRIES = 10;
CLIPBOARD_WAIT_TIME = 500;

procedure SetClipboardText(Text : String);
var
tries : Integer;
success : Boolean;
begin
success := False;
tries := 0;
while (not success) and (tries < MAX_CLIPBOARD_TRIES) do
begin
try
Clipboard.AsText := Text;
success := True;
except
Inc(tries);
Sleep(CLIPBOARD_WAIT_TIME);
end;
end;
end;

function GetClipboardText : String;
var
tries : Integer;
success : Boolean;
begin
success := False;
tries := 0;
while (not success) and (tries < MAX_CLIPBOARD_TRIES) do
begin
try
result := Clipboard.AsText;
success := True;
except
Inc(tries);
Sleep(CLIPBOARD_WAIT_TIME);
end;
end;
end;


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

mehdi_moosavi
پنج شنبه 25 مهر 1392, 14:23 عصر
سلام، ممنون از راهنمایی شما،
من کد زیر رو نوشتم تا یک متن رو که در برنامه WORD تایپ شده بوسیله شبیه سازی فشردن کلیدهای Ctrl+A و Ctrl+C به یک Memo در یک برنامه دلفی منتقل کنم حالا چطور متنی رو که بوسیله Ctrl+C به Clipboard منتقل شده به فانکشن SetClipboardText بعنوان پارامتر منتقل کنم؟


procedure TFrm.Button2Click(Sender: TObject);
var Str:String;
begin
SetForegroundWindow(GetHandle('Microsoft Word')); Sleep(1000);
PressKey(Ord('A'),[ssCtrl],False); Sleep(1000);
PressKey(Ord('C'),[ssCtrl],False); Sleep(1000);
SetForegroundWindow(GetHandle('Form1')); Sleep(1000);
Str:=Clipboard.AsText;
Form1.Memo1.Text:=Str;
end;