ورود

View Full Version : سوال: نحوه ساخت panel خاص



hamid_14
جمعه 24 خرداد 1392, 12:18 عصر
دوستان چطوری میشه پنلی مثل این تصویر درست کرد.یعنی با کلیک روی تایتل پنل باز و بسته بشه.البته تو مجموعه raize کامپوننت rzsizepanel هست اما نمیشه بجای hotspot متن یا تصویر گذاشت.لطفا راهنمائی کنید

alaveh
جمعه 24 خرداد 1392, 14:00 عصر
در ساده ترین حالت اینجوریه :


procedure TForm1.Panel1Click(Sender: TObject);
begin
if panelup then
begin
Panel1.Top:=180;
panelup:=False;
end else begin
Panel1.Top:=100;
panelup:=True;
end;
end;


1 : توی FormActivate باید panelup:=True رو بنویسی .
2 : panelup یک متغیر بولین و گلوباله .

البته خودت میدونی این مثاله و اسمها و متغیرها و عددها و .... باید طبق سلیقه خودت تغییر کنه . میتونی روی این قضیه بیشتر کار کنی . مثلا تایمر قرار بدی روی فرمت و هر بعد از هر کلیک روی پنل ، تایمر روشن بشه و هر 5 میلی ثانیه مثلا 5 واحد به Top اضافه بشه و وقتی Top به مقدار پایانی خودش که مد نظرتونه رسید Timer خاموش بشه . اینجوری یوزرمیبینه که داره آروم آروم پنل بالا و پایین میره .

hamid_14
جمعه 24 خرداد 1392, 14:32 عصر
درسته اما در این روش یک مشکلی هست اگه بخواهیم چیدمان عناصر درست باشه وقتی فرم ماکزیمم بشه بهم میریزه حتی با تنظیم anchors.
مثلا در تصویر پست 1 پنل تا وسط فرم رو گرفته و اگه با این روش فرم ماکزیموم بشه جای پنل بهم میریزه.
راهی نیست که مجبور نباشیم به پنل اندازه بدیم؟

یوسف زالی
جمعه 24 خرداد 1392, 16:39 عصر
شما دو تا روش کلی داری:
1- استفاده از مقادیر دقیق برای اندازه، مثل این که بگی اندازه در حالت بسته 10 و در حالت باز 100 است.
2- استفاده از درصد بندی اندازه، مثلا بگی اندازه در حالت باز شده 50 درصد اندازه ی فرم باشه.

در مورد دوم شما باید در OnResize فرم کد بنویسید. یا از Anchors استفاده کنید.
پیشنهاد من اینه که یک کامپوننت براش بنویسید که تمام موارد بالا رو توش مدیریت کرده باشه.
اصلا کار سختی نیست.

hamid_14
جمعه 24 خرداد 1392, 17:59 عصر
شرمنده ولی میشه بیشتر توضیح بدید من تازه کارم:خجالت:
مثلا چطوری درصد بندی کنم؟
از anchors در روش اول استفاده کردم ولی جواب نداد

یوسف زالی
جمعه 24 خرداد 1392, 20:09 عصر
مثلا باید در رویداد OnResize بنویسی Panel.Heigth := Self.Height div 2

khorsandreza
چهارشنبه 02 مرداد 1392, 20:41 عصر
شما دو تا روش کلی داری:
2- استفاده از درصد بندی اندازه، مثلا بگی اندازه در حالت باز شده 50 درصد اندازه ی فرم باشه.

سلام دوست گرامی
شما در سطر بالا فرمودین بصورت در صد مقدار دهی بشه من تا حالا اطلاع نداشتم که امکانش هست تو دلفی میشه طول و عرض اشیاء را بصورت مقادیر در صد داد یک مثال کوچلو برای پنل می خواستم
و سوال دوم که شاید به این سوال بی ربط باشه امکانش هست ما بعضی اشیاء بدون آنکه بصورت کامپوننت جدیدی بسازیم مثل محیط وب بشکل CSS ساخته بشه و شکل آن شی را در همه جا یک مدل داشته باشیم

