PDA

View Full Version : باز کردن فایل EXE مانند فتوشاپ در داخل یک Panel در برنامه



nasr
دوشنبه 04 اسفند 1382, 18:53 عصر
سلام
آیا میشه یه برنامه EXE را داخل یک Panel باز کرد
مثلا با فشار دکمه ای برنامه فتوشاپ یا هر برنامه EXE دیگری در داخل برنامه و از درون یک Panel نمایش داده شود
ممنون

said ali
سه شنبه 05 اسفند 1382, 12:04 عصر
با سلام
من خودم تا حالا این کار رو تست نکردم ولی فکر کن اگه برای هندل Application یه Parent تعریف کنی باید بشه ولی نمیدونم.
یه سوال دیگه برای چی میخوای این کار رو اصلا بکنی شاید روش بهتری برای هدفت وجود داشته باشه.
با امید موفقیت برای شما.

nasr
سه شنبه 05 اسفند 1382, 20:22 عصر
اگه برنامه RemotAdmin را دیده باشید (همون برنامه ای که با اون می شه کامپیوتر هایی که به شبکه وصل هستند را کنترل کرد و حتی صفحه مانیتور اونها را در مانیتور خودمون ببینیم و خلاصه با کامپیوتر اونها هر کاری خواستیم بکنیم )
خود برنامه یه کادر کوچک داره یعنی برنامه کوچکی است می خوام یه جوری این برنامه را در دل برنامه خودم قرار بدم تا فقط با برنامه من باز و بسته بشه و ...
ممنون

Delphi-Clinic
سه شنبه 05 اسفند 1382, 22:17 عصر
سلام

دوست من

این قبیل برنامه ها دارای دو بخش اصلی هستند:

Server
Client

سرور از روی صفحه مانیتور عکس گرفته و پشت سر هم به Client ارسال می کند.
در حقیقت شما با کلیک بر روی یک عکس کامپیوتر server را کنترل می کنید.

مثال برنامه : tight vnc
http://www.tightvnc.com

Open Source :?

زبان برنامه نویسی : C

nasr
چهارشنبه 06 اسفند 1382, 17:15 عصر
نه من نمی خوام چنین برنامه ای را درست کنم
فقط می خوام این برنامه در داخل یک Panel باز بشه و با بستن فرم برنامه هم بسته بشه
والسلام
ممنون

nasr
چهارشنبه 03 تیر 1383, 08:53 صبح
:roll:

hotice
چهارشنبه 03 تیر 1383, 11:11 صبح
با عرض سلام
من دقیقا منظور سوال شما را نفهمیدم!
ایا منظور شما این بود که با مثلا کلیک کردن روی یک ‌Button میشه توی همون برنامه خودمون توی همون فرم برنامه اجرا بشه.؟
بله میشه. اما من این کار رو نکردم! دقیقا همون چیزی که آقای said ali گفتن.

اگه برای هندل Application یه Parent تعریف کنی باید بشه
بعلت سر ریز شدن حجم سایت نتوانستم تصویر برنامه را برایتان نمایش دهم.!
موفق باشید. :)

nasr
چهارشنبه 03 تیر 1383, 15:44 عصر
ممنون میشم اگه اینکار را بکنید



:flower:

رضا عربلو
جمعه 05 تیر 1383, 04:12 صبح
ابتدا با دستورات ShellExecute یا findWindow یک Handle برای برنامه مورد نظر ÷یدا کن سپس با SetParent آنرو داخل Panel بیار و در آخر با SetWindowLong و سپس با ShowWindow شکل و نحوه نمایش انرا به دلخواه خودن درباور
من این کار را با همین دستورات کرده ام و مطمئن هستم که درست کار می کنند.

nasr
شنبه 06 تیر 1383, 09:15 صبح
ممنون

nasr
چهارشنبه 17 تیر 1383, 16:53 عصر
با SetParent آنرو داخل Panel
اینکار را چطور انجام بدم
ممنون

رضا عربلو
پنج شنبه 18 تیر 1383, 23:57 عصر
setparent(hwndChild, hwndParent);
برای مثال


var
hwndphotoshop : THandle;
begin
hwndphotoshop := FindWindow('nil', 'Photoshop 7.0');
setparent(hwndphotoshop, form1.panel1.Handle);

nasr
جمعه 19 تیر 1383, 09:42 صبح
سلام و تشکر
من اینکار را کردم یه Error می ده

