PDA

View Full Version : باز کردن فایل jpg در فتوشاب و ورد و کرل



nassim_20
چهارشنبه 26 تیر 1387, 10:21 صبح
من یه فایل jpg دارم و می خواهم اونرو یکبار در فتوشاب باز کنم یکبار در ورد و یکبار در کرل
البته دوستان قبلا استفاده از OleContainer رو پیشنهاد کرده بودند که خوب این تنها تصویر رو مثل تصاویر ویندوز باز می کرد اما من می خواهم در این سه نرم افزار نمایش دهم
در ضمن مهم نیست این تصویر از بانک خوانده شود یا از imag تنها انجام این کار برای من مهم است

dkhatibi
چهارشنبه 26 تیر 1387, 10:48 صبح
فکر کنم فتوشاپ کامندهای داسی برای این منظور داشته باشد. ورد هم ممکن است این کار را بکند.
شاید بتوانید پسوند فایل را به پسوند فایلهای برناه های مورد نظر تغییر داده و اونو باز نمایید.

nassim_20
چهارشنبه 26 تیر 1387, 10:53 صبح
فکر کنم فتوشاپ کامندهای داسی برای این منظور داشته باشد. ورد هم ممکن است این کار را بکند.


میشه بیشتر راهنمایی کنید و مثالی بزنید



شاید بتوانید پسوند فایل را به پسوند فایلهای برناه های مورد نظر تغییر داده و اونو باز نمایید.


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

nightHunter
چهارشنبه 26 تیر 1387, 10:54 صبح
سلام ، شما باید به دنبال پارامترهایی باشی که فایل مورد نظرتون رو به اون نرم افزارها میفرسته .
شاید بشه با ShellExecute این کار رو انجام داد .

برای مثال :



ShellExecute(Form1.Handle, nil, 'c:\windows\notepad.exe',
'c:\windows\general.txt', nil, SW_SHOWMAXIMIZED);

در ضمن ShellAPI رو هم Uses کنید و فرمان فوق رو به شکل دلخواه خودتون تغییر بدید .
موفق باشید .

nassim_20
چهارشنبه 26 تیر 1387, 11:39 صبح
میشه بگید این کدی که نوشتید چکار میکنه
حقیقتش من اصلا با اینطور کدها آشنایی ندارم
اگه میشه بیشتر راهنمایی بفرمایید

etedali
چهارشنبه 26 تیر 1387, 12:27 عصر
نميدونم كار درستي هست يا نه اما با اين كد ميتوني هر عكسي كه در Image روي فرمت نمايش بدي را توسط Photoshop باز كني

procedure TForm1.Button1Click(Sender: TObject);
begin
Image1.Picture.SaveToFile('C:\Test.jpg');
ShellExecute(Form1.handle,'open','Photoshop','C:\T est.jpg',nil,SW_SHOWNORMAL);
end;

nassim_20
چهارشنبه 26 تیر 1387, 13:08 عصر
در مورد word چی راهی هست
چون از کد فوق نمیشه استفاده کرد

Hsimple11
چهارشنبه 26 تیر 1387, 13:19 عصر
این کار حجم زیادی از حافظه را اشغال میکند . در ضمن باید نرم افزار default شما برای بازکردن فلان فایل حتما همان برنامه مورد نظر باشد. از همان OLE نمیتوانید استفاده کنید؟ یک New Object بسازید و بعد فایل مورد نظر را در آن لود کنید. برای هر سه برنامه. باید عمل کند.

nightHunter
چهارشنبه 26 تیر 1387, 15:30 عصر
در مورد word چی راهی هست
چون از کد فوق نمیشه استفاده کرد

برای مایکروسافت ورد باید از اتوماسیون استفاده کنید ، در پالت Servers موجوده .

موفق باشی .

nassim_20
چهارشنبه 26 تیر 1387, 21:42 عصر
این کار حجم زیادی از حافظه را اشغال میکند .

در مورد حافظه نمی دونم ولی انچه میخواستم اجرا شد


در ضمن باید نرم افزار default شما برای بازکردن فلان فایل حتما همان برنامه مورد نظر باشد. از همان OLE نمیتوانید استفاده کنید؟

به نظرم در مورد OLE اینطوری است که با نرم افزار پیش فرض باز میشه اما با دستور ShellExecute همان نرم افزار مربوطه باز میشه

Hsimple11
چهارشنبه 26 تیر 1387, 22:17 عصر
به نظرم در مورد OLE اینطوری است که با نرم افزار پیش فرض باز میشه اما با دستور ShellExecute همان نرم افزار مربوطه باز میشه

نرم افزار مربوطه یعنی چی؟؟
ShellExecute یک تابع ShellAPI ویندوز است و فایل مورد نظر را با نرم افزار پیش فرض را برایتان باز میکند که همانطور گفتم زمان و حافظه زیادی را احتیاج دارد. در واقع با فراخواندن این تابع دلفی هیچ عملی انجام نمیدهد . این ویندوز است که برنامه را بر اساس پیش فرض خود باز میکند.
موفق باشید.

