PDA

View Full Version : ایجاد اشیا در زمانی که برنامه در حال اجرا است.



javad_rajabloo
دوشنبه 02 بهمن 1391, 18:54 عصر
سلام

بطور مثال یک بانک اطلاعات داریم که یکی از فیلدهای آن درصد پیشرفت پروژه است و یک فیلد عددی است.

چطور میشه در هنگام اجرای برنامه به ازای تعداد رکوردهای مورد نیاز پروگرس بار در فرم بصورت پویا ایجاد بشه؟

مثلا اگه 10 تا رکورد در کوئری یافت شد 10 تا پروگرس بار در صفحه قرار بده؟

ممنون میشم راهنمایی کنین.

MohsenB
سه شنبه 03 بهمن 1391, 00:22 صبح
سلام

اگر که یه جستجویی میکردین حتما زودتر به نتیجه می رسیدید . بهرحال از یک همچین تابعی می تونید استفاده کنید :

procedure CreateProgressBar(Self :TWinControl; iPosition , X, Y, W, H :Integer);
begin
with TProgressBar.Create(Self) do begin
Parent:= Self;
Position:= iPosition;
SetBounds(X, Y, W, H);
end;
end;

مثلا اینجوری :

CreateProgressBar(Self, 20, 50, 100, 100, 30);

موفق باشید

javad_rajabloo
سه شنبه 03 بهمن 1391, 12:12 عصر
ممنون از جوابتون

یه سوال دیگه :

واسه از بین بردن اشیاء ایجاد شده چیکار باید کرد؟

javad_rajabloo
سه شنبه 03 بهمن 1391, 12:20 عصر
از اینا استفاده کردم

Form1.Close;
Form1.Free;
Form1 := TForm1.Create(Application);
Form1.Show;

hassan_reza
سه شنبه 03 بهمن 1391, 13:26 عصر
با اون طریق شیوه ساخت شی، بایستی در یک حلقه، اشیاء از نوع پروگرس بار را آزاد کنید.

MohsenB
سه شنبه 03 بهمن 1391, 19:50 عصر
سلام

راههای زیادی برای پاک کردن این کامپوننت ها میشه پیاده کرد از جمله روش پست قبل و همینطور :

var ProList :TList;

procedure CreateProgressBar(iSelf :TWinControl; iPosition , X, Y, W, H :Integer);
begin
if ProList = nil then ProList:= TList.Create;
ProList.Add(TProgressBar.Create(iSelf));
with TProgressBar(ProList[ProList.Count-1]) do begin
Parent:= iSelf;
Position:= iPosition;
SetBounds(X, Y, W, H);
end;
end;

procedure ClearAllProgressBar;
var i :Integer;
begin
for i := 0 to ProList.Count-1 do
TProgressBar(ProList[i]).Free;
ProList.Clear;
end;


موفق باشید

Felony
چهارشنبه 04 بهمن 1391, 13:08 عصر
سلام

راههای زیادی برای پاک کردن این کامپوننت ها میشه پیاده کرد از جمله روش پست قبل و همینطور :

var ProList :TList;

procedure CreateProgressBar(iSelf :TWinControl; iPosition , X, Y, W, H :Integer);
begin
if ProList = nil then ProList:= TList.Create;
ProList.Add(TProgressBar.Create(iSelf));
with TProgressBar(ProList[ProList.Count-1]) do begin
Parent:= iSelf;
Position:= iPosition;
SetBounds(X, Y, W, H);
end;
end;

procedure ClearAllProgressBar;
var i :Integer;
begin
for i := 0 to ProList.Count-1 do
TProgressBar(ProList[i]).Free;
ProList.Clear;
end;

موفق باشید

اگر از دلفی 2009 به بعد استفاده میکنید به جای TList و اون Typecast ها یک Generic به صورت زیر بنویسید :


var ProList :TList<ProgressBar>;