PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : ایجاد و چیدن دکمه ها بصورت داینامیک



javad_rajabloo
06 / December / 2014, 08:41 AM
سلام به دوستان
خسته نباشید
یه سوال داشتم
مثلا در یک دیتابیس ، یک تعداد کالا قراره وارد بشه
چطور می تونیم بر اساس نام کالا ، دکمه ایجاد کنیم (عنوان دکمه ، مقدار دیتابیس باشه)
البته تا اینجاش مشکلی نیست
من می خوام داخل فرم که اجرا میشه ، دکمه ها به ترتیب چیده بشن (مثل یه جدول )
ممنونم

mahmood
06 / December / 2014, 09:39 AM
سلام
اگه ساخت داینامیکی کامپوننت منظورته تو اینترنت که راهنما زیاده
یک لینک هم میزارم ببین
<span style="font-family: trebuchet ms"><font size="3"><font color="Indigo"><b><font color="red">[فقط اعضاء انجمن قادر به مشاهده لینکها و عکسها می باشند <a href="/reg_iran.php" target="_blank">برای عضویت در سایت کلیک کنید</a>]</font></b></font></font></span>
<span style="font-family: trebuchet ms"><font size="3"><font color="Indigo"><b><font color="red">[فقط اعضاء انجمن قادر به مشاهده لینکها و عکسها می باشند <a href="/reg_iran.php" target="_blank">برای عضویت در سایت کلیک کنید</a>]</font></b></font></font></span>
میتونی بعد از ساخت قطعه، سایز و موقعیت و نم و ایونت هاش رو بهت تعیین کنید
با تشکر

javad_rajabloo
06 / December / 2014, 10:41 AM
برای ساختش مشکل ندارم
برای چینشش مشکل دارم
البته برای تعداد کم موردی نیست اما تعدادکه زیاد باشه ...

meyti
06 / December / 2014, 11:21 AM
با سلام
امکانش هست یه توضیحی بدین که این برنامه به چه کاری میاد ؟ و هدف از این کار چیه ؟
برنامه ای مثل رستوران ها میخاین بسازین که هر دکمه یه غذا یا یه سفارش به فاکتور اضافه کنه ؟ ؟
یا برنامه شلوغتریه ؟

javad_rajabloo
06 / December / 2014, 01:43 PM
مثالی که زدین درسته
ولی برنامه شلوغ تره و تعداد رکوردها امکان داره به 100 تا هم برسه !
اونوقت سازماندهی 100 تادکمه مشکله که از چه ستون و سطری شروع بشه و کجا تموم بشه
شاید نیاز باشه در صفحات بیشتر ارائه بشه
سایز مانیتور کاربر معلوم نیست ...

yanin
06 / December / 2014, 02:43 PM
اگر فقط منظورتون چیدمان هست که نباید کار مشکلی باشه با استفاده از دو حلقه که یکی کنترل کننده 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;

mahmood
06 / December / 2014, 03:52 PM
شاید هم برای راحتی بخوای 1000 تا کلید داشته باشی - یا آرایه تعریف کن که مثلا 0تا هزار از جنس tbotton . میخوای مثال بگم؟

javad_rajabloo
16 / February / 2015, 01:23 PM
این عکس رو ببینید
153
یه نرم افزار می خوام این شکلی طراحی کنم
حالا که دکمه ها ایجاد شد چطوری بگیم هر دکمه چیکار کنه؟

yanin
18 / February / 2015, 10:25 PM
البته تو مثال قبل یک اشاره کوچیک کردم مثل
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 استفاده کردم

javad_rajabloo
20 / February / 2015, 09:24 PM
ممنونم از راهنماییهاتون
خیلی عالی بود

فقط توی پروسیجر ClickAllBtn یه مشکلی هست.چون تعداد دکمه های ایجاد شده بر اساس تعداد رکوردهای بانک اطلاعاتی هست (تعدادش معلوم نیست ) نمیشه دونه دونه براش شرط تعیین کرد.
برنامه ای که من نوشتم یه دی بی گرید گذاشتم که هر موقع کاربر بر روی یکی از رکوردها کلیک کرد ، اون آیتم رو بذاره توی سبد خرید.
اینجاشو نمی دونم چیکار کنم.

yanin
21 / February / 2015, 03:15 AM
در ابتدا یک سوال دارم آیا این تعداد نامعلوم ماکزیموم داره؟

zonline
21 / February / 2015, 10:59 AM
از فالو پنل استفاده کنید خودش کامپوننت ها رو میچینه براتون و نیازی به کد نویسی برای چیدن کامپوننت ها ندارید

javad_rajabloo
22 / February / 2015, 09:13 AM
از فالو پنل استفاده کنید خودش کامپوننت ها رو میچینه براتون و نیازی به کد نویسی برای چیدن کامپوننت ها ندارید

ممنونم

اما من سرچ کردم این کامپوننت رو پیدا نکردم.
اگه کم حجمه ، همینجا برای استفاده همه آپلود بفرمایید.
اگه نیست لینک دانلودش رو بذارید ممنون میشم

mahmood
16 / March / 2015, 02:49 PM
سلام
چند مرحله انجام بدید
1- اول بسازید
2- به دکمه ها مثلا روتین onclick بدید
توی روتین OnClick میشه فهمید کدوم کلید فشرده شده
لینک زیر رو ببینید
<span style="font-family: trebuchet ms"><font size="3"><font color="Indigo"><b><font color="red">[فقط اعضاء انجمن قادر به مشاهده لینکها و عکسها می باشند <a href="/reg_iran.php" target="_blank">برای عضویت در سایت کلیک کنید</a>]</font></b></font></font></span>