PDA

View Full Version : تغییر اندازه فرم



seyed_farid
جمعه 05 مرداد 1386, 01:01 صبح
من میخواهم روی فرمی که Border نداره با مثلا یک لیبل ، اندازه فرم رو مثل حالتی که بوردر داره ، تغییر بدم.
چطوری میشه؟

Hamid_PaK
جمعه 05 مرداد 1386, 05:46 صبح
من میخواهم روی فرمی که Border نداره با مثلا یک لیبل ، اندازه فرم رو مثل حالتی که بوردر داره ، تغییر بدم.
چطوری میشه؟
اگر می خواهید با دریافت ورودی این کار را انجام دهید باید از Edit استفاده کنید !!!



ClientWidth := 400;
ClientHeight := 350;
//; OR
Width := 400;
Height := 350;
//; OR
SetWindowPos(Handle, HWND_NOTOPMOST, 0,0, 400, 350, SWP_NOMOVE);

dkhatibi
جمعه 05 مرداد 1386, 22:33 عصر
رویداد Onrsize را با کد بالا با یک مقدار دلخواه شبیه کد بالا را امتتحان کنید.

seyed_farid
شنبه 06 مرداد 1386, 14:25 عصر
من از این کد استفاده کردم و انجام شد ولی تصویر روی فرم در موقع تغییر ناپدید میشه و بعد از پایان کار میاد.

procedure TForm1.ResizerMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Button = mbLeft then begin
// GetCursorPos(CursorP);
Drag := true;
end;

end;

procedure TForm1.ResizerMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var cpsn :TPoint;
begin
if not Drag then exit;
GetCursorPos(cpsn);
Form1.Width := cpsn.X - form1.Left ;
Form1.Height := cpsn.Y - Form1.Top ;
end;

procedure TForm1.ResizerMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Drag := False;
end;

seyed_farid
چهارشنبه 10 مرداد 1386, 01:06 صبح
من میخواهم ببینم کسی کدی شبیه به این کد که برای حرکت دادن فرم بدون بوردر استفاده میشه سراغ داره که با آن بشه با فشردن موس و درگ کردن فرم رو تغییر اندازه بدیم و دقیقا مانند فرم دارای بوردر انجام بشه.

SendMessage( Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0 );

Hamid_PaK
پنج شنبه 11 مرداد 1386, 14:25 عصر
من میخواهم ببینم کسی کدی شبیه به این کد که برای حرکت دادن فرم بدون بوردر استفاده میشه سراغ داره که با آن بشه با فشردن موس و درگ کردن فرم رو تغییر اندازه بدیم و دقیقا مانند فرم دارای بوردر انجام بشه.

SendMessage( Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0 );



procedure Tfrm_main.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if ssLeft in Shift then begin
SendMessage(Handle, WM_NCLBUTTONDOWN, HTBOTTOMRIGHT, 0);
ReleaseCapture;
end;
end;

یا حق ...

Arman_1367
پنج شنبه 11 مرداد 1386, 14:28 عصر
می توانید از پیغام WM_Syscommand هم استفاده کنید .

Batman
جمعه 12 مرداد 1386, 09:43 صبح
می توانید از پیغام WM_Syscommand هم استفاده کنید .
میشه درباره این دستور توضیح بیشتری بدید

Arman_1367
جمعه 12 مرداد 1386, 10:44 صبح
بیا اینم مثال .
قبل از هر چیز باید عددی که به عنوان WParam استفاده می شود را به دست بیاوریم.برای این کار از تابع زیر استفاده می شود:

function TForm1.GetDidgit(Form: TForm; X, Y: Integer;Borders:Integer): Integer;
begin
If X<Borders then
If Y<Borders then//
Result:=$f004//Top Left(1)
else If Y>Form.ClientHeight-Borders then
Result:=$f007//bottom Left(2)
else
Result:=$F001//Middle Left(3)
else
If X>Form.ClientWidth-Borders then
If Y<Borders then
Result:=$f005//Top Right(4)
else If Y>Form.ClientHeight-Borders then
Result:=$f008//Bottom Right(5)
else
Result:=$f002//MiddleRight(6)
else
If Y<Borders then//
Result:=$f003//Top Middle(7)
else If Y>Form.ClientHeight-Borders then
Result:=$f006//Bottom Middle(8)
else
Result:=$f012;//Center(9)
{ ------------------------
| 1 | 7 | 4 |
|---|--------------|-----|
| 3 | 9 | 6 |
|---|--------------|-----|
| 2 | 8 | 5 |
-------------------------
}
end;

حال در ریوداد OnMouseDown فرمی که می خواهید این کار را انجام دهد کد زیر را وارد کنید:

ReleaseCapture;
TForm(Sender).Perform(WM_SYSCOMMAND,GetDidgit(TFor m(Sender),x,y,5),1);

همین حالا برنامه را اجرا کرده در روی قسمت های مختلف فرم کلیک کنید تا ببینید چه طوری تغییر می کند.