یوسف زالی
چهارشنبه 02 مرداد 1392, 21:04 عصر
نه منظورم این نبود، منظورم محاسبات به صورت درصدی از طول و عرض بود نه این که در دلفی بگی طول 20 در صد، می تونی بگی با برنامه نویسی طول = 20 درصد طول فرم...



procedure TForm1.FormCreate(Sender: TObject);
begin
FRate := Panel1.Width / Width;
end;

procedure TForm1.FormResize(Sender: TObject);
begin
Panel1.Width := round(FRate * Width);
end;


منظورتون از سوال دوم اسکین هست؟
واضح تر بگید.

khorsandreza
چهارشنبه 02 مرداد 1392, 21:38 عصر
در مورد سوال دو تصویر زیر ببینید من با استفاده از پنل و کلید یک TitlePanel برای فرم هایم ساختم در موقع ساخت فرم جدید باید ای اشیاء را کپی پیست کنم هر دفعه برای کلید ها رویداد تعریف کنم که وقتی فشرده شد بسته بشه یا منوی فرم را نمایش بده میخواستم بدانم بجای این که این دستورات (دستور بست فرم و دستورات منو ) در هر فرم بنویسم بصورت کلاس مشتق شده از یک کامپوننت و ... باشه همانطور که در تصویر می بینید در تمامی فرمهای من این قسمت رنگی شده وجود دارد.

gholami146
چهارشنبه 02 مرداد 1392, 22:58 عصر
چرا از دوک سایت (DocSite Panel)پنل استفاده نمی کنید تو مجموعه دیو اکسپرس یک عالیشو میتونید پیدا کنید

یوسف زالی
چهارشنبه 02 مرداد 1392, 23:35 عصر
برای اجتناب از تکرار اون قطعات مشترک در تمام فرم هاتون می تونید فرم ها رو از هم دیگه مشتق کنید.
یک فرم رو به عنوان مستر فرم در نظر بگیرید و همگی رو از این مشتق کنید.
تمام کد های مشترک فقط یک بار در این فرم مستر قرار می گیرند.
فرم های جدید هم همگی این خصوصیات رو به ارث می برند.

khorsandreza
پنج شنبه 03 مرداد 1392, 02:54 صبح
برای اجتناب از تکرار اون قطعات مشترک در تمام فرم هاتون می تونید فرم ها رو از هم دیگه مشتق کنید.
یک فرم رو به عنوان مستر فرم در نظر بگیرید و همگی رو از این مشتق کنید.
تمام کد های مشترک فقط یک بار در این فرم مستر قرار می گیرند.
فرم های جدید هم همگی این خصوصیات رو به ارث می برند.

سلام
مهندس مشکل شد دو تا :ناراحت:
این قسمت را نمدونم چطوری از فرم اصلی مشتق کنم فرض را بر این می گذاریم همان پنل بالا ر در فر اصلی داریم حالا بخواهیم در یک فرم دیگه از ان پنل استفاده کنیم چکار باید کرد نکته اولش را می دانم فرم اصلی را باید Use کنیم دیگه بقیه اش را نمی دانم
ممنوم میشم مثال کوچلو بذارین

یوسف زالی
جمعه 04 مرداد 1392, 04:22 صبح
یک پروژه جدید ایجاد کنید.
یک فرم ایجاد کنید (این فرم ترجیحا MainForm نباشد)
چند تا چیز میز بندازید روش و توی یک رویدادش هم مثلا یک کد ShowMessage بنویسید.
ذخیره کنید.
از منو New -> Other تب نام پروژه تون رو انتخاب کنید و روی نام فرمی که الان ایجاد کردید دو بار کلیک کنید تا یک نمونه اشتقاق از همین فرم براتون ساخته بشه.
همون طور که می بینید فرم جدید تمام خصوصیات فرم پدر رو داره، می تونید اشیایی رو بهش اضافه کنید.
تمام.