View Full Version : كليد تركيبي ctrl + z در memo
جواد ملاولی
جمعه 21 اسفند 1388, 21:04 عصر
سلام. در شيء memo (در دلفي 2010)، كليد هاي تركيبي ctrl + z فقط يك مرحله به قبل برميگردونه. نميشه كاريش كرد كه بينهايت بشه و يا حداقل بيشتر از يك بار بشه؟
Felony
شنبه 22 اسفند 1388, 05:45 صبح
خودتون میتونید پیاده سازیش کنید .
mdhp_2005
شنبه 22 اسفند 1388, 09:09 صبح
خودتون میتونید پیاده سازیش کنید .
با سلام
ميشه بيشتر توضيح بديد.
SAASTN
شنبه 22 اسفند 1388, 20:43 عصر
ساده ترین کار اینه که تابع Change رو بازنویسی کنید و بعد از هر تغییر یک کپی از Lines در یک آرایه نگه داری کنید. و همچنین تابع KeyPress رو هم باز نویسی کنید و در صورتی که Ctrl+z فشرده شده بود بجای inherited عملیات جایگزینی آخرین کپی رو انجام بدید.
البته این کار باید مدیریت بشه مثلا اگر بعد از هر بار Change یک کپی نگه دارید با هر بار undo تنها آخرین کاراکتر درج شده حذف خواهد شد. که این به بزرگ شدن بیش از حد و بی مورد آرایه هم منجر می شه. مثلا باید برای مجموعه ای از عملیات درج یا حذف تنها یک کپی نگهداری شود.
تا اوجایی که خاطرم هست برای Paste هم یک Message می اومد.
Felony
شنبه 22 اسفند 1388, 22:23 عصر
به وسیله پشته میتونید پیاده سازیش کنید ، یعنی تغیرات رو در یک آرایه ذخیره کنید و در رویداد OnKeyDown شئ Memo کلیدها ترکیبی Ctrl و Z رو تشخیص داده و آرایه رو از آخر به اول با هر بار فشار دادن Ctrl و Z به متن Memo اضافه کنید .
SAASTN
شنبه 22 اسفند 1388, 23:37 عصر
توجه کنید که اگه با ارایه کاملا به شکل پشته رفتار کنید امکان redo از بین میره. عناصر آرایه بعد از این که Ctrl+Z فشرده شد هنوز باید نگهداری شوند تازمانی که متن دوباره تغییر کند.
alinikaein
دوشنبه 24 اسفند 1388, 16:17 عصر
با هر بار نگهداري در يك آرايه، كه مقدار زيادي از فضاي حافظه استفاده ميشه. مخصوصاً اگه قرار باشه كار ما شامل گرافيك هم باشه.
آيا راه بهتري وجود نداره؟ برنامههايي مثل Word چه راهي استفاده ميكنند؟
يك سؤال متفرقه هم بپرسم: فتوشاپ چگونه اين قضيه را پيادهسازي ميكنه؟
SAASTN
دوشنبه 24 اسفند 1388, 19:34 عصر
من قبلا هم عرض کردم، این ساده ترین راهه. راهه درستش اینه که تمامی فرامین ویرایشی نگهداری بشن و موقع undo عکس فرمان اجرا بشه. مثلا نگهداری شود که در سطر X کاراکتر Y متن 'Text' درج شد. خوب موقع undo وقتی به این فرمان می رسیم باید متن مشخص شده رو از موقعیت مشخص شده حذف کنیم. اما این کار پیچیدگی زیادی داره و خیلی bugگیره.
اما توی یک برنامه ای مثل فتوشاپ فکر می کنم راهی غیر از نگهداری هر مرحله از ویرایش وجود نداشته باشه. شما مثلا فرض کن با ابزار قلمت یک خط روی تصویر بکشی. حالا در صورتی که بخوای به تصویر قبل برگردی راهی غیر از جایگزین کردن تصویر قبلی نداری. چون مثلا اگر بخوای از پاک کن به عنوان معکوس فرمان قلم استفاده کنی لزوما به تصویر قبلی نمی رسی.
حالا شاید از یک راههایی برای بهینه سازی مصرف حافظه استفاده کنن. مثلا با هر فرمان فقط ناحیه تغییر کرده رو، اون هم فقط در کانالهای تغییر کرده نگهداری کنن. مثلا اگه از ابزار پاک کن استفاده کنی چون فقط رو کانال آلفا تاثیر داره و نه روی کانالهای رنگی، کافیه تنها ناحیه تحت تاثیر ابزار در کانال آلفا نگهداری بشه.
Felony
سه شنبه 25 اسفند 1388, 07:25 صبح
بستگی به نحوه پیاده سازی شما هم داره ، در برنامه هائی مثل فتوشاپ که ابزارها گرافیکی دارند و برای انجام عملیات Undo و Redo حافظه زیادی نیاز دارند تمام عکس ذخیره نمیشه ( مثلا وقتی شما با پاکن یه قسمت از عکس رو پاک میکنید فقط مختصات قسمت پاک شده با رنگ هر پیکسل ذخیره میشه و احتمال بسیار زیاد روی دیسک سخت این کار رو انجام میده یعنی تغییرات رو تو یه فایل مینویسه و در زمان undo و Redo تغییرات رو از فایل میخونه .
Mahmood_M
سه شنبه 25 اسفند 1388, 08:06 صبح
برنامه هايي مثل PhotoShop يا Word از فايلهايي به عنوان Temp براي اين موارد نگهداري مي كنند ، براي برنامه هاي بزرگي مثل PhotoShop يا Word كه عمليات زيادي توشون انجام مي گيره بهترين روش استفاده از يك فايل براي ثبت تغييرات هست ، علاوه بر اين در برنامه فوتوشاپ براي تعداد آيتمهاي History محدوديت وجود داره تا فايل Temp به حد نامناسبي افزايش حجم نداشته باشه ، مثلا PhotoShop CS 3 وقتي شروع به كار مي كنه يك فايل به حجم بيش از 400 مگابايت در پوشه ي Temp مي سازه براي ذخيره ي تنظيماتش ...
مي شه براي ذخيره سازي اطلاعات از فايلهاي Dat كه در دلفي به Typed Files معروف هستند استفاده كرد ، يعني اطلاعات هر Undo ! رو به صورت يك ركورد در فايل ذخيره و بعد بازيابي كرد ، كار كردن با اين فايلها نسبتا ساده هست (http://delphi.about.com/od/fileio/a/fileof_delphi.htm) ...
موفق باشيد ...
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.