PDA

View Full Version : فرم های تودوتو



داوود
پنج شنبه 17 شهریور 1384, 12:53 عصر
من یک فرم دارم که شامل چند شی است . گاهی اوقات نیاز دارم تا در بین کار با این فرم با زدن کلیدی در داخل فرم اول فرم دومی را باز کنم و بعد از انجام کارهایم با فرم دوم و بستن آن آخرین شیئی را که قبل از باز کردن فرم دوم در فرم اول Active بوده را مجددا فعال کنم. حالا میشه بگین چجوری؟
با تشکر

Touska
پنج شنبه 17 شهریور 1384, 14:25 عصر
می تونی از یکی از کامچوننتهای Lmd استفاده کنید.

مثل ویندوز هر جا که به موس بگی میره.

hkiani
جمعه 18 شهریور 1384, 19:59 عصر
سلام
برای این که با زدن یک کلید فرم دیگری باز شود، از کدنویسی رویداد OnKeyPress استفاده کنید. یک راه جالب‌تر هم برای این کار استفاده از ActionList می‌باشد.
بعد از بستن فرم دوم به طور خودبخود همان کامپوننتی که قبلا در فرم اول فعال بوده، باز هم فعال خواهد بود.

اگر مشکل خاصی دارید دقیق‌تر بیان کنید.

داوود
شنبه 19 شهریور 1384, 08:38 صبح
سلام
برای این که با زدن یک کلید فرم دیگری باز شود، از کدنویسی رویداد OnKeyPress استفاده کنید. یک راه جالب‌تر هم برای این کار استفاده از ActionList می‌باشد.
بعد از بستن فرم دوم به طور خودبخود همان کامپوننتی که قبلا در فرم اول فعال بوده، باز هم فعال خواهد بود.

اگر مشکل خاصی دارید دقیق‌تر بیان کنید.

برای باز شدن فرم دوم یک Button که در روی فرم اول قرار دارد زده می شود پس Focus به این دکمه منتقل و سپس فرم دوم باز می شود . پس از بسته شدن فرم دوم مسلما Focus به همین دکمه منتقل خواهد شد.ولی من می خوام Focus به آخرین شی که قبل از زدن دکمه ی باز کننده فرم دوم فعال بوده منتقل شود.

داوود
شنبه 19 شهریور 1384, 08:39 صبح
می تونی از یکی از کامچوننتهای Lmd استفاده کنید.

مثل ویندوز هر جا که به موس بگی میره.

میشه بیشتر توضیح بدهید.

hkiani
یک شنبه 20 شهریور 1384, 07:29 صبح
سلام

برای این کار راه‌حل‌های متعددی می‌توان ارائه داد. البته شرمنده که من به سی‌بیلدر برایتان توضیح می‌دهم ولی در دلفی نیز اصول کار همین است.
یک راه‌حل که الان به ذهن من می‌رسد این است که در فرم اول خود یک متغیر از نوع Component تعریف کنید (در BCB که من کار می‌کنم تایپ آن باید از نوع پوینتر به TComponent باشد احتمالا در دلفی Component یا مورد مشابه دیگری خواهد بود).

TComponent* CurComponent;
برای یکی از کامپوننت‌های فرم اول خود در رویداد OnEnter نام کامپوننت را درون این متغیر ذخیره کنید:

CurComponent = (TComponent*)Sender;
در اینجا از Sender استفاده شده که پارامتر رویداد فوق است. به این ترتیب می‌توان برای سایر کامپوننت‌ها نیز از همین رویداد استفاده نمود و نیازی به کدنویسی مکرر نیست. همین رویداد را به سایر کامپوننت‌های فرم اول خود متصل کنید. البته بجز کامپوننت دکمه‌ای که گفته بودید.
آنگاه در رویداد OnActivate فرم اول خود کامپوننتی را که در متغیر خود ذخیره کرده‌اید را به عنوان کامپوننت جاری انتخاب کنید.

CurComponent->SetFocus();

vcldeveloper
یک شنبه 20 شهریور 1384, 08:19 صبح
http://delphi.about.com/cs/adptips2003/a/bltip0803_4.htm

Naficy
یک شنبه 20 شهریور 1384, 13:14 عصر
به نظرم اگه توی رویداد OnEnter همون دکمه هه، ActiveControl فرم رو بخونین هنوز عوض نشده باشه. هرچند مطمئن نیستم اما امتحانش ضرری نداره.