PDA

View Full Version : چطور لیست فرمهای Available



محمد دادودنیا
دوشنبه 06 آذر 1385, 03:57 صبح
چطور لیست فرمهای که در یک پروژه به صورت Available در آمدند رو میشه پیدا کرد
لیست فرمهای که Autocreate ‌هستند رو میدونم با


For I:=0 To Application.ComponentCount-1 Do
Memo1.Lines.Add(Application.Components[I].Name);

میشه پیدا کرد ولی فقط Available‌ها ؟

اَرژنگ
دوشنبه 06 آذر 1385, 04:16 صبح
این ماله دلفت دات نته؟ و یا ۳۲ بیت؟
مثلاً یک فرم را چطوری در یک پروژکت Available میکنید؟

ghabil
دوشنبه 06 آذر 1385, 04:49 صبح
Available فکر میکنم منظورش اینه که از آبجکتی از کلاسش موجود باشه یعنی Create شده باشه، که Screen.Forms لیست این فرمهارو داره.

اَرژنگ
دوشنبه 06 آذر 1385, 05:04 صبح
Available فکر میکنم منظورش اینه که از آبجکتی از کلاسش موجود باشه یعنی Create شده باشه، که Screen.Forms لیست این فرمهارو داره. فکر نکنم، چونکه Application.Components هم همان فرمهایه Create شده را داره.

محمد دادودنیا
دوشنبه 06 آذر 1385, 06:44 صبح
نه نه اگه در قسمت Option در دلفی
برید می تونید فرمها رو از حالت ساختن خودکار در بیارید
منظور اونه

اَرژنگ
دوشنبه 06 آذر 1385, 06:47 صبح
این را با دلفی دات نت لازم دارید و یا با لفی ۳۲ بیت؟
مشلی که میخواهید حل کنید اساساً چیه؟

محمد دادودنیا
دوشنبه 06 آذر 1385, 06:53 صبح
دلفی معمولی32

محمد دادودنیا
دوشنبه 06 آذر 1385, 06:59 صبح
چیزی که اقای قابیل می گن وقتی که فرمها Create بشند یا در قسمت AutoCreate باشند
رج ضمیمه بالا
ولی من لیست لیست فرمهای 3 به بعد رو با کد می خوام بدست بیاورم تا
1- اولا سرعت اجرای برنامه در لحظه شروع بیشتر بشه چون می دونید که که فرمهها در قسمت AutoCreate باشند تا آنها ساخته بشند در لحظه اول زمان می بره مخصوصا اگر بیشتر 100 فرم داشته باشی
2- می خوام فقط یه تعدادی از این فرمها رو کاربر اجازه دسترسی داشته باشه مگر در حالتی که Manager به هش دسترسی بده یعنی لیست اونها رو به Manager ‌نشان بدم تا Manager انتخاب بکنه که به کدوم ها دسترسی داشته باشه ؟

اَرژنگ
دوشنبه 06 آذر 1385, 07:03 صبح
روشه اتوماتیک وجود نداره، چونکه در ت恕وری برلد مگه که کمپایلرشان اپتمایز شده و اگر که کدی استفاده نشده باشه ، در آن سورت لینک نمیشه.
یعنی اینکه با داشتن فرم در یک پروضه کافی نیست، اگر ازش جایی استفاده نشده باشه اصلاً جزو پروچه نمیشه.
رواشه دیگر اینه که از کلاس رفرانس استفاده کنید و یک رفرانس از تمامه کلاس فرمها را خودتان رجیسر کنید، معمولان در قسمت initialization را class refrence رجیستر میکنند، ولی باید شما تمامه فرمها را دستی رجیتر کنید.
--------------------

چیزی که اقای قابیل می گن وقتی که فرمها Create بشند یا در قسمت AutoCreate باشند
رج ضمیمه بالا
ولی من لیست لیست فرمهای 3 به بعد رو با کد می خوام بدست بیاورم تا
1- اولا سرعت اجرای برنامه در لحظه شروع بیشتر بشه چون می دونید که که فرمهها در قسمت AutoCreate باشند تا آنها ساخته بشند در لحظه اول زمان می بره مخصوصا اگر بیشتر 100 فرم داشته باشی
2- می خوام فقط یه تعدادی از این فرمها رو کاربر اجازه دسترسی داشته باشه مگر در حالتی که Manager به هش دسترسی بده یعنی لیست اونها رو به Manager ‌نشان بدم تا Manager انتخاب بکنه که به کدوم ها دسترسی داشته باشه ؟
شما به دلفی اسکریپتینگ احتیاج دارید، دلفی معمولی برایه اینکارها خوب نیست.

