PDA

View Full Version : مشکل در قرار دادن image



BEHESHT*
جمعه 13 آذر 1388, 16:42 عصر
سلام

خسته نباشید

یه سوال داشتم که تو مباحث هم جستجو کردم موردی پیدا نکردم که مشابه این باشه حتی :ناراحت:

من می خوام یه عکس با فرمت PNG رو روی یک memo قرار بدم اما متسفانه هر چی تلاش می کنم بازم عکس زیرش قرار می گیره :متفکر:

ضمن این که ورژن دلفی هم 2009 هستش

من چطور می تونم این کار رو بکنم ؟ لطفاً راهنمایی بفرمایید :اشتباه:

merced
جمعه 13 آذر 1388, 19:44 عصر
Panel رو مي شه روي Memo گذاشت. عكس رو توي Panel و Panel رو روي Memo بذار

BEHESHT*
شنبه 14 آذر 1388, 01:39 صبح
بسیار ممنون دوست عزیز:خجالت:

تشکر از راهنمایی که فرمودید :بامزه:

اما عکسی که من دارم حالت شیشه ای داره و معلوم شدن پشت بسیار اهمیت داره برام:ناراحت:

راهی دیگه ای برای پیشنهاد نیست :ناراحت:؟

Nima NT
شنبه 14 آذر 1388, 02:29 صبح
روش کلیک راست کن و از قسمت Controls گزینه Bring to Front رو انتخاب کن.
فکر کنم جواب بده.

BEHESHT*
شنبه 14 آذر 1388, 13:25 عصر
ممنون بازم مشکل پرجاست:گریه:

نکنه غیر ممکنه؟:افسرده:

shaporty
یک شنبه 15 آذر 1388, 23:46 عصر
ببین در حالت عادی غیر ممکنه
دنبال راه ساده نباش
در درجه اول میتونی از کامپوننت هایی که مثلا tms برای عکس داده استفاده کنی . اگه هم جواب نداد .
1- متنی که میخوای پشتش باشه رو باید توی یک lable بزاری که بتونی عکس رو بیاری روش . ( روش سریع )
2- عکس رو مدام روی صفحه مونیتور چاپ کنی ( غیر عاقلانه )
3- همه فرم رو توی فلش بسازی بعد بیاریش توی دلفی ( کم کاربرد ولی موثر ) تازه برنامه قشنگ تر هم میشه .

vcldeveloper
دوشنبه 16 آذر 1388, 00:45 صبح
علتش اینه که شی ساخته شده از TImage یک Graphics Control هست، و خودش هندل نداره. رسمش را کنترل والدش برعهده داره، برای همین هم نمیتونه روی کنترل های هندل دار، مثل Memo قرار بگیره.
وقتی این تصویر را در یک Panel قرار میدید، Panel یک کنترل هندل دار هست که به عنوان والد اون تصویر وظیفه رسم آن را برعهده داره. در این شرایط، شما می تونید Panel را روی یک کنترل هندل دار دیگه قرار بدید، و چون رسم تصویر هم برعهده Panel هست، تصویر بالای آن کنترل قرار میگیره، نه زیر آن.

Felony
دوشنبه 16 آذر 1388, 10:28 صبح
با توضیحاتی که آقای کشاورز دادن یک راه حل به ذهنم رسید که تست کردم و جواب داد ، در رویداد OnCreate فرمتون کد زیر رو بنویسید :


Form1.DoubleBuffered:=True;
Memo1.DoubleBuffered:=True;

Image1.Parent:=Memo1;
Image1.Left:=10;
Image1.Top:=10;

و در رویداد OnChange شئ Memo کد زیر :

Image1.Repaint;

یا در کل شئ Image رو به صورت Runtime بسازید .

یک نمونه هم نوشتم و ضمیمه کردم .

BEHESHT*
دوشنبه 16 آذر 1388, 19:36 عصر
بسیار عالی تا حدودی قسمت اعظم مشکلم حل شد ممنون از همگی علی الخصوص آقا مجتبی عزیز :لبخندساده:

ممکنه راجع به عملکرد این دو خط اول توضیح مختصری بدید؟:لبخند:


Form1.DoubleBuffered:=True;
Memo1.DoubleBuffered:=True;

Image1.Parent:=Memo1;
Image1.Left:=10;
Image1.Top:=10;

Felony
دوشنبه 16 آذر 1388, 20:16 عصر
توضیحات دلفی بسیار گویا هستند ، البته اون 2 خط اول در این مورد تقریبا کاری انجام نمیده و شما هم تست کنید اگر فایده ای نداشت حذفش کنید ، من با توجه به اطلاعات قبلیم این کد رو نوشتم و امروز کمی روی خصیصه ی DoubleBuffered تحقیق کردم و به این نتیجه رسیدم روی اشیائی مثل RichEdit تاثیری نداره مگر در مورادی خاص که اون هم بستگی به کار شما داره ، در هر صورت تست کنید ببینید چی میشه .

در کل وقتی این خصیصه False باشه ، کنترل خودش رو مستقیما رسم میکنه ولی وقتی مقدار این خصیصه True بشه کنترل داخل قسمتی از حافظه که به یک Bitmap اختصاص داده شده رسم میشه و سپس برای رسم از اون استفاده میشه و نتیجتا در هنگام رسم مجدد یک کنترل ( Repaint ) کنترل کمتر چشمک میزنه .