View Full Version : چگونه Left وTop را کنترل کرد در تولید یک آبجکت(component)
mehdirayaneh
شنبه 26 اسفند 1385, 18:02 عصر
چگونه Left ,Top کنترل کرد در تولید یک آبجکت(component)
من دستور برای تولید component Button را دارم که داخل یک for قرار دادم و nتا Button تولید می کنه وقت وقتی تولید می کنه Left ,Top آن بصورت زیر کد
for I := 1 to ADOTable1.RecordCount do
begin
RuntimeBtn:=TsButton.Create(Self);
RuntimeBtn.Name:='d'+inttostr(ADOTable1.FieldValue s['ID_FOOD']);
RuntimeBtn.BiDiMode:=bdRightToLeft;
RuntimeBtn.Caption:='ff';
RuntimeBtn.Enabled:=True;
RuntimeBtn.Height:=33;
RuntimeBtn.Width:=81;
/////////
RuntimeBtn.Left:=5;
RuntimeBtn.Top:=iTop;
Inc(iTop,35);
///////////////
RuntimeBtn.Font.Name:='B Titr';
RuntimeBtn.Tag:=0;
RuntimeBtn.OnClick:=Button6.OnClick;
ADOTable1.Next;
end
این کد دکمه تولید می کنه اما دکمه ها(Button ) بصورت ستونی به سمت پایین می رود اگر باید 50 دکمه داشته باشیم 30 تا نمایش داده مشود و بقیه از فرم برنامه خارج می شه راهی وجود داره که از فرم خارج نشود 2- اگر 50 تا دکمه داریم بصورت 2 تا 25 تایی کنار هم نمایش داده شود
mehdirayaneh
شنبه 26 اسفند 1385, 18:23 عصر
البته بکم از این روش استفاده کردم
if i<=15 then
begin
RuntimeBtn.Left:=100;
RuntimeBtn.Top:=iTop-40;
end;
اما این روش تولید دکمه ها(Button) را محدود کرده است
و باید برای هر تعداد(Button) یک شرط بنویسم و خود هم یک مشکل و خواستم اگر کسی در این رابطه راه حل مناسب داره من را راهنمایی کند
Sohrab_Tapar
شنبه 26 اسفند 1385, 20:56 عصر
میتونی هم دکمه ها در یکTScrollbar قرار بدی
ghabil
شنبه 26 اسفند 1385, 21:58 عصر
اگر 50 تا دکمه داریم بصورت 2 تا 25 تایی کنار هم نمایش داده شود
var
Aleft, i : Integer;
begin
ALeft := 5;
for I := 1 to ADOTable1.RecordCount do
begin
RuntimeBtn:=TsButton.Create(Self);
with RuntimeBtn do
begin
if (I mod 26) = 0 then ALeft := ALeft + 100;
Name:='d'+inttostr(ADOTable1.FieldValues['ID_FOOD']);
BiDiMode:=bdRightToLeft;
Caption:='ff';
Enabled:=True;
Height:=33;
Width:=81;
/////////
Left:=ALeft;
Top:=iTop;
Inc(iTop,35);
///////////////
Font.Name:='B Titr';
Tag:=0;
OnClick:=Button6.OnClick;
end;
ADOTable1.Next;
end
end;
جدای از کد ببین یک with بزاری چقدر بهتر میشه کدت.
mehdirayaneh
یک شنبه 27 اسفند 1385, 10:04 صبح
راستش ما داخل یک TScrollbar گذاشتم اما بصورت ستونی به سمت پایین می رود من می خواستم اگر 50 تا دکمه را بصورت 2 تا 25 تایی این عدد را نسبت به اندازهTScrollbar که ما تعیین کردیم
mehdirayaneh
یک شنبه 27 اسفند 1385, 10:05 صبح
راستش ما داخل یک TScrollbar گذاشتم اما بصورت ستونی به سمت پایین می رود من می خواستم اگر 50 تا دکمه را بصورت 2 تا 25 تایی کنار هم بگذارد این عدد را نسبت به اندازهTScrollbar که ما تعیین کردیم
mehdirayaneh
یک شنبه 27 اسفند 1385, 10:19 صبح
با کمک اقای کوشا این کد را نوشتم
iTop:=35;
ALeft := 5;
for I := 1 to ADOTable1.RecordCount do
begin
RuntimeBtn:=TsButton.Create(Self);
with RuntimeBtn do
begin
////////////
if (I mod 26) = 0 then iTop := 35;
if (I mod 26) = 0 then ALeft := ALeft + 100;
/////////////
Name:='d'+inttostr(ADOTable1.FieldValues['ID_FOOD']);
BiDiMode:=bdRightToLeft;
Caption:='ff';
Enabled:=True;
Height:=33;
Width:=81;
/////////
Left:=ALeft;
Top:=iTop;
Inc(iTop,35);
///////////////
Font.Name:='B Titr';
Tag:=0;
OnClick:=Button6.OnClick;
RuntimeBtn.Parent:=sScrollBox1;
end;
ADOTable1.Next;
end
mehdirayaneh
یک شنبه 27 اسفند 1385, 10:55 صبح
اما این کد که نوشتم یک مشکل داره مشکل این که وقتی 40 تا دکمه داری و عددی که تقسیم می کنی آن عدد دکمه آن هم نمی یاد مثلا if (I mod 26) = 0 then iTop := 35 عدد تقسیم ما 26 هست و دکمه 26 را نمایش نمی دهد
Sohrab_Tapar
یک شنبه 27 اسفند 1385, 22:52 عصر
کدت رو به این صورت تغییر بده:
for I := 0 to ADOTable1.RecordCount-1 do
ghabil
یک شنبه 27 اسفند 1385, 23:02 عصر
کدت رو به این صورت تغییر بده:
for I := 0 to ADOTable1.RecordCount-1 do
چه ربطی داره؟!
مطمئنی که دکمه 26 نمیاد؟! یکبار کپشن دکمهات رو بزار IntToStr(i) ببین واقعا نمیاد؟ ممکنه آخرین دکه رو نمیبنی اگر اینطوره بجای 26 بکنش 27
Sohrab_Tapar
یک شنبه 27 اسفند 1385, 23:41 عصر
چه ربطی داره؟!
درسته هیچ ربطی نداشت اشتباه شد
ممکنه آخرین دکه رو نمیبنی اگر اینطوره بجای 26 بکنش 27
این کار 2 ردیف 26 تایی برات میسازه
mehdirayaneh
سه شنبه 29 اسفند 1385, 01:58 صبح
نمایش داده می شود اما باید دو ردیف 26 تایی نمایش بده سه ردیف اولی 25 دومی 26 وسومی 1 رانمایش می دهد وردیف اول را که دکمه 26 باشه را به ردیف دوم می بره
ghabil
سه شنبه 29 اسفند 1385, 13:31 عصر
گفتم که اینطوریش کن :
if (i mod 27) = 0 then
iTop:= 35;
ALeft := Aleft + 100;
end;
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.