ایجاد و چیدن دکمه ها بصورت داینامیک
سلام به دوستان
خسته نباشید
یه سوال داشتم
مثلا در یک دیتابیس ، یک تعداد کالا قراره وارد بشه
چطور می تونیم بر اساس نام کالا ، دکمه ایجاد کنیم (عنوان دکمه ، مقدار دیتابیس باشه)
البته تا اینجاش مشکلی نیست
من می خوام داخل فرم که اجرا میشه ، دکمه ها به ترتیب چیده بشن (مثل یه جدول )
ممنونم
پاسخ : ایجاد و چیدن دکمه ها بصورت داینامیک
سلام
اگه ساخت داینامیکی کامپوننت منظورته تو اینترنت که راهنما زیاده
یک لینک هم میزارم ببین
[برای مشاهده لینک ها شما باید عضو سایت باشید برای عضویت در سایت بر روی اینجا کلیک بکنید]
[برای مشاهده لینک ها شما باید عضو سایت باشید برای عضویت در سایت بر روی اینجا کلیک بکنید]
میتونی بعد از ساخت قطعه، سایز و موقعیت و نم و ایونت هاش رو بهت تعیین کنید
با تشکر
پاسخ : ایجاد و چیدن دکمه ها بصورت داینامیک
برای ساختش مشکل ندارم
برای چینشش مشکل دارم
البته برای تعداد کم موردی نیست اما تعدادکه زیاد باشه ...
پاسخ : ایجاد و چیدن دکمه ها بصورت داینامیک
با سلام
امکانش هست یه توضیحی بدین که این برنامه به چه کاری میاد ؟ و هدف از این کار چیه ؟
برنامه ای مثل رستوران ها میخاین بسازین که هر دکمه یه غذا یا یه سفارش به فاکتور اضافه کنه ؟ ؟
یا برنامه شلوغتریه ؟
پاسخ : ایجاد و چیدن دکمه ها بصورت داینامیک
مثالی که زدین درسته
ولی برنامه شلوغ تره و تعداد رکوردها امکان داره به 100 تا هم برسه !
اونوقت سازماندهی 100 تادکمه مشکله که از چه ستون و سطری شروع بشه و کجا تموم بشه
شاید نیاز باشه در صفحات بیشتر ارائه بشه
سایز مانیتور کاربر معلوم نیست ...
پاسخ : ایجاد و چیدن دکمه ها بصورت داینامیک
اگر فقط منظورتون چیدمان هست که نباید کار مشکلی باشه با استفاده از دو حلقه که یکی کنترل کننده Left و دومی کنترل کننده Button Top باشه به سادگی میتونید هرجور Button ها رو بچینید
مثلا تو این مثالی که میزنم تو یک فورم 1000 * 1000 ما 100 Button رو به صورت جدولی میسازیم البته این مثال خیلی ساده و فقط برای نشان دادن چیدمان است
ولی شما میتونید سایز مانیتور یا Resolution صفحه رو بدست بیارید و با تعریف شرط هایی مشخص کنید اگه از حد فضای Button ها بیشتر بود با استفاده از PageControl یه Tab دیگه برای صفحه دوم بسازید
کد:
Var BtnTemp : TButton ;
i,j : integer ;
begin
for I := 0 to 10 do
Begin
for j := 0 to 10 do
Begin
BtnTemp := TButton.Create(nil);
BtnTemp.Name := 'Btn'+IntToStr(i)+IntToStr(j);
BtnTemp.Left := i*100 ;
BtnTemp.Top := j*100 ;
BtnTemp.Caption := IntToStr(i)+' '+IntToStr(j);
BtnTemp.Parent := Form6 ;
BtnTemp.OnClick := TempClick;
End;
End;
end;
حالا اگه بخواهید چیدمان همین Button هارو دوباره تغییر بدید میتونید با این روال این کار رو انجام دهید
کد:
procedure TForm6.Button2Click(Sender: TObject); Var
BtnTemp : TButton ;
i,j : integer ;
begin
for I := 0 to 10 do
Begin
for j := 0 to 10 do
Begin
with (FindChildControl('Btn'+IntToStr(i)+IntToStr(j)) As TButton) do
begin
Name := 'Btn'+IntToStr(i)+IntToStr(j);
Left := i*50 ;
Top := j*50 ;
Caption := IntToStr(i)+' '+IntToStr(j);
Parent := Form6 ;
OnClick := TempClick;
end;
End;
End;
end;
البته با این تابع هم میتونید رزولیشن صفحه رو بدست آورید
کد:
procedure TForm6.Button3Click(Sender: TObject);var
DC: THandle;
Bits: integer;
HRes: integer;
VRes: integer;
begin
DC := GetDC(Handle);
Bits := GetDeviceCaps(DC, BITSPIXEL);
HRes := GetDeviceCaps(DC, HORZRES);
VRes := GetDeviceCaps(DC, VERTRES);
Edit1.Text := Format('%d bit, %d x %d', [Bits, HRes, VRes]);
end;
پاسخ : ایجاد و چیدن دکمه ها بصورت داینامیک
شاید هم برای راحتی بخوای 1000 تا کلید داشته باشی - یا آرایه تعریف کن که مثلا 0تا هزار از جنس tbotton . میخوای مثال بگم؟
1 فایل پیوست
پاسخ : ایجاد و چیدن دکمه ها بصورت داینامیک
این عکس رو ببینید
[برای مشاهده لینک ها شما باید عضو سایت باشید برای عضویت در سایت بر روی اینجا کلیک بکنید]
یه نرم افزار می خوام این شکلی طراحی کنم
حالا که دکمه ها ایجاد شد چطوری بگیم هر دکمه چیکار کنه؟
پاسخ : ایجاد و چیدن دکمه ها بصورت داینامیک
البته تو مثال قبل یک اشاره کوچیک کردم مثل
BtnTemp.OnClick := TempClick;
ولی خب الان یکم توضیح بیشتر میدم شاید بتونم کمکی کرده باشم
اگر زمان تعریف Button ها اسم گذاری اونها بر روی اصولی باشه به سادگی میشه اونها رو با یه شرط کوچیک کنترل کرد
یه نگاه به این کد بندازید
کد:
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
Procedure ClickAllBtn(Sender : Tobject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
Var
i : integer ;
BtnTemp : TButton ;
begin
for i := 1 to 3 do
Begin
BtnTemp := TButton.Create(nil);
BtnTemp.Name := 'Btn'+IntToStr(i);
BtnTemp.Caption := IntToStr(i) ;
BtnTemp.Left := i*100 ;
BtnTemp.Parent := Form1 ;
BtnTemp.OnClick := ClickAllBtn;
End;
end;
procedure TForm1.ClickAllBtn(Sender: Tobject);
begin
if (Sender As TButton).Name = 'Btn1' then
Begin
ShowMessage('Hellow');
End;
if (Sender As TButton).Name = 'Btn2' then
Begin
ShowMessage('Bye');
End;
if (Sender As TButton).Name = 'Btn3' then
Begin
ShowMessage('Yes');
End;
end;
end.
تو این یونیت من دو تا Procedure تعریف کردم یکی برای ساخت 3 button و یکی هم برای کنترل رویداد onclick سه button
در پروسیجر Button1Click من با یک حلقه 3 Button ساختم و نام اونها رو به ترتیب Btn1 و Btn2 و Btn3 و در آخر رویداد OnClick همه اونها رو برار با پروسیجر ClickAllBtn گذاشتم
بعد در پروسیجر ClickAllBtn با استفاده از خاصیت Name و یک شرط برسسی میکنم که کدوم Button کلیک شده و در ادامه به سادگی برای هر Button یک Showmessage مربوط به خودش رو قرار دادم
البته شما میتونید به جای استفاده از Name در شرط از Caption یا Tag و یا حتی از مختصات Button ها استفاده کنید مثل Top و Left
ولی به نظر من یکی از بهترین انتخاب ها استفاده از Tag و Case هست و من چون میخواستم موضوع رو براتون شفاف تر کنم از Name استفاده کردم
پاسخ : ایجاد و چیدن دکمه ها بصورت داینامیک
ممنونم از راهنماییهاتون
خیلی عالی بود
فقط توی پروسیجر ClickAllBtn یه مشکلی هست.چون تعداد دکمه های ایجاد شده بر اساس تعداد رکوردهای بانک اطلاعاتی هست (تعدادش معلوم نیست ) نمیشه دونه دونه براش شرط تعیین کرد.
برنامه ای که من نوشتم یه دی بی گرید گذاشتم که هر موقع کاربر بر روی یکی از رکوردها کلیک کرد ، اون آیتم رو بذاره توی سبد خرید.
اینجاشو نمی دونم چیکار کنم.
پاسخ : ایجاد و چیدن دکمه ها بصورت داینامیک
در ابتدا یک سوال دارم آیا این تعداد نامعلوم ماکزیموم داره؟
پاسخ : ایجاد و چیدن دکمه ها بصورت داینامیک
از فالو پنل استفاده کنید خودش کامپوننت ها رو میچینه براتون و نیازی به کد نویسی برای چیدن کامپوننت ها ندارید
پاسخ : ایجاد و چیدن دکمه ها بصورت داینامیک
نقل قول:
از فالو پنل استفاده کنید خودش کامپوننت ها رو میچینه براتون و نیازی به کد نویسی برای چیدن کامپوننت ها ندارید
ممنونم
اما من سرچ کردم این کامپوننت رو پیدا نکردم.
اگه کم حجمه ، همینجا برای استفاده همه آپلود بفرمایید.
اگه نیست لینک دانلودش رو بذارید ممنون میشم
پاسخ : ایجاد و چیدن دکمه ها بصورت داینامیک
سلام
چند مرحله انجام بدید
1- اول بسازید
2- به دکمه ها مثلا روتین onclick بدید
توی روتین OnClick میشه فهمید کدوم کلید فشرده شده
لینک زیر رو ببینید
[برای مشاهده لینک ها شما باید عضو سایت باشید برای عضویت در سایت بر روی اینجا کلیک بکنید]