PDA

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



Ninja-Assassin
چهارشنبه 13 شهریور 1392, 16:53 عصر
ســــلام
سورسی وجود داره برا بالا موندن فرم از تمام پنجره ها ممنون میشم برام بذارید

mmssoft
چهارشنبه 13 شهریور 1392, 20:00 عصر
اینو بذارید تو جنرال :
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long

Private Const SWP_NOMOVE = 2
Private Const SWP_NOSIZE = 1
Private Const HWND_TOPMOST = -1
Private Const HWND_NOTOPMOST = -2

این کد رو هم توی Form_Load بذارید :

Dim lR As Long
lR = SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE)


البته بهتر بود اول جــســتــجـو می کردید!!!

mehran901
پنج شنبه 14 شهریور 1392, 15:50 عصر
البته از تابع setforgroundwindow هم میتونین استفاده کنین ، تفاوت اصلی این تابع با مثالی که دوستمون MMSSoft زدن تو اینه که Always on top ای که توسط setforgroundwindow ایجاد میشه بر روی همه پنجره ها قرار میگیره ولی با فوکوس روی همون پنجره ... یعنی فقط همون پنجره برنامتون در دسترس هست ... پنجزه های دیگه فعال ویندوز فوکوس نمیگیرن... ولی با روشی که در پست قبلی بیان شده Always on top بدون فوکوس روی پنجره اصلی هست ... با پنجره های دیگه هم میتونید کار کنین

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

توابع مورد نیاز

Private Declare Function SetForegroundWindow Lib "user32" Alias "SetForegroundWindow" (ByVal hwnd As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Ninja-Assassin
شنبه 16 شهریور 1392, 13:27 عصر
اینو بذارید تو جنرال :
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long

Private Const SWP_NOMOVE = 2
Private Const SWP_NOSIZE = 1
Private Const HWND_TOPMOST = -1
Private Const HWND_NOTOPMOST = -2

این کد رو هم توی Form_Load بذارید :

Dim lR As Long
lR = SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE)


البته بهتر بود اول جــســتــجـو می کردید!!!

ممنون خیلی عالی بود
ولی من دو تا فرم دارم تو فرم دو یک چک باکس وجود داره میخوام با زدن چک باکس فرم 2، فرم 1 رو بالا نگه داره و وقتی چک باکس رو برداری فرم 1 از حالت بالا موندن خارج شه ممنون میشم راهنمایی کنید

miladatashin
شنبه 16 شهریور 1392, 14:53 عصر
ممنون خیلی عالی بود
ولی من دو تا فرم دارم تو فرم دو یک چک باکس وجود داره میخوام با زدن چک باکس فرم 2، فرم 1 رو بالا نگه داره و وقتی چک باکس رو برداری فرم 1 از حالت بالا موندن خارج شه ممنون میشم راهنمایی کنید

lR = SetWindowPos(hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE)

mmssoft
شنبه 16 شهریور 1392, 17:59 عصر
بهتره همیشه از خلاقیت خودتون کمک بگیرید، بیشتر مشکلات تون حل میشه. برای این نوع موارد بهتره از ماژول استفاده بشه. این ها رو بذارید تو ماژول :

Public Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long

Public Const SWP_NOMOVE = 2
Public Const SWP_NOSIZE = 1
Public Const HWND_TOPMOST = -1
Public Const HWND_NOTOPMOST = -2

Function SetMeTop(aForm As Form)
On Error Resume Next

Dim lR As Long
lR = SetWindowPos(aForm.hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE)

End Function

Function SetMeNotTop(bForm As Form)
On Error Resume Next

Dim lR As Long
lR = SetWindowPos(bForm.hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE)

End Function



و این هم کد رویداد کلیک چک باکس :

Private Sub Check1_Click()

If Check1.Value = 1 Then SetMeTop Form2 Else SetMeNotTop Form2

End Sub

Ninja-Assassin
شنبه 16 شهریور 1392, 18:33 عصر
ممنون داداش ببخش اینقد زحمت میدم

آخه ماژول بلد نیستم بنویسم :(