ورود

View Full Version : چگونگی تغییر دادن اندازه Panel با قرار گرفتن موس روی آن



اصغر (پآچ)
دوشنبه 13 تیر 1390, 22:35 عصر
سلام دوستان

من یه فرم دارم که از یه پنل در اون استفاده کردم، روی پنل یکسری شی هست که بعلت کمبود فضا مجبور شدم خیلی فشرده اون ها رو قرار بدم حالا می خوام اگه کاربر موس رو روی پنل برد پنل تغییر اندازه بده و عناصر موجود به صورت کاملا قابل رویت و با فضای کافی چیده بشن! و بعد از اینکه موس ار روی پنل کنار رفت دوباره پنل به اندازه اولیه خودش برگردد.

توی کامپوننت Label دوتا Event داریم به نام های OnMouseEnter و OnMouseLeave اما پنل این رویداد ها رو نداره چطور می تونم این کار رو انجام بدم؟

موفق و موید باشید

یوسف زالی
دوشنبه 13 تیر 1390, 23:10 عصر
سلام.
راه حل 1: برای پنل رویداد های مورد نظر رو تعربف کنید.
http://barnamenevis.org/showthread.php?288245-حساس-کردن-دکمه-ها-به-OnEnter-و-OnLeave-(سریالایز-با-رویداد-ها)

راه حل 2: به جای پنل از فریم استفاده کنید تا اسکرول داشته باشید.

اصغر (پآچ)
پنج شنبه 16 تیر 1390, 23:02 عصر
سلام دوستان

این روشی که دوست عزیزم به اون اشاره کردن برای ایمیج قابل استفاده نبود یا من روش استفاده از اون رو نفهمیدم، فریم هم قابلیت کد نویسی برای رویداد OnMouseEnter یا OnMouseLeave نداشت راه کار دیگه ای سراغ دارید برای این کار؟

موفق و موید باشید

یوسف زالی
پنج شنبه 16 تیر 1390, 23:21 عصر
لازم نیست در فریم رویدادهارو اضافه کنید.
برای Image هم میشه اون کارو کرد.
اگر از فریم استفاده می کنید خودش اسکرول داره و لازم نیست که بزرگترش کنید.

اصغر (پآچ)
پنج شنبه 16 تیر 1390, 23:57 عصر
دوست من سلام

من به اسکرول نیاز ندارم، من می خوام وقتی موس میره روی ایمیج یا روی پنل تصویر داخل ایمیج رو از حالت Stretch به حالت Auto size تبدیل کنم و به اصطلاح قابلیت زوم داشته باشه که باید اندازه پنل بزرگ بشه تا کاربر محدوده بزرگتری از تصویر رو بتونه ببینه و بتونه با کلیک روی تصویر روی اون پیمایش کنه یا به اصطلاح تصویر رو با کلیک و درگ جابه جا کنه که بعد از خروج موس از روی پنل باید اون به اندازه قبلش برگرده تا عناصر زیر اون قابلیت دید داشته باشند.

باز هم از راهنماییتون ممنونم و موفق باشید

یوسف زالی
جمعه 17 تیر 1390, 00:59 صبح
شما با کدی که گذاشتم و با کمی تغییر می تونی برای عکس رویداد رو فعال کنی.

اصغر (پآچ)
جمعه 17 تیر 1390, 00:59 صبح
سلام دوستان

پس از کلی جستجو بالاخره یک کد پیدا کردم که می تونه این رویداد ها رو برای پنل شبیه سازی کنه، کد رو برای استفاده سایر دوستان در اینجا قرار می دم شاید کسی مثل من به دردش بخوره:




unit Unit1;

interface

uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls;
type
TForm1 = class(TForm)
Panel1: TPanel;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
private
{ Private declarations }
FOldWndProc: TWndMethod;
FMouseInPanel: Boolean;
procedure PanelWndProc(var Message: TMessage);
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
FOldWndProc:= Panel1.WindowProc;
Panel1.WindowProc:= PanelWndProc;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
Panel1.WindowProc:= FOldWndProc;
end;

procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
mEvnt: TTrackMouseEvent;
begin
if not FMouseInPanel then
begin
mEvnt.cbSize := SizeOf(mEvnt);
mEvnt.dwFlags := TME_LEAVE;
mEvnt.hwndTrack := Panel1.Handle;
TrackMouseEvent(mEvnt);
Panel1.Caption:= 'IN';
FMouseInPanel:= True;
end;
end;
procedure TForm1.PanelWndProc(var Message: TMessage);
begin
if Message.Msg = WM_MOUSELEAVE then
begin
Panel1.Caption:= 'OUT';
FMouseInPanel:= False;
end;
FOldWndProc(Message);
end;

end.



ان شاا... این کد به دردتون بخوره بتونه گره از مشکلاتتون مثل مشکل من باز کنه

موفق و موید باشید.

اصغر (پآچ)
جمعه 17 تیر 1390, 01:16 صبح
سلام دوستان

یه کد دیگه هم که خیلی کوتاهتر از بالایی هست پیدا کردم که به قراره زیره!



procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if (X >= 0) and (Y >= 0) and (X < Panel1.Width) and (Y < Panel1.Height) then
begin
if GetCapture <> Panel1.Handle then
SetCapture(Panel1.Handle);
Panel1.Caption := 'IN';
end
else
begin
ReleaseCapture;
Panel1.Caption := 'OUT';
end;
end;



امیدوارم اینم به دردتون بخوره!

موفق و موید باشید

یوسف زالی
جمعه 17 تیر 1390, 01:24 صبح
کدی که گذاشتید در این خصوص عالی بود.
اما این هم با اون سورس که گفتم:
http://www.persianupload.com/980538
در خصوص عکس درستش کردم.
خوبی این کد اینه که هر نوع رویدادی رو می تونی در کنترلت ایجاد کنی.
مثلا OnDblClick روی CheckBox

اصغر (پآچ)
شنبه 18 تیر 1390, 00:25 صبح
سلام دوست من

کد شما هم خیلی جالب بود نگاهش کردم میشه هر نوع آبجکت رو به این کد ارسال کرد؟
اینجوری باشه که خیلی باحاله...

موفق و موید باشید

یوسف زالی
شنبه 18 تیر 1390, 00:40 صبح
از نظر تئوری بله.
منتها باید مابه ازای اون رو در یونیت بنویسید.
مثلا اگر Image بود فلان چیزها اضافه بشه اگر Button بود چیزای دیگه.