محمد دادودنیا
دوشنبه 06 آذر 1385, 07:14 صبح
استفاده از ورژن دیگه منتفی
اگه می شه در مورد Initilize‌بیشتر توضیح بده
منظور همون که در Unit (توی یونیت هر فرم در قمست Intilize)فرم اونو ریجیستر کنم؟
--------------------
میشه در قسمت Initilize‌فرم رو یکبار بسازم و دوباره ببندم ولی مشکل اول باقی می مونه
یعنی سرعت اجرا

اَرژنگ
دوشنبه 06 آذر 1385, 07:49 صبح
چیزی که اقای قابیل می گن وقتی که فرمها Create بشند یا در قسمت AutoCreate باشند
رج ضمیمه بالا
ولی من لیست لیست فرمهای 3 به بعد رو با کد می خوام بدست بیاورم تا
1- اولا سرعت اجرای برنامه در لحظه شروع بیشتر بشه چون می دونید که که فرمهها در قسمت AutoCreate باشند تا آنها ساخته بشند در لحظه اول زمان می بره مخصوصا اگر بیشتر 100 فرم داشته باشی
2- می خوام فقط یه تعدادی از این فرمها رو کاربر اجازه دسترسی داشته باشه مگر در حالتی که Manager به هش دسترسی بده یعنی لیست اونها رو به Manager ‌نشان بدم تا Manager انتخاب بکنه که به کدوم ها دسترسی داشته باشه ؟
با خواندن این پستتان میبینم که چیزی که شما لازم دارید فقط فرمهایتان را داینامیک create کنید.

در این حالت فقط هر وقتی که کاربر به فرمی احتیاج پید میکند create میشه، من همیشه از همین روش استفاده میکنم و به جز فرمه اصلی بقیه فرمها را فقط وقتی لازم هستند createمیکنم. این روش ساده شیئگرایی است و خوب هم کار میکنه.

محمد دادودنیا
دوشنبه 06 آذر 1385, 19:51 عصر
آقای آرژنگ مثل اینکه خوب متوجه نشدید
هدف اول اینکه سرعت اجرای برنامه در لحظه شروع یعنی زمانی که کاربر برنامه رو rUN‌می کنه سریع بشه
درسته داینامیک ساختن رو وقتی که فرم رو کاربر انتخاب می کنه انجام می دم ولی مشکل اینجاست که ممکن Manager که می خواهد به کاربر دسترسی بدهد تا آن لحظه فرمهای به صورت داینامیک Create نشده باشند و من باید لیستی از تمام فرمها چه اونهای که Create‌شدن چه اونهای که تا این لحظه Create‌نشدن (یعنی در پروژه وجود داره ولی در لست فرمهای Availble هستند ) چرا که باCreate‌شدن یه فرم تازه به لیست Application.Component یا Screen.Forms اضافه می شه

ضمنا در مورد مطلب آقای کشاورز

اگر در یک پروژه فرمی Create نشده باشه پس آون در پروژه نیست
اگر یه فرمی در یه پروژه باشه چه AutoCreate‌باشه چه Available پس حتما آدرس یا اثر یا نشانه ای از اون فرم باید در فایل Exe‌ باید باشه تا در موقع لزومCommand OS اونو صدا بزنه پس حتما یه جایی هست که این لیست رو بشه در هنگام اجرا پیدا کرد

ghabil
دوشنبه 06 آذر 1385, 22:10 عصر
ببین این که گفتن فرمها رو زمان احتیاج کریت کنی و زمانی که نیاز نداری آزاد کنی ، دقیقا کاریه که حتما باید بکنی و اصولا همه فرمها رو از اول ساختن برای پروژهای متوسط و بزرگ کاره بسیار غلطیه ، اما کاری که میخوای بکنی اینه که باید یکسری سطح دسترسی برای کاربر ذخیره بکنی و قبل از ساخته شدن هر فرمی ببینی آیا کاربر اجازه کریت کردنش رو داره یا نه.
حالا اینکه اصرار داری لیست فرمهارو داینامیک داشته باشی نمیدونم چرا چون اول احتمالا نمیحوای دقیقا اسم فرم رو مدیر سیستم نشون بدی بلکه مثلا میخوای معادل فارسی که براش تو برنامه میدی رو نشون بدی ، بعد هم باید به اعضای هر فرم یک مقدار داشته باشی که همراه دسترسی کاربر ذخیره کنی ، پس بهتره که خودت لیست فرمهای برنامت رو بصورت فارسی برای ادمین بسازی .
اما اگر هنوز اصرار داری این کار رو بکنی من چیزی که بنظر میرسه اینه که تو Initilization هر کردوم از فرمهات بگی خودشون رو به یک آرایه Globalاضافه کنند و بعدا از اون آرایه این لیت رو بخونی...