nassim_20
چهارشنبه 26 تیر 1387, 22:53 عصر
ShellExecute(Form1.handle,'open','Photoshop','C:\T est.jpg',nil,SW_SHOWNORMAL);

کد فوق یک فایل jpg رو در فتوشاپ باز میکنه در حالیکه پیش فرض ویندوز نمایش فایل است نه نمایش در فتوشاپ
بنابراین این دستور تنها فایل را با برنامه پیش فرض باز نمیکنه بلکه با برنامه ای باز میکنه که در ان ذکر شده
'Photoshop'

Hsimple11
پنج شنبه 27 تیر 1387, 00:58 صبح
ShellExecute(Form1.handle,'open','Photoshop','C:\T est.jpg',nil,SW_SHOWNORMAL);

کد فوق یک فایل jpg رو در فتوشاپ باز میکنه در حالیکه پیش فرض ویندوز نمایش فایل است نه نمایش در فتوشاپ
بنابراین این دستور تنها فایل را با برنامه پیش فرض باز نمیکنه بلکه با برنامه ای باز میکنه که در ان ذکر شده
'Photoshop'

دوست گرامی ShellExecute تنها یک تابع API ویندوز است که فقط دارید در دلفی اون رو فرا میخوانید. هیچ تفاوتی با نوشتن آدرس برنامه در Run منوی Start ویندوز ندارد. این تابع فایل مورد نظر را با برنامه پیش فرضی که برای باز شدن آن برای ویندوز تعریف شده باز میکند. در واقع این تابع توانایی تعریف برنامه مورد نظر برای باز کردن فایل را ندارد و برای اینکار باید از توابع دیگری نظیر CreateProcess استفاده کنید.

اما در مورد کدی که نوشتید. شما برنامه خاصی را باز میکنید و بعد فایل مورد نظر را به عنوان یک پارامتر فرا مبخوانید. در واقع ShellExecute فایل Exe برنامه فوتوشاپ را باز کرده است.

موفق باشید.

Hsimple11
پنج شنبه 27 تیر 1387, 02:14 صبح
علاوه بر این همانند خود ویندوز تنها زمانی که فایل اجرایی مورد نظر در زیر شاخه System32 (در Windows XP) باشد نیاز به دادن مسیر نیست همانطور که در Run تایپ میکنید Notepad بدون دادن مسیر. اما در مورد برنامه های نصب شده همانند فوتوشاپ باید مسیر فایل Exe را مشخص کنید.

nassim_20
شنبه 29 تیر 1387, 10:23 صبح
اما در مورد برنامه های نصب شده همانند فوتوشاپ باید مسیر فایل Exe را مشخص کنید.

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

به نظر شما من چکار کنم میشه یه نمونه برام بذارید؟
در ضمن از اینکه پیگیر سوالات من هستید بینهایت ممنونم

Hsimple11
شنبه 29 تیر 1387, 15:39 عصر
مسیر فایل Exe و پارامتر یعنی فایل خود را هر دو را کامل به آن بدهید.

ضمنا از CreateProcess هم میتوانید استفاده کنید این مثال یک فایل را با برنامه تعریف شده اجرا می کند :


procedure ExecNewProcess(ProgramName : String);
var
StartInfo : TStartupInfo;
ProcInfo : TProcessInformation;
CreateOK : Boolean;
begin

{ fill with known state }
FillChar(StartInfo,SizeOf(TStartupInfo),#0);
FillChar(ProcInfo,SizeOf(TProcessInformation),#0);
StartInfo.cb := SizeOf(TStartupInfo);

CreateOK := CreateProcess(PChar(ProgramName),nil, nil, nil,False,
CREATE_NEW_PROCESS_GROUP+NORMAL_PRIORITY_CLASS,
nil, nil, StartInfo, ProcInfo);

{ check to see if successful }
if CreateOK then
//may or may not be needed. Usually wait for child processes
WaitForSingleObject(ProcInfo.hProcess, INFINITE);
end;

nassim_20
دوشنبه 31 تیر 1387, 22:04 عصر
من از این دستور برای بازکردن در کرل استفاده می کنم ولی هر بار که یه کرل جدید باز میشه اما همین کد رو که در مورد فتوشاپ نوشتم اینطور نبود


ShellExecute(Form1.handle,'open','coreldrw','C:\Te st.jpg',nil,SW_SHOWNORMAL);

nassim_20
جمعه 18 مرداد 1387, 13:05 عصر
من از این دستور برای بازکردن در کرل استفاده می کنم ولی هر بار که یه کرل جدید باز میشه اما همین کد رو که در مورد فتوشاپ نوشتم اینطور نبود

در مورد کد فوق مثلا اگه دو بار روش کلیک کنم دوبار کرل اجرا میشه
کسی علتش رو نمی دونه