در ضمن ممنون می شم اگه مراحل بعدی که فرموده بودید
در آخر با SetWindowLong و سپس با ShowWindow شکل و نحوه نمایش انرا به دلخواه خودن درباور
را نیز توضیح بدید چون من اینکار را نمی دونم چطور انجام بدم

باز هم ممنون

vatal
جمعه 19 تیر 1383, 15:56 عصر
با سلام
این کد رو امتحان کن .... ببین جواب میده یا نه ؟
(ShellExecute(Application.Handle, Nil, 'calc.exe', Nil, Nil, SW_SHOWNORMAL

VATAL 8)

nasr
شنبه 20 تیر 1383, 08:16 صبح
سلام

این کد که فقط فایل EXE را باز میکنه

رضا عربلو
پنج شنبه 25 تیر 1383, 23:52 عصر
SetParent هیچ مشکلی ندارد.
برنامه زیر را نگاه کن

پریسا دوستدار دلفی
جمعه 26 تیر 1383, 10:35 صبح
با تشکر از جناب نصر و آقای رضا عربلو به خاطر طرح سوال و دادن جواب
من خیلی وقت بود دنبال یه همچین چیزی بودم
تا یه دفعه اینجا دیدم
ولی این برنامه فقط همون فایل را باز می کنه هر کاری کردم یه برنامه دیگه را باز کنه نتونستم
من دوست دارم اسم برنامه ای که می خوام باز بشه را داخل یک EDIT وارد کنم

مرسی

nasr
دوشنبه 29 تیر 1383, 11:12 صبح
سلام

برای اینکه دوستان متن برنامه را ببینند با اجازه آقا رضا اون را اینجا گذاشتم

procedure ExecuteInForm;
var
HWND_Hearts : HWND;
var
CharArray_System32Directory : array[0..Max_Path-1] of Char;
String_System32Dir : string;
begin
SetString(String_System32Dir, CharArray_System32Directory, GetSystemDirectory(CharArray_System32Directory, MAX_PATH));
if String_System32Dir = '' then
raise exception.Create(SysErrorMessage(GetLastError))
else
begin
ShellExecute(HWND_Hearts, 'Open', PAnsiChar(String_System32Dir + '\sol.exe'), '', '', SW_Hide);
repeat
HWND_Hearts := FindWindow(nil, 'Solitaire');
Application.ProcessMessages;
until HWND_Hearts <> 0;
SetParent(HWND_Hearts, Form1.Panel1.handle);
SetWindowLong(HWND_Hearts, GWL_Style, WS_Child);
ShowWindow(HWND_Hearts, SW_MAXIMIZE);
end;
end;
من چند تا سوال دارم
1 خط
SetString(String_System32Dir, CharArray_System32Directory, GetSystemDirectory(CharArray_System32Directory, MAX_PATH)); کارش چیه و اصلا چه نیازی به این خط است
2 خط
SetWindowLong(HWND_Hearts, GWL_Style, WS_Child); کارش چیه

من با تغییراتی فایل Calc.exe را در درایو دیگری کپی کردم این فایل را بدون مشکل باز کرد

ولی وقتی یه فایل Exe که خودم برنامه اش را نوشته ام باز می کنم 2 مشکل وجود داره
1 نمیشه با اون برنامه که داخل Panel باز شده کار کرد یعنی اصلا فعال نیست
2 در قسمت TaskBar فایل باز شده را نشون می ده و با بسته شدن فایل اون فایل Exe همچنان در TaskBar باقی می ماند

باتشکر

nasr
چهارشنبه 28 مرداد 1383, 13:52 عصر
سلام
چرا فقط فایلهایی مثل Calc.exe و فایلهایی که خود ویندوز نصب می کنه را درست اجرا می کنه

من فایل مورد نظرم را در شاخه System32 قرار میدم وقتی داخل Panel ‌باز میشه روی برنامه هیچ کاری نمیشه کرد مثلا یه ماشین حساب نوشته ام که وقتی داخل این برنامه باز میکنم دیگه دکمه هاش کار نمیکنه ولی ماشین حساب خود ویندوز را که باز میکنم مشکلی نداره

ممنون میشم راهنمایی کنید

رضا عربلو
جمعه 30 مرداد 1383, 01:03 صبح
می نوم برنامه تان را ببینم.
شاید دلیلش این باشد که توابع setwindowlong , ... برای ویندوز می باشند (API) و ساختار اشیا دلفی برای آنها مشکل زا است.
من تا حالا با این روش برنامه های زیادی رو تونسته بودم به داخل یک فرم قرار دهم