PDA

View Full Version : باز کردن فایل psd از طریق فتوشاب و نیز پیش نمایش ان در برنامه



nassim_20
یک شنبه 23 تیر 1387, 15:57 عصر
می خواهم یکسری فایلهای psd که در بانک ذخیره کرده ام اولا یه پیش نمایش کوچکی از اون رو در برنامه داشته باشم (بدون استفاده از فرمت دیگر) و نیز این فایل psd رو از طریق فتوشاب اجرا کنم
البته همین نمونه کار رو با کورل هم باید انجام دهم.
منتظر نظرهای سبزتان هستم ...

Hsimple11
یک شنبه 23 تیر 1387, 17:20 عصر
برای اینکه یک Preview از فایلهای PSD بگیرید میتوانید از یک کنترل Image استفاده کنید. کامپوننتهایی مثل GraphicEx به شما این امکان را می دهند که طیف انواع فایلهای قابل انتخاب برای Image خود را افزایش دهید. جستجو کنید اگر مجانی پیدا نکردید بفرمایید.
در مورد کار با Photoshop یا Corel Draw هم از OLEContrainer استفاده کنید.

nassim_20
یک شنبه 23 تیر 1387, 21:59 عصر
از OLEContrainer که استفاده میکنم البته فعلا بدون بانک استفاده کردم فقط مسیر فایل رو بهش می دهم
تنها فتوشاب رو باز میکنه ولی فایل مورد نظر رو باز نمیکنه
در ضمن برای ذخیره در بانک باید از همون فیلد blob و stream استفاده کنم؟
اگه بخواهم از بانک با استفاده از OLEContrainer نشون بدم چکار باید کنم؟

Hsimple11
یک شنبه 23 تیر 1387, 22:47 عصر
از OLEContrainer که استفاده میکنم البته فعلا بدون بانک استفاده کردم فقط مسیر فایل رو بهش می دهم
تنها فتوشاب رو باز میکنه ولی فایل مورد نظر رو باز نمیکنه
در ضمن برای ذخیره در بانک باید از همون فیلد blob و stream استفاده کنم؟
اگه بخواهم از بانک با استفاده از OLEContrainer نشون بدم چکار باید کنم؟

از CreateObjectFromFile استفاده کنید و Iconic آن را هم Flase قرار دهید. در مورد Blob هم فکر میکنم کار کند.
این سایت را ببینید :
http://delphi.newswhat.com/geoxml/forumhistorythread?groupname=borland.public.delphi .graphics&messageid=41097298@newsgroups.borland.com
متاسفانه امروز وقت ترجمه کردن آن را ندارم. مطمئن نیستم مفید باشد. ولی اگر به نتیجه نرسیدید بفرمایید.

اصغر (پآچ)
یک شنبه 23 تیر 1387, 22:53 عصر
سلام دوست من

برای این که بتونی یه فایل Psd رو توی OleContainer نشون بدی از دستور زیر استفاده کن


OleContainer.CreateObjectFromFile(AddressFileName, False);
OleContainer.DoVerb(ovShow);


موفق و موید باشی

nassim_20
یک شنبه 23 تیر 1387, 23:05 عصر
از CreateObjectFromFile استفاده کنید
بله من از همین کد استفاده کردم

procedure TForm1.Button3Click(Sender: TObject);
begin
OleContainer1.CreateObjectFromFile('I:\\1.psd',fal se);
OleContainer1.Run;
end;
ولی تنها فتوشاب رو باز میکنه ولی فایل رو نشون نمیده
اگه اطلاعات بیشتری در اختیارم بگذاری ممنون میشم
آیا میشه از این طریق فایلها رو از بانک واکشی کرد و در فتوشاب نمایش داد
اگه فایل از نوع jpg بود چی می خواهم آنهم در فتوشاب نمایش دهد
مثلا یه Image داریم می خواهیم تصویرش رو در فتوشاب نمایش دهیم

Hsimple11
یک شنبه 23 تیر 1387, 23:23 عصر
فایل مورد نظر را با خود فوتوشاپ باز کنید، به راحتی باز میشود؟ هیچ اشکال یا ویژگی خاصی ندارد که در هنگام باز شدن پیغامی دهد؟

در مورد Image هم میتوانید آن را در یک Stream ذخیره کنید و با OLEContainer و LoadFromStream کار کنید.

nassim_20
یک شنبه 23 تیر 1387, 23:34 عصر
فایل مورد نظر را با خود فوتوشاپ باز کنید، به راحتی باز میشود؟ هیچ اشکال یا ویژگی خاصی ندارد که در هنگام باز شدن پیغامی دهد؟
با کد اقای اصغر (پوآچ) حل شد

در مورد Image هم میتوانید آن را در یک Stream ذخیره کنید و با OLEContainer و LoadFromStream کار کنید.

اگه میشه یه مثال بزنید

Hsimple11
دوشنبه 24 تیر 1387, 03:25 صبح
در مورد کار با Streamها قبلا در سایت بحث شده است. مثال :

procedure TForm1.Button1Click(Sender: TObject);
var
BlobStream: TStream;
JP: TJPEGImage;

begin
BlobStream := ADOTable1.CreateBlobStream(ADOTable1filca,
bmRead);
try
JP := TJPEGImage.Create;
try

JP.LoadFromStream(BlobStream);
finally
JP.Free;
end;

finally
BlobStream.Free;
end;

end;
end.

nassim_20
دوشنبه 24 تیر 1387, 09:39 صبح
در مورد کار با Streamها قبلا در سایت بحث شده است. مثال :

