ورود

View Full Version : مشکل چینش کنترل ها



drstrike
چهارشنبه 31 خرداد 1391, 17:25 عصر
سلام...
روی فرم، 3تا EditBox و3تا Label (به صورت یک سطر) توی GroupBox ی که Alignش alTop هست، گذاشتم.

GroupBox1.align:= alTop;

//کنترل های سمت راست
Edit1.Anchor:= akRight;
label1.Anchor:= akRight;

//کنترل های وسط
Edit2.Anchor:= [akTop, akBottom];
label2.Anchor:= [akTop, akBottom];

//کنترل های سمت چپ
Edit3.Anchor:= akLeft;
label3.Anchor:= akLeft;
موقع Resize کردن فرم، EditBox2 و Label2 (کنترلهای وسط) از هم فاصله می گیرند؛ همه حالتهای Anchor رو امتحان کردم، نشد!
چطوری تنظیمش کنم؟

با ستونهای DBGrid هم همین مشکل رو دارم؛ یعنی فرم که Resize میشه ستونها از عرض DBGrdid کوچکتر/بزرگتر میشن

نمونه رو ضمیمه کردم؛ فرم رو ماکزیمایز کنید متوجه مشکل می شید

younes221
چهارشنبه 31 خرداد 1391, 17:51 عصر
سلام ، فکر کنم شما باید از خاصیت Anchors کنترل ها استفاده کنید.

روی AnChor ها کار کن احتمالا درست بشه.

drstrike
چهارشنبه 31 خرداد 1391, 22:42 عصر
ممنون که سوتی بنده رو متذکر شدید :خجالت:
منظورمAnchor بود اما چون از وقت چرت بعدازظهرم گذشته بود اینطوری شد (بازم شکلک خجالت)

کد بالا تصحیح شد

drstrike
پنج شنبه 01 تیر 1391, 22:45 عصر
دوستان عزیز، راهی، پیشنهادی، حرفی، حدیثی؟

Ananas
جمعه 02 تیر 1391, 00:08 صبح
سلام.
من فایل شما رو دیدم. برای حل مشکل پیشنهادم اینه که یک TPanel بگذار روی GroupBox بعد Rdit و Label مورد نظر رو بگذار روی Panel بعد خاصیت Anchor اون Panel رو تغییر بده و دستکاری کن. برای دیده نشدن Panel هم خاصیت BevelOuter اش رو None کن. می تونی تو قسمت FormCreate هم این متن رو کپی کنی :

uses
Vcl.ExtCtrls;

procedure TForm1.FormCreate(Sender: TObject);
var
p : TPanel;
begin
p := TPanel.Create(GroupBox1);
p.Parent := GroupBox1;
p.Width := 180;
p.Height := 40;
p.Anchors := [];
p.Left := ((p.Parent as TWinControl).Width - p.Width) div 2;
p.Top := Edit2.Top;
p.BevelOuter := bvNone;
Edit1.Parent := p;
Edit1.Anchors := [akLeft, akTop];
Edit1.Left := 0;
Edit1.Top := 0;
Label2.Parent := p;
Label2.Anchors := [akLeft, akTop];
Label2.Left := Edit1.Width + 10;
Label2.Top := 5;
end;

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

drstrike
جمعه 02 تیر 1391, 12:45 عصر
ممنون
تو رویداد OnResize گروپ باکس هم میشد این روال رو فراخوانی کنم:

procedure SetControlsSpace(FirstControl, SecendControl: TWinControl);
begin
//6 is optional number
SecendControl.Left:= FirstControl.Left + FirstControl.Width + 6;
end;
اما قصد کدنویسی نداشتم و فکر میکردم که Align و Anchor کنترلها رو بد تنظیم میکنم.

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