PDA

View Full Version : Form



hbi
دوشنبه 09 شهریور 1383, 09:04 صبح
اگر بطور همزمان دو و یا بیشتر فرم در حافظه داشته باشم از کجا بدان کدام یکی فعال میباشد یعنی کدام رنگ آن آبی است

Ariyan
سه شنبه 10 شهریور 1383, 00:53 صبح
شما میتونید با استفاده از شی Screen این کار رو انجام بدید .
مثل این :



Private Sub Form_Load()
Timer1.Interval=1000
Form2.Show
End Sub

Private Sub Timer1_Timer()
Label1.Caption = Screen.ActiveForm.hWnd
End Sub

HoneySaberi
سه شنبه 10 شهریور 1383, 20:35 عصر
سلام.
استفاده از API به نظرم روش کارامدتری باشه!
API مناسب و روش کارو در اولین فرصت برات می نویسم :wink:

Ariyan
چهارشنبه 11 شهریور 1383, 07:14 صبح
نمی دونم وقتی با خود ویژال بیسیک میشه چه نیازی به API هست :?: ولی با تابع GetForegroundWindow هم میشه که هندل فرم فعال رو بر میگردونه.
مثل این:


Private Declare Function GetForegroundWindow Lib "user32" () As Long

Private Sub Form_Load()
Timer1.Interval = 5000
Form2.Show
End Sub

Private Sub Timer1_Timer()
WindowHwnd = GetForegroundWindow
If WindowHwnd = Form1.hWnd Then
MsgBox "Form1"
ElseIf WindowHwnd = Form2.hWnd Then
MsgBox "Form2"
End If
End Sub

HoneySaberi
جمعه 13 شهریور 1383, 13:18 عصر
سلام.
دوست عزیز ممنون از اینکه API رو گفتی. آخه من بد جوری گرفتار بودم و نتونستم دنبالش برم :|

در مورد استفاده از API و امکانات خود VB هم باید بگم که حق با شماست. من دفعه قبل کامل به کد شما توجه نکردم و استفاده کردن شما از تایمر منو به اشتباه انداخت.
گرچه به نظرم برای مسئله مطرح شده هیچ نیازی به تایمر نیست و استفاده از Screen یا API در موقع لزوم کفایت میکنه.
چون چیزی که من از مسئله مطرح شده برداشت کردم اینه که در یک زمان خاص، فرم فعال تشخیص داده بشه، نه دائما در هر لحظه!
به هر حال حق با شماست :wink: :تشویق:

AminSobati
جمعه 13 شهریور 1383, 15:46 عصر
سلام دوستان عزیز،
اگر فقط فرم فعال در بین فرمهای برنامه خودمون مد نظر باشه، میتونیم یک متغیر از جنس Form به صورت Global تعریف کنیم و در رویداد Activate هر فرم، مقدار این متغیر رو Update کنیم:


Private Sub Form_Activate()
Set MyGlobalVar = Me
End Sub

حالا از هرجای برنامه که لازم باشه، یک Reference به فرم فعال خواهیم داشت.
این روش به API نیازی نداره و یک Refrence کامل از فرم رو همیشه در اختیارمون قرار میده تا هر کاری باهاش انجام بدیم.
اما اگر فرم فعال متعلق به برنامه های دیگه مورد نظر باشه، فقط با روشی که در Postهای قبلی مطرح شد امکان پذیره.
موفق باشین،
امین ثباتی MCSD

Ariyan
شنبه 14 شهریور 1383, 06:08 صبح
سلام.
دوست عزیز ممنون از اینکه API رو گفتی. آخه من بد جوری گرفتار بودم و نتونستم دنبالش برم :|

در مورد استفاده از API و امکانات خود VB هم باید بگم که حق با شماست. من دفعه قبل کامل به کد شما توجه نکردم و استفاده کردن شما از تایمر منو به اشتباه انداخت.
گرچه به نظرم برای مسئله مطرح شده هیچ نیازی به تایمر نیست و استفاده از Screen یا API در موقع لزوم کفایت میکنه.
چون چیزی که من از مسئله مطرح شده برداشت کردم اینه که در یک زمان خاص، فرم فعال تشخیص داده بشه، نه دائما در هر لحظه!
به هر حال حق با شماست :wink: :تشویق:


خواهش میکنم در مورد تایمر هم باید بگم من به تایمر علاقه خاصی دارم :wink:

Ariyan
شنبه 14 شهریور 1383, 06:10 صبح
سلام دوستان عزیز،
اگر فقط فرم فعال در بین فرمهای برنامه خودمون مد نظر باشه، میتونیم یک متغیر از جنس Form به صورت Global تعریف کنیم و در رویداد Activate هر فرم، مقدار این متغیر رو Update کنیم:


Private Sub Form_Activate()
Set MyGlobalVar = Me
End Sub

حالا از هرجای برنامه که لازم باشه، یک Reference به فرم فعال خواهیم داشت.
این روش به API نیازی نداره و یک Refrence کامل از فرم رو همیشه در اختیارمون قرار میده تا هر کاری باهاش انجام بدیم.
اما اگر فرم فعال متعلق به برنامه های دیگه مورد نظر باشه، فقط با روشی که در Postهای قبلی مطرح شد امکان پذیره.
موفق باشین،
امین ثباتی MCSD

اینم راهیست :wink: