ورود

View Full Version : فرستادن پارامتر به برنامه های دلفی



(امید)
شنبه 06 تیر 1383, 07:27 صبح
سلام
فرض کنید که یک editor با دلفی نوشتیم . حالا چطور برای این برنامه تعریف کنیم که با کلیک کردن روی فایلهای متنی برنامه ما با آن فایل باز شود ؟
در واقع چطور می تونیم برنامه رو با پارامتر تعریف و فراخوانی کنیم.
متشکرم

مهدی کرامتی
شنبه 06 تیر 1383, 09:22 صبح
به این کدها دقت کنید:

unit ExtUtils;

interface
uses Registry, ShlObj, SysUtils, Windows;

procedure RegisterFILEType(cMyExt, cMyFILEType, cMyDescription, ExeName: string; IcoIndex: integer; DoUpdate: boolean = false);

implementation

procedure RegisterFILEType(cMyExt, cMyFILEType, cMyDescription, ExeName: string; IcoIndex: integer; DoUpdate: boolean = false);
var
Reg: TRegistry;
begin
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_CLASSES_ROOT;
Reg.OpenKey(cMyExt, True);
// Write my FILE type to it.
// This adds HKEY_CLASSES_ROOT\.abc\(Default) = 'Project1.FILEType'
Reg.WriteString('', cMyFILEType);
Reg.CloseKey;
// Now create an ASSOCiation for that FILE type
Reg.OpenKey(cMyFILEType, True);
// This adds HKEY_CLASSES_ROOT\Project1.FILEType\(Default)
// = 'Project1 FILE'
// This is what you see in the FILE type description for
// the a FILE's properties.
Reg.WriteString('', cMyDescription);
Reg.CloseKey; // Now write the default icon for my FILE type
// This adds HKEY_CLASSES_ROOT\Project1.FILEType\DefaultIcon
// \(Default) = 'Application Dir\Project1.exe,0'
Reg.OpenKey(cMyFILEType + '\DefaultIcon', True);
Reg.WriteString('', ExeName + ',' + IntToStr(IcoIndex));
Reg.CloseKey;
// Now write the open action in explorer
Reg.OpenKey(cMyFILEType + '\Shell\Open', True);
Reg.WriteString('', '&Open');
Reg.CloseKey;
// Write what application to open it with
// This adds HKEY_CLASSES_ROOT\Project1.FILEType\Shell\Open\Com mand
// (Default) = '"Application Dir\Project1.exe" "%1"'
// Your application must scan the command line parameters
// to see what FILE was passed to it.
Reg.OpenKey(cMyFILEType + '\Shell\Open\Command', True);
Reg.WriteString('', '"' + ExeName + '" "%1"');
Reg.CloseKey;
// Finally, we want the Windows Explorer to realize we added
// our FILE type by using the SHChangeNotify API.
if DoUpdate then SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil);
finally
Reg.Free;
end;
end;
end.

نحوه استفاده:


interface
uses ExtUtils;
implementation

procedure TForm1.FormCreate(Sender: TObject);
begin
RegisterFILEType('.txt','Omid Editor Files','Omid Editor Files',Application.ExeName,0,True);
end;

procedure TForm1.FormShow(Sender: TObject);
begin
If (ParamCount > 0) and FileExists(ParamStr(1)) then
begin
Memo1.Lines.LoadFromFile(ParamStr(1));
end;
end;

Pichidehtarin
شنبه 06 تیر 1383, 10:56 صبح
با سلام .
جناب کرامتی شما همیشه حرفه ای ترین کد ها رو به نمایش میزارین .
من که واقعا لذت میبرم .
به نظر شما بهتر نیست راه های ساده تر هم بیان بشه ؟
با اجازه شما :
1- تعریف برنامه خودتون برای باز کردن فایل های text رو به عهده نرم افزار های "برنامه نصب ساز" (مثل InstallSheild یا Wise Install) بزارین .
2- از یک خط کد زیر در رویداد OnShow برای پنجره اصلی استفاده کنین .

if (ParamCount > 0) and FileExists(ParamStr(1)) then Memo1.Lines.LoadFromFile(ParamStr(1));

