View Full Version : سوال: چطور میتونم به تعدادی شی یه دستور ثابت رو بدم
joooje
دوشنبه 08 آذر 1389, 19:16 عصر
با سلام
چطور میتونم به تعدادی شی یه دستور ثابت رو بدم
مثلا من 20 تا edit دارم که میخوام پهناشون رو تغییر بدم
یه چیزی تو این مایه ها
Form1.Edit[i].Height := 20 ;
چطور بجای Edit1 بنویسم [Edit[i
ممنون
Felony
دوشنبه 08 آذر 1389, 19:59 عصر
var
i: Integer;
begin
for i:= 0 to Self.ComponentCount - 1 do
if Self.Components[i] is TEdit then
TEdit(Self.Components[i]).Height:= 20;
end;
joooje
سه شنبه 09 آذر 1389, 16:27 عصر
ممنون
این همون کاری هست که من میخوام ولی یه مشکل داره و اونم اینه که هرچی edit box وجود داره رو تغییر میده.البته تونستم مشکل رو حل کنم
ولی این کاری نبود که من میخواستم. یعنی فکر کردم حل میشه اما نشد
ببینید فرض کنیم من 5تا edit میسازم و اونارو مخفی میکنم
بعد یه edit دیگه و یه دکمه هم میزارم تو صفحه.
میخوام اگه کاربر تو edit نوشت Edit4 و دکمه رو زد Edit4 نمایش داده بشه یا اگه نوشت Edit3 و دکمه رو زد Edit3 نمایش داده بشه
مشکلم تبدیل یه TEdit به یه string هست
میخوام به جای کد اول بیتونم کد دوم رو بنویسم
کد اول:
Edit1.Show ;
کد دوم
'Edit1'.Show ;
یا
(Edit6.text).Show ;
در ضمن من با این قسمت کد هم مشکل دارم-قسمت bold
for i:= 0 to Self.ComponentCount - 1 do
if Self.Components[i] is TEdit then
TEdit(Self.Components[i]).Height:= 20;
چون من پنجره ساخته شده رو توی یه پنجره دیگه parent کردم. با این کد:
windows یه پنجره خارجی هست و ربطی به برنامه من نداره
procedure SetParentWindow(hwnd: HWND); cdecl;
var
Form1: TForm1;
Window: Cardinal;
begin
Window := hwnd;
Form1 := TForm1.CreateParented(Window);
و نمیدونم بجای self چی باید بزارم
وقتی این کد رو هم مینویسم یه لحظه نمایش میده و بعد مخفی میشه
var
i: Integer;
begin
for i:= 0 to CreateParented(Window).ComponentCount - 1 do
if CreateParented(Window).Components[i] is TEdit then
TEdit(CreateParented(Window).Components[i]).Height:= 20;
end;
ممنون از راهنما ییهاتون
Felony
سه شنبه 09 آذر 1389, 17:06 عصر
در مورد قسمت اول سوال باید به وسیله تابع FindComponent کامپوننت مورد نظر رو پیدا کنید :
var
Temp: TComponent;
begin
Temp:= FindComponent('Edit1');
if Temp is TEdit then
TEdit(Temp).Text:= 'Finded';
end;
در مورد سوال دوم وقتی اون کار رو میکنید والد فرمتون میشه اون هندلی که بهش دادید پس دیگه به صورت بالا نمیتونید بهش دسترسی داشته باشید ، برای انجام کاری که شما مد نظرتون هست چیزی که الان به ذهنم میرسه این هست که موقع ساخت فرم هندلش رو یه جا نگه داری ، یعنی :
var
MyForm: TForm;
Edit1: TEdit;
Window: THandle;
begin
MyForm:= TForm.CreateParented(Window);
with MyForm do
begin
Name:= 'Form2';
Height:= 100;
Width:= 100;
Hand:= MyForm.Handle;
Show;
end;
Edit1:= TEdit.Create(MyForm);
with Edit1 do
begin
Parent:= MyForm;
Name:= 'Edit1';
Width:= 50;
Height:= 20;
Text:= 'Test';
end;
end;
Hand یه متغییر سراسری از نوع THandle هست ، حالا هر جا خواستی به اشیاء فرمت که Parent ش اون Window هست دسترسی داشته باشی باید اول به وسیله تابع FindControl فرمت رو پیدا کنی و بعد شئ رو از روش پیدا کنی و باقی ماجرا ، مثلا :
var
Temp: TComponent;
begin
Temp:= ((FindControl(Hand) as TForm).FindComponent('Edit1') as TEdit);
if Temp is TEdit then
TEdit(Temp).Text:= 'Finded';
end;
joooje
چهارشنبه 10 آذر 1389, 10:37 صبح
ممنون از کمکتون
ولی کدی گذاشتید رو به این خطش ایراد میگیره
Hand:= MyForm.Handle;
انگار hand رو به عنوان یه مشخصه برای فرم مثل name و width قبول نمیکنه
از کد سوم هم که استفاده میکنم بعد از اجرا اصلا فرم منو پیدا نمیکنه که تو اون edit رو پیدا کنه و ایراد میگیره.
مقدار اون handی که من برای windows بدست میارم یه عدد هست که با هر بار اجرای جدید برنامه عوض میشه
وقی hand اون رو بدست میارم و فرمم رو parentش رو تو اون پنجره میکنم ، پنجره منو تو اون میسازه
حالا وقتی parent اون رو میدم که تو اون پیدا کنه نمیدونم چرا جواب نمیده - (GetParent(Window
اصلا بزارید اینطور پیش بریم:
فرض کنید من یه برنامه با دلفی میسازم که تو اون یه ادیت باکس هست
برنامه رو اجرا میکنم
حالا میخوام با یه برنامه جدید مقدار توی اون ادیت باکس رو عوض کنم
چیکار باید بکنم؟شاید من تو بدست آوردن handle برنامه کد رو خوب استفاده نمیکنم
اصلا این کار شدنی هست؟
اگه شدنی هست لطف میکنید یه کد کامل برای به دست آوردن hanle برنامه و تغییر تو اون به من بدید؟
و اگر هم نشدنی هست این کار رو بکنم:
فرض کنید من یه برنامه با دلفی میسازم و برنامه رو اجرا میکنم
حالا با یه برنامه دیگه یه فرم توی اون برنامه قبلیه میسازم که یه ادیت باکس هم داره و توی اون فرم ساخته شده مقدار ادیت باکس رو عوض میکنم
به نظرتون کدومش شدنی تر هست؟
ممنون از راهنماییهاتون
Felony
چهارشنبه 10 آذر 1389, 15:15 عصر
انگار hand رو به عنوان یه مشخصه برای فرم مثل name و width قبول نمیکنه
حداقل وقت بزار و پستی که دادم رو کامل بخون ، مشخصه چیه ، گفتم Hand یه متغییر سراسری از نوع THandle هست !
اصلا بزارید اینطور پیش بریم:
فرض کنید من یه برنامه با دلفی میسازم که تو اون یه ادیت باکس هست
برنامه رو اجرا میکنم
حالا میخوام با یه برنامه جدید مقدار توی اون ادیت باکس رو عوض کنم
چیکار باید بکنم؟شاید من تو بدست آوردن handle برنامه کد رو خوب استفاده نمیکنم
اصلا این کار شدنی هست؟
اگه شدنی هست لطف میکنید یه کد کامل برای به دست آوردن hanle برنامه و تغییر تو اون به من بدید؟
و اگر هم نشدنی هست این کار رو بکنم:
فرض کنید من یه برنامه با دلفی میسازم و برنامه رو اجرا میکنم
حالا با یه برنامه دیگه یه فرم توی اون برنامه قبلیه میسازم که یه ادیت باکس هم داره و توی اون فرم ساخته شده مقدار ادیت باکس رو عوض میکنم
به نظرتون کدومش شدنی تر هست؟
ممنون از راهنماییهاتون
این چیزی که الان گفتی زمین تا آسمون با سوال قبلیت فرق میکنه ، موقع سوال کردن دقت کنید و سوالتون رو واضح بپرسید تا سریعتر به جوابتون برسید و وقت دیگران هم هدر نره ، برای اینکه متن داخل یه کنترل تو برنامه دیگه رو تغییر بدید باید هندل اون فرم برنامه مورد نظر رو به وسیله تابع FindWindow پیدا کنی ، بعد به وسیله تابع FindWindowEX هندل Edit مورد نظر روی اون فرم رو پیدا میکنی و به وسیله تابع PostMessage یا SendMessage و پیغام WM_SetText متن مورد نظرت رو بهش میفرستی .
@ با توجه به صحبت هاتون معلومه از هندل اطلاعاتی ندارید و نمیدونید چی هست ، قبل از هر کاری باید درک کنید که هندل چی هست و بدونید که اصول کار ویندوز ارسال و دریافت پیغام ها به وسیله هندل ها و ... هست ، قبلا چند بار تو همین بخش در همین مورد پست داده بودم .
@ در مورد توابعی هم که نام بردم هم بارها تو همین بخش صحبت شده .
joooje
پنج شنبه 11 آذر 1389, 17:14 عصر
این چیزی که الان گفتی زمین تا آسمون با سوال قبلیت فرق میکنه ، موقع سوال کردن دقت کنید و سوالتون رو واضح بپرسید تا سریعتر به جوابتون برسید
خب زمین تا آسمون فرق نمیکنه، من که نمیدونستم نیاز به توابع بالا داره که از اول بپرسم
من از اولشم میخواستم که تو اون پنجره تغییر بده هی self تو کدهاتون بود که من نمیدونستم چی باید به جاش بنویسم.
به هر جهت ممنون از راهنماییتون
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.