View Full Version : سوال: نحوه قرار دادن تصاویر داخل Image list  در یک کنترل Image
  
hadisalahi2
چهارشنبه 11 اردیبهشت 1387, 09:06 صبح
سلام به همگی دوستان.
چطوری میشه تصاویر یک ImageList  رو داخل یک کنترل Image  قرار داد؟
B-Vedadian
چهارشنبه 11 اردیبهشت 1387, 10:28 صبح
ABMP := TBitmap.Create;
ImageList1.GetBitmap(ABMP, 0);
Image1.Picture.Graphic.Assign(ABMP);
ABMP.Free;
hadisalahi2
چهارشنبه 11 اردیبهشت 1387, 10:35 صبح
متغیر ABMP  رو از چه نوعی تعریف کنم؟
من از نوع Tbitmap تعریف  کردم ، ولی در خط دوم خطای تبدیل نوع میده 
نمیتونه Integer  رو به  Tbitmap  تبدیل کنه
؟؟؟؟؟؟؟؟؟؟؟؟؟
vcldeveloper
چهارشنبه 11 اردیبهشت 1387, 11:26 صبح
من از نوع Tbitmap تعریف  کردم ، ولی در خط دوم خطای تبدیل نوع میده 
ترتیب پارامترها اشتباه نوشته شده بود:
 ImageList1.GetBitmap(0,ABMP);
hadisalahi2
چهارشنبه 11 اردیبهشت 1387, 14:15 عصر
procedure TForm1.Button1Click(Sender: TObject);
 var ABMP:TBitmap;