jirjirakk
شنبه 06 تیر 1383, 21:18 عصر
تا جایی که من میبینم کد شما هم شبیه که آقای کرامتی هستش :)

(امید)
جمعه 12 تیر 1383, 19:42 عصر
خیلی ممنونم آقا مهدی
فوق العاده بود .

چطور می تونم بدون استفاده از ShellExecute از تو برنامه هام یه برنامه دیگه که با دلفی هم هست فراخوانی کنم. البته باید چند تا پارامتر هم به برنامه یاد شده بفرستم .


بازم متشکرم

(امید)
یک شنبه 14 تیر 1383, 11:35 صبح
سلام

برای فراخوانی یک برنامه و فرستادن پارامتر به آن بدون استفاده از ShellExecute



پست شده توسط DelphiAssistant
تاریخ: 28 تیر 1382

procedure RunAndWaitShell(Ejecutable,Argumentos:string ;Visibilidad:integer);
var
Info:TShellExecuteInfo;
pInfo:PShellExecuteInfo;
exitCode:DWord;
begin
{Puntero a Info}
{Pointer to Info}
pInfo:=@Info;
{Rellenamos Info}
{Fill info}
with Info do
begin
cbSize:=SizeOf(Info);
fMask:=SEE_MASK_NOCLOSEPROCESS;
wnd:=application.Handle;
lpVerb:=nil;
lpFile:=PChar(Ejecutable);
{Parametros al ejecutable}
{Executable parameters}
lpParameters:=Pchar(Argumentos+#0);
lpDirectory:=nil;
nShow:=Visibilidad;
hInstApp:=0;
end;
{Ejecutamos}
{Execute}
ShellExecuteEx(pInfo);

{Esperamos que termine}
{Wait to finish}
repeat
exitCode := WaitForSingleObject(Info.hProcess,500);
Application.ProcessMessages;
until (exitCode <> WAIT_TIMEOUT);
end;

نحوه استفاده


RunAndWaitShell(
'My Graphex\GRAPHEX.exe',
'G:\MyPictures\1111.bmp param1 param2',Sw_ShowNormal);

که کد های بالا کار کد زیر را انجام می دهد:


ShellExecute(Handle, 'open',
pchar(My Graphex\GRAPHEX.exe')
,pchar('G:\MyPictures\1111.bmp param1 param2'),
'',SW_MAXIMIZE);

برای گرفتن پارامتر ها در برنامه همانطور که دوستان اشاره کردند داریم



for i=1 to paramcount
listbox1.items.add(paramstr(i));

mamizadeh
پنج شنبه 11 اسفند 1384, 20:31 عصر
با سلام
دوستان این paramstr که می گین چیه و چطوری می تونم وقتی مثلا روی فایل a.txt کلیک می کنم این paramstr را به برنامه ام ارسال کنم
با عرض پوزش از اینکه سوالم کمی از عنوان تاپیک متفاوت هستش

Hamid_PaK
جمعه 12 اسفند 1384, 05:41 صبح
دوست عزیز ParamStr پارامترهایی است که به برنامه شما ارسال شده یعنی بعد از نام و اگزه برنامه نوشته شده اند و با فاصله از هم جدا می شوند مثال :


Notepad.exe parameterNo1 parameterNo2 ...

برای دریافت این پارامتره از تابع ParamStr استفاده می کنیم
برای استفاده هم از روشی که آقای کرامتی در بالا توضیح دادند استفاده کنید ، تا به فایل مورد نظر متصل شود ...

یا حق !!!

mamizadeh
شنبه 13 اسفند 1384, 23:51 عصر
دوست عزیز ParamStr پارامترهایی است که به برنامه شما ارسال شده یعنی بعد از نام و اگزه برنامه نوشته شده اند و با فاصله از هم جدا می شوند مثال :


Notepad.exe parameterNo1 parameterNo2 ...

برای دریافت این پارامتره از تابع ParamStr استفاده می کنیم
برای استفاده هم از روشی که آقای کرامتی در بالا توضیح دادند استفاده کنید ، تا به فایل مورد نظر متصل شود ...

یا حق !!!
خیلی ممنون از اینکه جواب دادید