ورود

View Full Version : سوال: نحوه ایجاد کنترل در زمان اجرا بصورت آرایه ای در دلفی



rasool1363
شنبه 16 مرداد 1389, 12:00 عصر
با سلام خدمت دوستان

موضوع بنظرم گویا باشه...

ولی خوب ...
من کار با دلفی رو تازه شروع کردم خواستم چند تا (20) کنترل (مثلاً TEdite) رو در زمان ایجاد کنم و به همشون هم دسترسی داشته باشم.(برای ریختن اطلاعات بانک داخلشون)
باید چه کرد....؟
توی .net که با خصوصیت(index)میشه اما دلفی چطوره.؟

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

tdkhakpur
شنبه 16 مرداد 1389, 12:36 عصر
من کار با دلفی رو تازه شروع کردم خواستم چند تا (20) کنترل (مثلاً TEdite) رو در زمان ایجاد کنم و به همشون هم دسترسی داشته باشم باید چه کرد....؟


در مورد بخش بالا به شکل زیر عمل کنید


var
EditPtr : array [1..20] of TEdit;
i, c : integer;
begin
c := 10;
for i:=1 to 20 do
begin
EditPtr[i] := TEdit.Create(Self);
EditPtr[i].ParentWindow := Handle;
EditPtr[i].Top := c;
EditPtr[i].Left := 10;
c := c+EditPtr[i].Height+5
end;
ShowMessage('press ok to free.');
for i:=1 to 20 do
EditPtr[i].Free;
end;


ولی در مورد


.(برای ریختن اطلاعات بانک داخلشون)


به نحوه ارتباط برنامه با بانک بستگی دارد.

rasool1363
شنبه 16 مرداد 1389, 14:57 عصر
ممنون از لطف شما
فقط این خطو متوجه نشدم.
مربوط به خصوصیت کنترل که نیست.


EditPtr[i].ParentWindow := Handle;

tdkhakpur
شنبه 16 مرداد 1389, 18:54 عصر
فقط این خطو متوجه نشدم.
مربوط به خصوصیت کنترل که نیست.

خب اگر مشخص نکنید کنترلی که ساخته اید برای کدام فرم هست اونوقت خروجی که ظاهر میشود نمیتواند canvas خودش را پیدا کند و شما بتوانید آنرا ببینید به همین دلیل باید هندل یا دستگیره فرم اصلی را بهش بدید تا کنترل بتواند در فرم ظاهر شود در عیر اینصورت باز ساخته میشود اما دیده نمیشود.

SAASTN
یک شنبه 17 مرداد 1389, 13:36 عصر
EditPtr[i].ParentWindow := Handle;
با

EditPtr[i].Parent := Self;
فرقی داره؟
در واقع توی SetParentWindow یه سری کد نوشته شده که به نظر میاد مهمترینشون همون SetParent هست. حالا فرق این دوتا چی هست؟

tdkhakpur
یک شنبه 17 مرداد 1389, 13:49 عصر
فرقی داره؟

چرا نداره!


در واقع توی SetParentWindow یه سری کد نوشته شده که به نظر میاد مهمترینشون همون SetParent هست. حالا فرق این دوتا چی هست؟

بستگی داره به اینکه کنترل رو چگونه ایجاد کرده باشید اگر پارامتر self رو موقع ایجاد داده باشید لازم به کد


EditPtr[i].Parent := Self;

ندارید فقط هندل را بدید کافیه.

vcldeveloper
یک شنبه 17 مرداد 1389, 18:23 عصر
کد:
EditPtr[i].ParentWindow := Handle;
با
کد:
EditPtr[i].Parent := Self;
فرقی داره؟
در واقع توی SetParentWindow یه سری کد نوشته شده که به نظر میاد مهمترینشون همون SetParent هست. حالا فرق این دوتا چی هست؟
فرقش در نوع داده ورودی هست؛ وقتی شما به Parent مقدار می دید، یک کنترل دلفی رو بهش میدید. وقتی به ParentWindow مقدار میدید، هندل یک پنجره ویندوز رو به عنوان ورودی میدید، که ممکنه یک کنترل دلفی باشه، یا نباشه. یکی از کاربردهاش این هست که شما در کد خودتان ترکیبی از کنترل های VCL و کنترل های غیر VCL که مستقیما توسط Windows API ایجاد شدند، داشته باشید.