PDA

View Full Version : مشکل اجرای فایل با استفاده از TFileRun



nassim_20
جمعه 23 مهر 1389, 00:58 صبح
با سلام
من می خواهم در برنامه ام هر فایلی با توجه به پسوندش (نوع فایل) باز شود مثلا فایل psd در فتوشاب فایل doc در ورد و ...
این کار با استفاده از متد Execute این دستور(TFileRun) به راحتی امکان پذیر است ولی زمانیکه فایل مربوطه در سیستم شناخته نشده باشد یعنی نصب نشده باشد این پیغام خطا را می دهد
"A device attached to the system is not functioning"
چطور می تونم از نمایش آن جلوگیری کنم و پیغام خودم رو جایگزین کنم
البته با بلوک try...except نشد و نیز هر چه گشتم خود دستور هم متدی برای تشخیص نداشت


حالا سوال کلی ام این است که چطور می شه فهمید که یک نوع فایل شناخته شده است یا خیر؟

nassim_20
شنبه 24 مهر 1389, 01:29 صبح
کسی تا به حال به یه همچین مشکلی برنخورده
کسی جواب رو نمی دونه .................................................. ..............

mofrad
شنبه 24 مهر 1389, 01:41 صبح
از متد shellexcute استفاده کنید تا بتونید روی پیغام ها کنترل داشته باشید:

procedure TForm1.Button1Click(Sender: TObject);
var
errorcode: integer;
begin
errorcode :=
ShellExecute(0, 'open', pchar('c:\test.txt'), nil, nil, SW_NORMAL);
case errorcode of
2:showmessage('file not found');
3:showmessage('path not found');
5:showmessage('access denied');
8:showmessage('not enough memory');
32:showmessage('dynamic-link library not found');
26:showmessage('sharing violation');
27:showmessage('filename association incomplete or invalid');
28:showmessage('DDE request timed out');
29:showmessage('DDE transaction failed');
30:showmessage('DDE busy');
31:showmessage('no application associated with the given filename extension');
end;

{
SE_ERR_FNF = 2;
SE_ERR_PNF = 3;
SE_ERR_ACCESSDENIED = 5;
SE_ERR_OOM = 8;
SE_ERR_DLLNOTFOUND = 32;
SE_ERR_SHARE = 26;
SE_ERR_ASSOCINCOMPLETE = 27;
SE_ERR_DDETIMEOUT = 28;
SE_ERR_DDEFAIL = 29;
SE_ERR_DDEBUSY = 30;
SE_ERR_NOASSOC = 31;
}
end;