ورود

View Full Version : اجرای فایل اجرایی در دلفی



meysam_212
سه شنبه 21 مرداد 1393, 17:12 عصر
سلام
من میخوام یه برنامرو توی دلفی اجرا کنمُ، مثلا یه فایل ورد رو داخل یه پنل یا هر چیز دیگه ای اجرا کنم

یوسف زالی
سه شنبه 21 مرداد 1393, 19:12 عصر
سلام.
نمی تونید به طور معمول هر برنامه ای رو باهاش این کار رو کنید. شرایط خیلی خیلی خاص داره. مثلا با شی OLEContainer برای برنامه هایی که رابط COM در اختیارتون قرار می دند می شه یه کارایی کرد.
این رابط رو مجموعه Office داره ولی مثلا نمی تونید برنامه ای مثل Download Manager رو در پنل برنامه باز کنید.

Mask
سه شنبه 21 مرداد 1393, 21:20 عصر
پیرو صحبتهای داش یوسف:
میتونید پرنت برنامه جانبی رو ،برنامه خودتون قرار بدید.

یوسف زالی
چهارشنبه 22 مرداد 1393, 09:05 صبح
میتونید پرنت برنامه جانبی رو ،برنامه خودتون قرار بدید.

یک مثال کوچیک بزن لطفا. به نظر من نمی شه، شاید روش خاصی داره که ازش غافل بودم.
فرض کن برنامه ای که قراره باز بشه، با دلفی نوشته شده، شی اسکرین که تعداد فرم ها رو نگه می داره، در حالت جدید چی برمی گردونه؟
یا مثلا Application این دفعه به چی اشاره می کنه؟
یک مثال بزن با هم بررسیش کنیم.

Mask
پنج شنبه 23 مرداد 1393, 20:35 عصر
دادا این کد ماشین حساب رو میاره تو برنامه ما. یعنی برنامه ما میشه پرنتش.:خجالت:



procedure TForm1.Button1Click(Sender: TObject);
var
Rec: TShellExecuteInfo;
const
AVerb = 'open';
AParams = '';
AFileName = 'calc.exe';
ADir = '';
begin
FillChar(Rec, SizeOf(Rec), #0);
Rec.cbSize := SizeOf(Rec);
Rec.fMask := SEE_MASK_NOCLOSEPROCESS;
Rec.lpVerb := PChar( AVerb );
Rec.lpFile := PChar( AfileName );
Rec.lpParameters := PChar( AParams );
Rec.lpDirectory := PChar( Adir );
Rec.nShow := SW_HIDE;


ShellExecuteEx(@Rec);
WaitForInputIdle(Rec.hProcess, 5000);


fHandle := Windows.FindWindow( 'CalcFrame', nil );
Windows.SetParent( fHandle, Handle );


Resize;
ShowWindow(fHandle, SW_SHOW);
end;


procedure TForm1.FormResize(Sender: TObject);
begin
if IsWindow(fHandle) then begin
SetWindowPos(fHandle, 0, 0, 0, ClientWidth, ClientHeight,
SWP_ASYNCWINDOWPOS);
end;

zahedpoor
شنبه 25 مرداد 1393, 10:21 صبح
با تابع WinExec هر فایل اجرایی را میتونید از دلفی اجرا کنید

BORHAN TEC
شنبه 25 مرداد 1393, 11:09 صبح
با تابع WinExec هر فایل اجرایی را میتونید از دلفی اجرا کنید
در حال حاضر به هیچ عنوان استفاده از تابع WinExec توصیه نمیشه چرا که با Unicode سازگار نیست و به جای اون، در محیط ویندوز باید از ShellExecute یا ShellExecuteW یا ShellExecuteEx یا ShellExecuteExW استفاده کنید. :چشمک:

meysam_212
چهارشنبه 30 مهر 1393, 07:33 صبح
می خوام برنامه ورد رو با پرنت دلفی اجرا کنم و از همون قسمت بتونم فایل ورد رو ویرایش کنم و ذخیره کنم

meysam_212
چهارشنبه 30 مهر 1393, 07:45 صبح
دادا این کد ماشین حساب رو میاره تو برنامه ما. یعنی برنامه ما میشه پرنتش.:خجالت:



procedure TForm1.Button1Click(Sender: TObject);
var
Rec: TShellExecuteInfo;
const
AVerb = 'open';
AParams = '';
AFileName = 'calc.exe';
ADir = '';
begin
FillChar(Rec, SizeOf(Rec), #0);
Rec.cbSize := SizeOf(Rec);
Rec.fMask := SEE_MASK_NOCLOSEPROCESS;
Rec.lpVerb := PChar( AVerb );
Rec.lpFile := PChar( AfileName );
Rec.lpParameters := PChar( AParams );
Rec.lpDirectory := PChar( Adir );
Rec.nShow := SW_HIDE;


ShellExecuteEx(@Rec);
WaitForInputIdle(Rec.hProcess, 5000);


fHandle := Windows.FindWindow( 'CalcFrame', nil );
Windows.SetParent( fHandle, Handle );


Resize;
ShowWindow(fHandle, SW_SHOW);
end;


procedure TForm1.FormResize(Sender: TObject);
begin
if IsWindow(fHandle) then begin
SetWindowPos(fHandle, 0, 0, 0, ClientWidth, ClientHeight,
SWP_ASYNCWINDOWPOS);
end;

دستت درد نکنه اما یه مشکلی هست، اینکه نام فرم برنامه مرد نظر رو از کجا پیدا کنیم مثلا ماشین حساب CalcFrame هست

khoshblagh
چهارشنبه 30 مهر 1393, 07:57 صبح
دادا این کد ماشین حساب رو میاره تو برنامه ما. یعنی برنامه ما میشه پرنتش.:خجالت:



procedure TForm1.Button1Click(Sender: TObject);
var
Rec: TShellExecuteInfo;
const
AVerb = 'open';
AParams = '';
AFileName = 'calc.exe';
ADir = '';
begin
FillChar(Rec, SizeOf(Rec), #0);
Rec.cbSize := SizeOf(Rec);
Rec.fMask := SEE_MASK_NOCLOSEPROCESS;
Rec.lpVerb := PChar( AVerb );
Rec.lpFile := PChar( AfileName );
Rec.lpParameters := PChar( AParams );
Rec.lpDirectory := PChar( Adir );
Rec.nShow := SW_HIDE;


ShellExecuteEx(@Rec);
WaitForInputIdle(Rec.hProcess, 5000);


fHandle := Windows.FindWindow( 'CalcFrame', nil );
Windows.SetParent( fHandle, Handle );


Resize;
ShowWindow(fHandle, SW_SHOW);
end;


procedure TForm1.FormResize(Sender: TObject);
begin
if IsWindow(fHandle) then begin
SetWindowPos(fHandle, 0, 0, 0, ClientWidth, ClientHeight,
SWP_ASYNCWINDOWPOS);
end;

با سلام این کد XE4 خطای عدم شناسایی متغیرها را میگیرد. ظاهرا باید یونیتی به بخش uses اضافه شود ، ولی نمیداتم چه یونیتی مورد نیاز است؟ متشکرم

meysam_212
جمعه 02 آبان 1393, 19:47 عصر
با سلام این کد XE4 خطای عدم شناسایی متغیرها را میگیرد. ظاهرا باید یونیتی به بخش uses اضافه شود ، ولی نمیداتم چه یونیتی مورد نیاز است؟ متشکرم


یونیت shellApi رو به uses اضافه کن