View Full Version : ایجاد فرم Public(قابل دسترس از سایر فرمها)
moradi_am
دوشنبه 25 خرداد 1383, 07:25 صبح
سلام
من یک تابع مبدل دارم که میخواهم کاربر بتواند در تمام فرمهای برنامه با یک کلید ترکیبی به آن دسترسی پیدا کند(یک کدی بدهد خروجی آن ببیند (شبیه ماشین حساب ) .این فرم باید چگونه تعریف شود ؟
Sepidar
دوشنبه 25 خرداد 1383, 09:05 صبح
سلام
پیشنهاد بنده:
فرم مورد نظر را از حالت autocreate حارج کنید
یک class function به اسم مثلا execute به آن اضافه کنید با کدی شبیه به شکل زیر:
class function TForm1.Execute(var SomeResult:TSomeType):boolean;
begin
with TForm1.Create do
try
Form1.ShowModaless;
;other code here
finally
free;
end;
end;
moradi_am
دوشنبه 25 خرداد 1383, 13:18 عصر
چطوری با کلید میانبر فرم را صدا کنم؟
said ali
دوشنبه 25 خرداد 1383, 16:41 عصر
با سلام
بگرد تو سایت خودم یه دفعه این سوال رو کردم.
moradi_am
سه شنبه 26 خرداد 1383, 11:39 صبح
گشتم پیدا نکردم . Sepidar جان میتونید بیشتر توضیح بدید؟
moradi_am
پنج شنبه 28 خرداد 1383, 09:02 صبح
هل من ناصر ینصرنی؟
آیا کسی هست جواب سوال مارا بدهد؟
idic1
پنج شنبه 28 خرداد 1383, 11:27 صبح
در محیط ویندوز با تفکر داسی برنامه نویسی نکنید :?
روش استاندارد این است که در منوی Tools برنامه خود ، گزینه ماشین حساب را قراردهید و HotKey نیز برای آن تعریف کنید.
در تمام فرمهای شما فعال خواهد بود 8-)
moradi_am
پنج شنبه 04 تیر 1383, 19:27 عصر
دوست عزیز وقتی فرمی را با showmodal باز میکنیم خود فرم اصلی هم در دسترس نیست تا چه برسد به HotKey و یا ShortCut . حتی اگر بصورت show هم باز کنیم باز امتحان کردم جواب نمیدهد . ShortCut فقط وقتی روی فرم اصلی فوکوس میکنیم فعال هست .
مهدی کرامتی
پنج شنبه 04 تیر 1383, 22:22 عصر
با استفاده از تابع RegisterHotkey میتوانید یک Hotkey در برنامه تان تعریف کنید. مثال:
RegisterHOTKEY(Handle,123,mod_control,vk_f7);
این تابع کلید Ctrl+F7 را در کل ویندوز به برنامه شما نسبت میدهد. یعنی این ترکیب کلید حتی در خارج از برنامه شما نیز کار خواهد کرد.
مرحله دوم اینستکه یک Message Handler برای این Hotkey در برنامهتان ایجاد کنید. مثال:
type
TForm1 = class(TForm)
....
....
public
procedure WMHOTKEY(var Message: TMessage); message WM_HOTKEY;
end;
و در بدنه پروسیجر فوق کد موردنظر را بنویسید.
ضمیمه این پست یک مثال است که استفاده از این روش در آن نشان داده شده است.
Pichidehtarin
جمعه 05 تیر 1383, 10:15 صبح
با سلام
احتیاجی نیست برای هر مسئله دنبال جواب های سخت سخت بگردی :
1- اول یه ActionList بذار بعد یه Action تعریف کن که اون فرم رو نمایش بده و برای این Action کلید میانبر تعریف کن .
2- ActionList و اون Action رو تو تمام فرم هایی که میخوای کادر مبدل رو از اونها صدا کنی قرار بده .
به همین سادگی !
مهدی کرامتی
جمعه 05 تیر 1383, 12:10 عصر
ActionList و اون Action رو تو تمام فرم هایی که میخوای کادر مبدل رو از اونها صدا کنی قرار بده .
اونوقت اگر قرار شد کد یکی از Action ها رو تغییر بده چی؟ تو تک تک فرمها اعمال کنه؟
Pichidehtarin
جمعه 05 تیر 1383, 14:34 عصر
اونوقت اگر قرار شد کد یکی از Action ها رو تغییر بده چی؟ تو تک تک فرمها اعمال کنه؟
در حقیقت یه Action بیشتر وجود نداره یا بهتر بگم کد فقط برای یکی از Action ها نوشته میشه .
مگه یادتون رفته که میتونیم رویداد ها رو بهم مرتبط کنیم ؟! :o
مهدی کرامتی
جمعه 05 تیر 1383, 15:54 عصر
خیر، اما در اونصورت باید فرم مورد نظر رو در تمام فرمهای فرعی Use کنیم که اینکار مقداری حافظه را هدر میدهد.
Sepidar
جمعه 05 تیر 1383, 19:32 عصر
خیر، اما در اونصورت باید فرم مورد نظر رو در تمام فرمهای فرعی Use کنیم که اینکار مقداری حافظه را هدر میدهد.
فکر نکنم حاج مهدی. در مورد کلاسها و روتین ها که چیزی نیست که موجب افزایش حافظه مصزفی بشه. در مورد متغیرهایی هم که بصورت عمومی در بدنه یونیت تعریف شدن، حتی اگه 10 بار یه یونیت یوز بشه فقط یه نمونه از اونها ساخته میشه.
راستی یه چیزی بود که کامپوننت ها رو وقتی رو اون مینداختیم از همه جای پروژه فابل دسترسی میشد....
Sepidar
جمعه 05 تیر 1383, 21:01 عصر
راستی با استفاده از DataModul میتوانید کامپوننتهای غیربصریتان را در تمام پروژه قابل دستیابی نمایید.
همچنین TApplicationEvents هم میتوانید تمامی رویدادهای برنامه خود را با کد کمتر به دام اندازید.
موفق باشید.
Sepidar
جمعه 05 تیر 1383, 21:02 عصر
راستی با استفاده از DataModul میتوانید کامپوننتهای غیربصریتان را در تمام پروژه قابل دستیابی نمایید.
همچنین TApplicationEvents هم میتوانید تمامی رویدادهای برنامه خود را با کد کمتر به دام اندازید.
موفق باشید.
مهدی کرامتی
جمعه 05 تیر 1383, 23:25 عصر
در مورد کلاسها و روتین ها که چیزی نیست که موجب افزایش حافظه مصزفی بشه.
مطمئنی؟
برای حفظ Reference هایی که برای ارجاع به کلاسها لازمه آیا حافظه نیاز نیست؟
درسته که چیزی نیست و جزئیه، اما وقتی تعداد فرمهای برنامه 300 تا شد فکر کنم یک چیزی بشه!
در حالی که با استفاده از روش Messaging که در بالا ذکر شد حتی اون مقدار حافظه "جزئی" هم که برای نگهداری Reference ها استفاده میشه دیگه رزرو نمیشه و آزاد میمونه.
این باعث میشه بار برنامه و مصرف حافظه اون در پروژه های متوسط تا بزرگ کلی سبک تر شه.
moradi_am
شنبه 06 تیر 1383, 08:34 صبح
از توجه دوستان تشکر میکنم :flower: . هردو روش را امتحان میکنم . :flower:
Sepidar
شنبه 06 تیر 1383, 13:56 عصر
برای حفظ Reference هایی که برای ارجاع به کلاسها لازمه آیا حافظه نیاز نیست؟
فکر میکنم برای هر کلاسی فقط یه Refrence یکبار برای همیشه ایجاد شه.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.