begin
ABMP := TBitmap.Create;
ImageList1.GetBitmap(0,ABMP);
Image1.Picture.Graphic.Assign(ABMP);
ABMP.Free;
end;//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
این کد رو نشوشتم ولی خطای زیر رو میده.
[Validation at Address 00450846 in module project.exe
B-Vedadian
چهارشنبه 11 اردیبهشت 1387, 15:52 عصر
حق با شماست
procedure TForm1.Button1Click(Sender: TObject);
begin
    Image1.Picture.Bitmap := TBitmap.Create;
    ImageList1.GetBitmap(0,Image1.Picture.Bitmap);
end;
دقت کنید که اگر بعد از اولین بار ساختن Bitmap دیگر نباید آن را بسازید
hadisalahi2
چهارشنبه 11 اردیبهشت 1387, 16:18 عصر
ممنون از لطفتون
ولی این حالت عکس داخل ImageList  رو خیلی کوچک میندازه داخل Image 
اگه بخوام عکسهایی رو که به ImageList  اضافه کردم به همون سای اصلی  در Image  قرار بگیرند باید چی کار کنم؟
vcldeveloper
چهارشنبه 11 اردیبهشت 1387, 16:38 عصر
اگه بخوام عکسهایی رو که به ImageList  اضافه کردم به همون سای اصلی  در Image  قرار بگیرند باید چی کار کنم؟
ImageList عکس های بزرگ قبول نمیکنه. در نتیجه هر عکسی که در ImageList ذخیرخ کنید، اندازه اش کوچک هست. فکر کنم حداکثر اندازه تصویر برای ImageList باید 32x32 باشه.
B-Vedadian
چهارشنبه 11 اردیبهشت 1387, 20:43 عصر
آقاي کشاورز
تا 256 در 256 که من امتحان کردم، اشکالي ايجاد نشد. MSDN هم چيزي از محدوديتش نگفته.
آقاي صلاحي
اين کامپوننت براي نگاهداري تصاوير به اندازه هاي بزرگ مناسب نيست. محتويات تصوير بصورت رشته هگزادسيمال ذخيره ميشن که اندازه Resource رو خيلي بزرگ و بارگذاري رو کند ميکنه. بعضي وقتها ديگه بالا نميآد!
براي اينکه تصوير رو تو برنامه نگه داريد اونو تو  مستقيما تو رسورس بذاريد.
اول يک فايل به نام مثلا Pics.rc درست کنيد که تو اون مينويسيد
MyPic1 RCDATA "C:\test1\mypic.jpg"
بعدش با brcc32ي بورلند همين رو کامپايل کنيد. در نهايت تو رويداد OnCreate فرمتون
var
  x: TResourceStream;
  y: TJPEGImage;
begin
  x := TResourceStream.Create(HInstance, 'MyPic', RT_RCDATA);
  y := TJPEGImage.Create;
  y.LoadFromStream(x);
  Image1.Picture.Bitmap := TBitmap.Create;
  Image1.Picture.Graphic.Assign(y);
  y.Free;
  x.Free;
end;
vcldeveloper
پنج شنبه 12 اردیبهشت 1387, 03:25 صبح
تا 256 در 256 که من امتحان کردم، اشکالي ايجاد نشد. من نتونستم با استفاده از متدهای Add و GetBitmap عکس بزرگی رو درش ذخیره کنم. عکس رو میگیره، ولی اونو Stretch یا Crop میکنه به سایز کوچیک. Help دلفی هم میگه که باید همه عکس ها یک سایز باشند.
procedure TForm1.Button1Click(Sender: TObject);
var
  Index : integer;
begin
  ImageList1.Clear;
  //Import an image from Image1 control.
  Index := ImageList1.Add(Image1.Picture.Bitmap,nil);
  //Export an image from ImageList to Image2 control.
  ImageList1.GetBitmap(Index,Image2.Picture.Bitmap);
  Image2.Refresh;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
  if OpenPictureDialog1.Execute then
    Image1.Picture.LoadFromFile(OpenPictureDialog1.Fil eName);
end;
B-Vedadian
پنج شنبه 12 اردیبهشت 1387, 08:56 صبح
من که بعد تغییر propertyهای عرض(Width) و ارتفاع(Height) به 256 و بعدش استفاده از خود ImageListEditor بدون مشکل این کار رو انجام دادم.
البته اگه نخواهید تو Design Time بهش تصویر اضافه کنید، من چک کردم و با مقادیر بزرگ تر هم مشکلی نداره. در عین حال باید اندازه تمامی تصاویر یکسان باشه.
hadisalahi2
پنج شنبه 12 اردیبهشت 1387, 09:30 صبح
ممنون از لطف شما
آقای ودادیان اگه من مثلا 200 عکس داشته باشم ، همه رو باید به همین روش داخل فایل resource  بذارم.
در ضمن توی این خط 
  x := TResourceStream.Create(HInstance, 'MyPic', RT_RCDATA);
"My pic " اسم همون فایلی که توی فایل rs گذاشتید؟
hadisalahi2
پنج شنبه 12 اردیبهشت 1387, 09:34 صبح
جناب استاد کشاورز ، من یه برنامه با دلفی دارم که باید یک محیط مالتی مدیا مثل نرم افزارهای Director یا Falsh  رو باید شبیه سازی کنه. تقریبا باید 500 تا عکس رو  برای منوها و دکمه ها و سایر قسمتها وارد دلفی کنم ، حالا به نظر شما بهتره عکسها رو چه جوری داخل برنامه قرار بدم؟
B-Vedadian
پنج شنبه 12 اردیبهشت 1387, 09:42 صبح
نه؛ اشتباه لپی بود:بامزه:، باید بجای MyPic همون MyPic1 یعنی عنوان resource  رو بذارید. برای درست کردن رسورس از تعداد زیادی فایل، بورلند امکانی نذاشته ولی تو VisualStudio می تونید همه فایلهاتون رو یکجا به یک resource اضافه و اون رو کامپایل کنید.
hadisalahi2
پنج شنبه 12 اردیبهشت 1387, 10:03 صبح
پس این طوری یعنی باید برای هر عکس یه فایل rs ایجاد کنم ؟
شما راه بهتری پیشنهاد نمیکنید؟
B-Vedadian
پنج شنبه 12 اردیبهشت 1387, 11:19 صبح
گفتم که، چند تا فایل .rc لازم نیست. تو یک فایل، برای همه تصاویر رکورد مشابه ایجاد کنید.
vcldeveloper
پنج شنبه 12 اردیبهشت 1387, 16:04 عصر
من که بعد تغییر propertyهای عرض(Width) و ارتفاع(Height) به 256 و بعدش استفاده از خود ImageListEditor بدون مشکل این کار رو انجام دادم.
جالبه، تا حالا فکر می کردم که چون کامپوننت non-visual هست، اصلا Height و Width براش معنی نداره و بهش توجه نمی کردم.
من یه برنامه با دلفی دارم که باید یک محیط مالتی مدیا مثل نرم افزارهای Director یا Falsh رو باید شبیه سازی کنه. تقریبا باید 500 تا عکس رو برای منوها و دکمه ها و سایر قسمتها وارد دلفی کنم ، حالا به نظر شما بهتره عکسها رو چه جوری داخل برنامه قرار بدم؟
برای دکمه ها و تصاویر منوها همین ImageList خوبه بخصوص که Toolbar ها، ActionManager و Menu ها راحت باهاش کار می کنند. برای عکس های دیگه می تونید از Resource هم استفاده کنید.
hadisalahi2
پنج شنبه 12 اردیبهشت 1387, 19:16 عصر
از لطف دوستان خیلی ممنونم
ولی منظور من برای استفاده از Image List  این بود که میخواستم دکمه هایی بسازم که دو حالت Up , Over  داشته باشه ، مثل دکمه های فلش. 
راه های پیشنهادی شما بسیار عالی بود ولی مشکل اینه که چون باید سریع این تعویض تصاویر انجام بگیره استفاده از Resource  کنده و ImageList  هم عکسها رو به اندازه دلخواهی که من میخوام نمیتونه ذخیره کنه . ممنون میشم اگه راه دیگه ای برای این کار به من پیشنهاد کنید. 
به هر حال از لطفتون ممنونم
 
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.