PDA

View Full Version : سوال: Resize کردن در حالت (bsNone)



sara.mahdavi
شنبه 22 تیر 1392, 02:14 صبح
باسلام
می خواستم بدونم آیا وقتی خاصیت Border Style فرم در حالت bsNone قرار داره با کد نویسی میشه (در همون حالت) فرم رو تغییر سایز داد؟
با تشکر

alaveh
شنبه 22 تیر 1392, 02:34 صبح
باسلام
می خواستم بدونم آیا وقتی خاصیت Border Style فرم در حالت bsNone قرار داره با کد نویسی میشه (در همون حالت) فرم رو تغییر سایز داد؟
با تشکر

بله
میشه
یه تست ساده هم بزنید بهتر متوجه میشید .
یک فرم ایجاد کنید و خاصیت Border Style فرم در حالت bsNone قرار بدید . روی فرم یک کلید قرار بدید و اینو در OnClick اون کلید بنویسید :

Form1.Height:=Form1.Height+10;

sara.mahdavi
شنبه 22 تیر 1392, 18:07 عصر
ممنون
ولی من می خوام مثل پنجره های دیگه و قتی موس به لبه های پنجره میرسه با کلیک کردن وکسیدن این اتفاق بیوفته

khorsandreza
شنبه 22 تیر 1392, 18:25 عصر
ممنون
ولی من می خوام مثل پنجره های دیگه و قتی موس به لبه های پنجره میرسه با کلیک کردن وکسیدن این اتفاق بیوفته
وقتی شما استایل را bsNone می کنید نمی تونید از قابلیت rsize استفاده کنید مگر خودتان کد بنویسید مثال یک تصویر کوچک که نشانگر Resize باشد در گوشه فرم قرار دهید بعد بر روی رویداد OnMouseDown دستور زیر را بنویسید

if(Button = mbLeft) and (Shift = [ssLeft]) then
begin
ReleaseCapture;
SendMessage(Self.Handle, WM_NCLBUTTONDOWN, HTBOTTOMRIGHT, 0);
end;


تصاویر را دقت کنید یک فرم هست ولی با روش بالا Resaiz شده

sara.mahdavi
شنبه 22 تیر 1392, 23:48 عصر
ممنون خیلی بهم کمک کردین
فقط اگه بخام عرض (Height) اون تغییر کنه باید چطور عمل کنم؟

gholami146
یک شنبه 23 تیر 1392, 00:38 صبح
با سلام شما میتونید از این کد هم استفاده کنید

//no border BUT resizable
procedure TForm1.CreateParams(var Params: TCreateParams) ;
begin
BorderStyle := bsNone;
inherited;
Params.ExStyle := Params.ExStyle or WS_EX_STATICEDGE;
Params.Style := Params.Style or WS_SIZEBOX;
end;

sara.mahdavi
یک شنبه 23 تیر 1392, 02:04 صبح
با سلام شما میتونید از این کد هم استفاده کنید

//no border BUT resizable
procedure TForm1.CreateParams(var Params: TCreateParams) ;
begin
BorderStyle := bsNone;
inherited;
Params.ExStyle := Params.ExStyle or WS_EX_STATICEDGE;
Params.Style := Params.Style or WS_SIZEBOX;
end;


CreateParams چی هست؟
تاحالا باهاش کار نکردم:ناراحت:

khorsandreza
یک شنبه 23 تیر 1392, 14:46 عصر
ممنون خیلی بهم کمک کردین
فقط اگه بخام عرض (Height) اون تغییر کنه باید چطور عمل کنم؟
در رویداد FormCanResize مقدار NewHeight ثابت بده ان موقع فقط عرض فرم تغییر پیدا می کند و اگر مقدار Resize را True قرار بدی فرم تغییر سایز پیدا نمی کند
ضمننا اگر شما در فرمتان یک پنل قرار دهید و بر روی رویداد OnMouseDown آن دستور زیر را قرار دهید می توانید فرم را جابجا کنید

ReleaseCapture;
SendMessage(Self.Handle, WM_SYSCOMMAND, 61458, 0) ;

یوسف زالی
یک شنبه 23 تیر 1392, 19:21 عصر
Initializes a window-creation parameter data structure.

CreateParams متدیه که در TWinControl برای اولین بار تعریف می شه،
وظیفه این متد اینه که به برنامه نویس این دسترسی رو بده که با OverRide کردنش بتونه نحوه مقداردهی های اولیه رو برای ساخت Window تغییر بده.
یادتون باشه همیشه قبل از بازنویسی این کد باید Inherited بگذارید، مگر در مواقع خیلی خیلی استثنایی.
ویندوز برای ساخت یک Window نیازمند مقادیریه که دلفی اون رو با رکورد TCreateParams تامین می کنه.
بعضی از این مقادیر باعث تغییر شکل و برخی باعث تغییر در رفتار ویندو ها می شن، با بازنویسی این متد در حقیقت دارید به ویندوز "قبل" از ساخت یک فرم می گید که اون رو به چه شکلی براتون بسازه.
مقادیری از این تنظیمات در setting خود فرم وجود داره، از جمله Border و BorderIcon. باقی رو باید با تغییر دادن این متد بازنویسی کنید.
خوندن اینجا هم خالی از لطف نیست:
http://msdn.microsoft.com/en-us/library/windows/desktop/ff381403(v=vs.85).aspx

khorsandreza
یک شنبه 23 تیر 1392, 20:02 عصر
سلام دوست گرامی You-See
من یکبار از این روش استفاده کردم اگه هم اشتباه نکنم کدهایش را از این انجمن دریافت کرده بودم با توجه ه دستکاری که روی ساختن ویندور انجام می گرفت مشکلات خاصی پیش می امد مثلا وقتی موس را روی ایکون بستن پنجره می بردی ایکون ناپدید می شد و یا می رفت سمت چپ و یا وقتی در قسمت سمت چپ کلیلک می کردی پنجره بسته میشد ویا کلا وقتی ساخته میشد سیاه میشد خیلی کلافه ام کرد اخر این کدهای بالائی را پیدا کردم بیشتر از درج این مطلب این بود بدانم این اشکال من بود در کد نویسی (متاسفانه ان کدها را ندارم ) یا کلا این نوع دستکاری های یک کار تخصصی خاصی است؟

یوسف زالی
یک شنبه 23 تیر 1392, 21:56 عصر
سلام دوست عزیز.
خب باید کدتون رو دید تا بشه نظر داد.
ولی دستکاری این آیتم ها یکمی پیچیده هست و به سادگی نیست.
احتمال می دم که Inheritd رو استفاده نکرده بودید یا این که Params رو کاملا خالی کرده بودید...
برای این که بدونید دقیقا هر کدوم چه کاری انجام می ده باید در MSDN مطالب Documentation مربوط به اون رو کامل ببینید تا مطمئن بشید که Side Effect منفی روی کارکرد عادی برنامتون نداشته باشه.
بنده از کد بالا (بدون ست کردن ExStyle) در پروژه هام استفاده کردم و اثر سویی ازش ندیدم.
در کل کار در این سطح یکم دانش فنی می خواد (که البته من هم ندارم، از MSDN می بینم و هلپ دلفی و کلاس هاش رو می خونم) و کار روتین و روزمره ای نیست که هر برنامه نویسی ازش استفاده کرده باشه یا لازم داشته باشه.
کد مورد استفاده من:


procedure TMasterFormFullScreen.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.Style := (Params.Style or ws_Popup) and not ws_Caption;
end;


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