ورود

View Full Version : ارسال دستور به کنترل در زمان اجرا



IranVB
سه شنبه 02 خرداد 1391, 16:22 عصر
با سلام

آیا راهی وجود دارد که بتوان در زمان اجرا به هرکنترلی با مشخص کردن نامش دستوری را ارسال کنیم، مثلا نام کنترلی را در Text1 بنویسیم و با زدن دکمه ای آن کنترل مخفی شود؟

باتشکر

Veteran
سه شنبه 02 خرداد 1391, 18:53 عصر
فکر کنم میشه.اما دقیق یادم نیست.
یک سورسی قبلا دیده بودم کلاینت سرور بود.
در قسمت کلاینت شما کد مینوشتی ( کد های vb6 ) بعد کد هارو روی سیستمی که فایل سرور اجرا شده بود.کامپایل میکرد.اجرا مکیرد.
فکر کنم همین چیزی باشه که میخوای.
اگر دیدم میزارم واست.

M.T.P
سه شنبه 02 خرداد 1391, 21:39 عصر
با سلام

آیا راهی وجود دارد که بتوان در زمان اجرا به هرکنترلی با مشخص کردن نامش دستوری را ارسال کنیم، مثلا نام کنترلی را در Text1 بنویسیم و با زدن دکمه ای آن کنترل مخفی شود؟

باتشکر

برنامه ها بعد از کامپایل و اجرا ، کنترل هاشون دیگه چیزی به اسم نام ندارن ، بلکه با دو گزینه کلاس و هندل میشه بهشون اشاره کرد.
یعنی اینطور نیست که مثلا شما اسم یک تکس باکس رو txtName گذاشتید و بعد از کامپایل و اجرا با واژه txtName پیداش کنید.

بهروز عباسی
سه شنبه 02 خرداد 1391, 21:53 عصر
فکر کنم میشه.اما دقیق یادم نیست.
یک سورسی قبلا دیده بودم کلاینت سرور بود.
در قسمت کلاینت شما کد مینوشتی ( کد های vb6 ) بعد کد هارو روی سیستمی که فایل سرور اجرا شده بود.کامپایل میکرد.اجرا مکیرد.
فکر کنم همین چیزی باشه که میخوای.
اگر دیدم میزارم واست.

دوست عزیز چیزی که شما میگی اینه

Project/Components/Microsoft Script Control 1.0
که اسکریپت رو اجرا میکنه.
وکمی محدوده.

موفق باشید

IranVB
چهارشنبه 03 خرداد 1391, 11:40 صبح
ممنون، ولی من نمیخوام کنترل برنامه دیگری را صدا بزنم من میخوام به همین کنترلهای حاضر در فرم های فعلی برنامه ام دسترسی داشته باشم منتها در زمان اجرا، یعنی اگر سه تا دکمه به نام های Comman1,Command2,Comman3 بر روی فرم است و من بخوام عنوانشون رو تغییر بدم فقط یک دستور نوشته باشم و بعد در زمان اجرا با نوشتن نام دکمه ها در یک تکست باکس عنوان دکمه ای که این نام دارد تغییر بکند چیزی مشابه CallByName که برای احضار روال ها در زمانی که برنامه اجرا یا کامپایل شده

باز هم ممنونم

بهروز عباسی
چهارشنبه 03 خرداد 1391, 12:01 عصر
اگه می خوای این کارهای رو که گفتی بصورت محدود دنبال کنی راهی داره
یعنی مثلا برنامه اصلی Caption فلان Command رو از روی یک فایل یا رجیستزی یا... به صورت مرتب (با یه تایمر)بخونه
و شما تغیررات رو روی اون فایل اعمال کنی تا برنامه اصلی هم از اون فایل استفاده کنه.
و راه دوم
همون طور که جناب M.T.P (http://barnamenevis.org/member.php?132020-M.T.P) گفت.

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

شما باید با توابع API هندل کنترل مورد نظر رور به دست بیاری بعد مثلا Caption اون رو عوض کنی

موفق باشی

بهروز عباسی
چهارشنبه 03 خرداد 1391, 12:15 عصر
مثلا این کد برای عوض کردن Caption یک Command هست که باید این کامند در فرم با کپشنForm1 باشه
تا برنامه اجرا بشه
البته اینم بگم برنامه حاوی Form1 حتماباید کامپایل بشه و برنامه exe اونو اجرا کنی تا این برنامه هندل اونو بدست بگیره

Private Const WM_SETTEXT = &HC
Private Const WM_GETTEXT = &HD

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SendMessageByString Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long



Private Sub Command1_Click()
Dim ihandle As Long
ihandle = FindWindow("ThunderRT6FormDC", "Form1")
ihandle = FindWindowEx(ihandle, 0&, "ThunderRT6CommandButton", vbNullString)
SendMessageByString ihandle, WM_SETTEXT, 0&, "Hello"
End Sub

موفق باشی

just4froum
چهارشنبه 03 خرداد 1391, 12:19 عصر
بفرمایید اگر درست متوجه شده باشم اینم برنامه ای که می خواید :لبخند:

فقط توی text1 نام کنترل مورد نظر رو بنویس بعد روی Command1 کلیک کن.

فقط حواست باشه به حروف بزرگ و کوچیک حساسه .

مثلا توی text1 بنویس Picture1 بعد روی Command1 کلیک کن

:قلب::قلب::قلب:

محسن واژدی
چهارشنبه 03 خرداد 1391, 12:21 عصر
با سلام

آیا راهی وجود دارد که بتوان در زمان اجرا به هرکنترلی با مشخص کردن نامش دستوری را ارسال کنیم، مثلا نام کنترلی را در Text1 بنویسیم و با زدن دکمه ای آن کنترل مخفی شود؟

باتشکر
سلام علیکم
اگر میخواهید ابجکتی را در برنامه دیگری تحت تاثیر قرار دهید همانطور که جناب M.T.P هم فرمودند تنها از طریق هندل شی امکان پذیر است
اما در مورد خود اشیاء موجود در وی بی که گفتید میخواهید همانند CallByName باشد، اگر توجه کرده باشید کالکشنی وجود دارد که تعداد کنترل های موجود بر روی فرم را نگهداری میکند، از این قسمت میتوانید برای این منظور استفاده کنید، به عنوان مثال:
Private Sub Command1_Click()
Me.Controls("Command1").Caption = "NewCap"
End Sub
به این صورت که نام شی مورد نظر را بصورت رشته ای در Controls مشخص سپس متد مورد نظر را برای آن شی اجرا میکنیم

برای انتخاب نام در run-time هم میتوانید نام textbox را جایگزین "Command1" کنید

البته میتوانید از شماره جایگاه اشیاء موجود در کالکشن Controls هم استفاده کنید، به عنوان مثال اگر تنها یک دکمه بر روی فرم داشته باشیم، برای تغییر عنوان آن هم میتوانید همانند نمونه بالا نام را در Controlsقرار داده و هم میتوانیم این کار را بر اساس index شی در Controlsانجام دهیم، یعنی:
Private Sub Command1_Click()
Me.Controls(0).Caption = "NewCap"
End Sub


موفق باشید

IranVB
چهارشنبه 03 خرداد 1391, 12:26 عصر
خیلی خیلی ممنونم از همه دوستان

بهروز عباسی
چهارشنبه 03 خرداد 1391, 12:30 عصر
خیلی خیلی ممنونم از همه دوستان

شرمنده ندیدم دوستان جواب دادن رفتم پست 7 رو ویرایش کردم الان یه کارهایی می کنه.:لبخند: