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;
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.