ممنون از پاسختون ولی مشکل من ارتباط stream با OLEContainer است که فایل مورد نظر رو توی فوتوشاپ باز کنه چجوری توی فتوشاپ می توانم تصویرم رو فراخوانی کنم حالا چه از بانک باشه چه از Image فعلا فرمت من jpg است که در آینده از فرمت psd هم می خواهم استفاده کنم

دنیای دلفی
دوشنبه 24 تیر 1387, 15:41 عصر
اگر بتواني كامپوننت ImageEn را گير بياوري به راحتي تمامي موارد فوق حل مي شوند .

nassim_20
دوشنبه 24 تیر 1387, 15:42 عصر
من همچنان منتظر پاسخ هستم دوستان مددی فرمایند

Hsimple11
دوشنبه 24 تیر 1387, 16:00 عصر
تصویر خود را در Stream ذخیره کرده اید؟

nassim_20
دوشنبه 24 تیر 1387, 16:08 عصر
اگر بتواني كامپوننت ImageEn را گير بياوري به راحتي تمامي موارد فوق حل مي شوند .
یعنی اگه داشته باشم می تونم تصویرش رو تو فوتوشاپ باز کنم
ببینید کار من اینه که یه بانک دارم سه فیلد داره یکی از فیلدها jpg یکی psd و یکی فرمت کرل که فایلهای jpg هم باید در فتوشاپ باز بشند هم در کرل ولی او دو تای دیگه در نرم افزار خودشون مشکل من نمایش آنها نیست بلکه اینکه فایل مورد نظر رو از بانک بخونم نرم افزار خودشو باز کنم (مثلا فتوشاپ ) و فایل رو در انجا نشان دهم لازم نیست در خود برنامه psd نشان داده شود

تصویر خود را در Stream ذخیره کرده اید؟
بله من از کد شما استفاده کردم ولی هنوز نمی تونم اونو به OLEContainer ربطش بدم که برام تو فوتوشاپ باز کنه

Hsimple11
دوشنبه 24 تیر 1387, 16:23 عصر
MyOLEContainer.LoadFromStream (MyStream)

LoadFromStream در حقیقت OLEObject ای را که در یک Stream ذخیره شده در Container لود میکند.

nassim_20
دوشنبه 24 تیر 1387, 16:33 عصر
این کد منه موقع اجرا اصلا برنامه هنگ میکنه و کلا فریز میشه

procedure TForm1.Button3Click(Sender: TObject);
var
BlobStream: TStream;
JP: TJPEGImage;

begin
T_Image.Open;
T_Image.First;
BlobStream := T_Image.CreateBlobStream(T_ImageMini_Pic,bmRead);
try
JP := TJPEGImage.Create;
try
JP.LoadFromStream(BlobStream);
OleContainer1.LoadFromStream(BlobStream);
OleContainer1.DoVerb(ovShow);
finally
JP.Free;
end;

finally
BlobStream.Free;
end;


end;

nassim_20
دوشنبه 24 تیر 1387, 21:21 عصر
دوستان یه نگاهی به کد بندازید ببینید مشکلش چیه

Hsimple11
سه شنبه 25 تیر 1387, 02:39 صبح
var
b: TBlobStream;
begin
try
b := TBlobStream.Create((Table1.FieldByName('MyField') as TBlobField),bmRead);
OLEContainer1.LoadFromStream(b);
finally
b.free;
end;
end;



از یک Try/Except استفاده کنید :

try
OleContainer1.LoadFromStream(blobstream);
except
ShowMessage('Field is Empty');
end;
BlobStream.Free;

nassim_20
سه شنبه 25 تیر 1387, 13:43 عصر
از TBlobStream ایراد میگیره ایا باید یونیت خاصی رو اضافه کنم؟

راستی این کد برای نمایش jpg در فتوشاپ هم کار میکنه؟
ظاهرا OleContainer1 هر فایل رو متناسب به فرمتش در برنامه مربوط به خودش باز میکنه مثل psd رو در فتوشاب باز میکنه اما من علاوه بر این مساله میخواهم تعیین کنم که فایل در چه نرم افزاری باز بشه
مثلا jpg نیز در فتوشاپ باز بشه حالا چه از بانک فراخوانی شود و چه از داخل image

Hsimple11
سه شنبه 25 تیر 1387, 17:02 عصر
TBlobStream را در خود Help دلفی جستجو کنید.

nassim_20
چهارشنبه 26 تیر 1387, 11:02 صبح
من کد شما رو استفاده کردم ولی ارور میده که در تصویر زیر آوردم

راستی نوع دیتابیس مهم نیست من از dbisam استفاده میکنم

البته من راه SaveToFile رو هم رفتم (از بانک میخواند و در یک مسیر ذخیره می کند) که همیشه در بار اول بدون مشکل ذخیره و اجرا میشه ولی زمانیکه دوباره بزنم همین ارور میده حتی بانک رو هم می بندم و دوباره باز می کنم ولی همچنان مشکل باقی است مگر اینکه برنامه اجرایی رو ببندم و دوباره باز کنم:افسرده:

Hsimple11
چهارشنبه 26 تیر 1387, 14:26 عصر
فیلدتان از نوع Blob هست؟ در کدام خط Error میدهد؟

nassim_20
چهارشنبه 26 تیر 1387, 22:40 عصر
بله فیلده blob هستند و در خط اول ارور میده


b := TBlobStream.Create((Table1.FieldByName('MyField') as TBlobField),bmRead);

Hsimple11
پنج شنبه 27 تیر 1387, 00:34 صبح
آیا فیلد مورد نظر فعال است. این شرط را قبل از آن خط وارد کنید :


if (Field = nil) or (Field = Table1Image) then begin
if Table1Imagetype.AsString <> '' then begin
.
.
.
end;
End;