محمد دادودنیا
دوشنبه 06 آذر 1385, 23:18 عصر
اینکار جواب می ده ولی فرض کن من بیشتر از 100 تا فرم دارم
بالاخره دلفی باید لیست این فرمهای Available‌رو جایی داشته باشه دیگه

اَرژنگ
سه شنبه 07 آذر 1385, 04:49 صبح
اینکار جواب می ده ولی فرض کن من بیشتر از 100 تا فرم دارم
بالاخره دلفی باید لیست این فرمهای Available‌رو جایی داشته باشه دیگه
این لسیت فقط در زمان Design Time معنی داره،

محمد دادودنیا
سه شنبه 07 آذر 1385, 05:20 صبح
این لسیت فقط در زمان Design Time معنی داره،
بدترین حالت اینکه یه آدرس در جایی باید قرار بده دیگه ولی بالاخره باید Object های که داخل اون فرم باید به Exe‌لینک بده اگر می گید نه پس چرا وقت کامپایل باید DFM باشه؟

محمد دادودنیا
چهارشنبه 08 آذر 1385, 03:20 صبح
ببین این که گفتن فرمها رو زمان احتیاج کریت کنی و زمانی که نیاز نداری آزاد کنی ، دقیقا کاریه که حتما باید بکنی و اصولا همه فرمها رو از اول ساختن برای پروژهای متوسط و بزرگ کاره بسیار غلطیه ، اما کاری که میخوای بکنی اینه که باید یکسری سطح دسترسی برای کاربر ذخیره بکنی و قبل از ساخته شدن هر فرمی ببینی آیا کاربر اجازه کریت کردنش رو داره یا نه.
حالا اینکه اصرار داری لیست فرمهارو داینامیک داشته باشی نمیدونم چرا چون اول احتمالا نمیحوای دقیقا اسم فرم رو مدیر سیستم نشون بدی بلکه مثلا میخوای معادل فارسی که براش تو برنامه میدی رو نشون بدی ، بعد هم باید به اعضای هر فرم یک مقدار داشته باشی که همراه دسترسی کاربر ذخیره کنی ، پس بهتره که خودت لیست فرمهای برنامت رو بصورت فارسی برای ادمین بسازی .
اما اگر هنوز اصرار داری این کار رو بکنی من چیزی که بنظر میرسه اینه که تو Initilization هر کردوم از فرمهات بگی خودشون رو به یک آرایه Globalاضافه کنند و بعدا از اون آرایه این لیت رو بخونی...
با تشکر
جواب سوال خودتون رو خودتون دادید چون نمی خوام سرعت اجرا در لحظه شروع (برای پروژه بزرگ) کم باشه دوم اینکه من با اینکه Manager عنوان فرم ها رو ببینه مشکلی ندارم بلکه مشکل اینه که نمی شه لیست فرمهای Available رو با کد بدست بیاورم (؟!):افسرده:

ولی به هر حال من این راه به ذهنم می رسه
یه فایل Text از نام و عنوان فرمها بسازم و بغل فایل Exe بذارم به دو دلیل
1-استفاده از روش آقای آرژنگ به دلیل اینکه باید برای همه فرمها بیام تو قسمت Intilaize اونو به Array‌یا هر لیستی اضافه کنم و توی این پروژه تعداد فرمها زیاده درست نیست و درصد خطا رو هم بالا می بره

دوم اینکه پشتیبانی اون راحت می شه مثلا اگر User به یکی از فرمها دسترسی نداشت و من هم یادم رفته باشه که اون فرم و عنوانش رو به لیست(Text)‌اضافه کنم می شه راحت اسم اونو به Manager بگم تا به لیست (Text) اضافه کنه تا هنگامی که لیست همه فرمها رو می خواد اونم توی لیست باشه

با تشکر از توجه کردنتان ظمنا اگر فکر می کنید روش خوبی نیست لطفا بهم بگید:قلب: