Модераторы: Akina

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> программное размещение окон на экране 
:(
    Опции темы
Guest
Дата 14.2.2005, 15:08 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Возвращает (изменяет) в переданную тобой структуру POINT.
  Вверх
kb-nn
Дата 15.2.2005, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 227
Регистрация: 23.12.2003
Где: Нижний Новгород

Репутация: нет
Всего: 1



я делаю вот так
Код

Private Type POINTAPI
   x As Long
   y As Long
End Type

Dim pa1 As POINTAPI
Dim pa2 As POINTAPI
pa1.x = 0
pa1.y = 0
pa2.x = 2 * Screen.Width / 3
pa2.y = Screen.Height
pa1 = ClientToScreen(hwnd, pa1)
pa2 = ClientToScreen(hwnd, pa2)
SetWindowPos hwnd, 0, pa1.x, pa1.y, pa2.x, pa2.y, 0

и при этом хочу, чтобы окно занимало две трети экрана
PM MAIL ICQ   Вверх
Naghual
Дата 15.2.2005, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1893
Регистрация: 15.5.2004
Где: Украина, Днепр

Репутация: 26
Всего: 49



pa2.x = 2 * ((Screen.Width / Screen.TwipsPerPixelX) / 3)
И не нужно никаких ClientToScreen

Это сообщение отредактировал(а) Naghual - 15.2.2005, 14:37


--------------------
Я желаю всем Счастья!
PM ICQ Skype   Вверх
kb-nn
Дата 15.2.2005, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 227
Регистрация: 23.12.2003
Где: Нижний Новгород

Репутация: нет
Всего: 1



не работает smile
PM MAIL ICQ   Вверх
Naghual
Дата 15.2.2005, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1893
Регистрация: 15.5.2004
Где: Украина, Днепр

Репутация: 26
Всего: 49



Ну так и ЧТО не работает?


--------------------
Я желаю всем Счастья!
PM ICQ Skype   Вверх
kb-nn
Дата 15.2.2005, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 227
Регистрация: 23.12.2003
Где: Нижний Новгород

Репутация: нет
Всего: 1



ну не в том месте окно открывается.


PM MAIL ICQ   Вверх
Exception
Дата 15.2.2005, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 7
Всего: 186



А ты проверь Pointapi. Может данные изменились. Функция берет твои коорд. а в той же переменной возвр screen
PM   Вверх
Гость___Sergey__
Дата 15.2.2005, 17:15 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Когда я двигал оконца, то использовал вместо SetWindowPos,
MoveWindow. С ней получалось.
  Вверх
Exception
Дата 15.2.2005, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 7
Всего: 186



Цитата(Run @ 15.2.2005, 17:55)
А ты проверь Pointapi. Может данные изменились. Функция берет твои коорд. а в той же переменной возвр screen

Простите 3ю страницу не заметил smile
Добавлено @ 18:51
Цитата
использовал вместо SetWindowPos,
MoveWindow. С ней получалось.

Вполне логично. В SetWPos есть парам. hwndInsertAfter а в moveWindow его нет. А нам он и не нужен smile

PM   Вверх
kb-nn
Дата 22.3.2005, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 227
Регистрация: 23.12.2003
Где: Нижний Новгород

Репутация: нет
Всего: 1



слушайте, простите, ну почему у меня не работает....

Option Explicit
Private Declare Function ClientToScreen Lib "user32" (ByVal hwnd As Long, lpPoint As POINTAPI) As Long

Public Declare Function EnumThreadWindows Lib "user32" (ByVal dwThreadId As Long, ByVal lpfn As Long, ByVal lParam As _
Long) As Long

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

Declare Function MoveWindow Lib "user32" (ByVal hwnd As Long, ByVal x As Long, ByVal y As Long, _
ByVal nWidth As Long, ByVal nHeight As Long, ByVal bRepaint As Long) As Long

Public Declare Function CreateProcess Lib "kernel32" Alias "CreateProcessA" (ByVal lpApplicationName As String, ByVal _
lpCommandLine As String, lpProcessAttributes As Long, lpThreadAttributes As Long, ByVal bInheritHandles As Long, ByVal _
dwCreationFlags As Long, lpEnvironment As Long, ByVal lpCurrentDriectory As String, lpStartupInfo As STARTUPINFO, _
lpProcessInformation As PROCESS_INFORMATION) As Long

Public Type PROCESS_INFORMATION
hProcess As Long
hThread As Long
dwProcessId As Long
dwThreadId As Long
End Type


Public Type STARTUPINFO
cb As Long
lpReserved As String
lpDesktop As String
lpTitle As String
dwX As Long
dwY As Long
dwXSize As Long
dwYSize As Long
dwXCountChars As Long
dwYCountChars As Long
dwFillAttribute As Long
dwFlags As Long
wShowWindow As Integer
cbReserved2 As Integer
lpReserved2 As Long
hStdInput As Long
hStdOutput As Long
hStdError As Long
End Type

Public Type POINTAPI
x As Long
y As Long
End Type

Sub Main()
Dim OurThread As Long 'Íèòü çàïóùåííîãî ïðîöåññà
Dim retval As Long 'Âîçâðàùàåìîå çíà÷åíèå
Dim si As STARTUPINFO, pi As PROCESS_INFORMATION 'Ñòðóêòóðû
si.cb = Len(si)
Dim AppName As String 'Èìÿ ïðèëîæåíèÿ
AppName = "C:\WINDOWS\EXPLORER.EXE"
retval = CreateProcess(AppName, vbNullString, ByVal 0&, ByVal 0&, ByVal 0&, ByVal 0&, ByVal 0&, _
vbNullString, si, pi) 'Çàïóñêàåì ïðèëîæåíèå
If retval = 0 Then Exit Sub 'Åñëè ïðîèçîøëà îøèáêà, âûõîäèì
EnumThreadWindows pi.dwThreadId, AddressOf EnumFunc, ByVal 0& 'Ïåðåäà¸ì óêàçàòåëü íà EnumFunc Âèíäàì
End Sub

Public Function EnumFunc(ByVal hwnd As Long, ByVal lParam As Long) As Long
Dim pa1 As POINTAPI
Dim pa2 As POINTAPI
pa1.x = 0
pa1.y = 0
pa2.x = 2 * ((Screen.Width / Screen.TwipsPerPixelX) / 3)
pa2.y = Screen.Height '/ Screen.TwipsPerPixelY
MoveWindow hwnd, pa1.x, pa1.y, pa2.x, pa2.y, True
End Function
Добавлено @ 11:37
вот, лучше так. извиняюсь. для удобства чтения

Код

Option Explicit
Private Declare Function ClientToScreen Lib "user32" (ByVal hwnd As Long, lpPoint As POINTAPI) As Long

Public Declare Function EnumThreadWindows Lib "user32" (ByVal dwThreadId As Long, ByVal lpfn As Long, ByVal lParam As _
Long) As Long

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

Declare Function MoveWindow Lib "user32" (ByVal hwnd As Long, ByVal x As Long, ByVal y As Long, _
ByVal nWidth As Long, ByVal nHeight As Long, ByVal bRepaint As Long) As Long

Public Declare Function CreateProcess Lib "kernel32" Alias "CreateProcessA" (ByVal lpApplicationName As String, ByVal _
lpCommandLine As String, lpProcessAttributes As Long, lpThreadAttributes As Long, ByVal bInheritHandles As Long, ByVal _
dwCreationFlags As Long, lpEnvironment As Long, ByVal lpCurrentDriectory As String, lpStartupInfo As STARTUPINFO, _
lpProcessInformation As PROCESS_INFORMATION) As Long

Public Type PROCESS_INFORMATION
       hProcess As Long
       hThread As Long
       dwProcessId As Long
       dwThreadId As Long
End Type


Public Type STARTUPINFO
       cb As Long
       lpReserved As String
       lpDesktop As String
       lpTitle As String
       dwX As Long
       dwY As Long
       dwXSize As Long
       dwYSize As Long
       dwXCountChars As Long
       dwYCountChars As Long
       dwFillAttribute As Long
       dwFlags As Long
       wShowWindow As Integer
       cbReserved2 As Integer
       lpReserved2 As Long
       hStdInput As Long
       hStdOutput As Long
       hStdError As Long
End Type

Public Type POINTAPI
    x As Long
    y As Long
End Type

Sub Main()
Dim OurThread As Long 'Íèòü çàïóùåííîãî ïðîöåññà
Dim retval As Long 'Âîçâðàùàåìîå çíà÷åíèå
Dim si As STARTUPINFO, pi As PROCESS_INFORMATION 'Ñòðóêòóðû
si.cb = Len(si)
Dim AppName As String 'Èìÿ ïðèëîæåíèÿ
AppName = "C:\WINDOWS\EXPLORER.EXE"
retval = CreateProcess(AppName, vbNullString, ByVal 0&, ByVal 0&, ByVal 0&, ByVal 0&, ByVal 0&, _
vbNullString, si, pi) 'Çàïóñêàåì ïðèëîæåíèå
If retval = 0 Then Exit Sub 'Åñëè ïðîèçîøëà îøèáêà, âûõîäèì
EnumThreadWindows pi.dwThreadId, AddressOf EnumFunc, ByVal 0& 'Ïåðåäà¸ì óêàçàòåëü íà EnumFunc Âèíäàì
End Sub

Public Function EnumFunc(ByVal hwnd As Long, ByVal lParam As Long) As Long
Dim pa1 As POINTAPI
Dim pa2 As POINTAPI
pa1.x = 0
pa1.y = 0
pa2.x = 2 * ((Screen.Width / Screen.TwipsPerPixelX) / 3)
pa2.y = Screen.Height '/ Screen.TwipsPerPixelY
MoveWindow hwnd, pa1.x, pa1.y, pa2.x, pa2.y, True
End Function

PM MAIL ICQ   Вверх
kb-nn
Дата 22.3.2005, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 227
Регистрация: 23.12.2003
Где: Нижний Новгород

Репутация: нет
Всего: 1



хочу, чтобы окно занимало левые две трети экрана. (и левый верх был в левом верхнем углу)
PM MAIL ICQ   Вверх
Guest
Дата 23.3.2005, 16:16 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Попробуй передать необходимые параметры окна
в STARTUPINFO, а потом CreateProcess.
И я так подозреваю, не
Код

AppName = "C:\WINDOWS\EXPLORER.EXE"

а
Код

AppName = "C:\WINDOWS\IEXPLORE.EXE"


  Вверх
Guest
Дата 23.3.2005, 16:21 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Или так
Код

AppName = "C:\Program Files\Internet Explorer\IEXPLORE.EXE"

  Вверх
kb-nn
Дата 23.3.2005, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 227
Регистрация: 23.12.2003
Где: Нижний Новгород

Репутация: нет
Всего: 1



но окно открывается!
только не в том месте.
и в ширину оно занимает не 2/3, а больше


так?

Код

Public pa1 As POINTAPI
Public pa2 As POINTAPI

Sub Main()
Dim OurThread As Long 'Íèòü çàïóùåííîãî ïðîöåññà
Dim retval As Long 'Âîçâðàùàåìîå çíà÷åíèå
Dim si As STARTUPINFO, pi As PROCESS_INFORMATION 'Ñòðóêòóðû
si.cb = Len(si)
Dim AppName As String 'Èìÿ ïðèëîæåíèÿ
AppName = "C:\WINDOWS\EXPLORER.EXE"

pa1.x = 0
pa1.y = 0
pa2.x = 2 * ((Screen.Width / Screen.TwipsPerPixelX) / 3)
pa2.y = Screen.Height '/ Screen.TwipsPerPixelY
si.dwX = pa1.x
si.dwY = pa1.y
si.dwXSize = pa2.x
si.dwYSize = pa2.y

retval = CreateProcess(AppName, vbNullString, ByVal 0&, ByVal 0&, ByVal 0&, ByVal 0&, ByVal 0&, _
vbNullString, si, pi) 'Çàïóñêàåì ïðèëîæåíèå
If retval = 0 Then Exit Sub 'Åñëè ïðîèçîøëà îøèáêà, âûõîäèì
EnumThreadWindows pi.dwThreadId, AddressOf EnumFunc, ByVal 0& 'Ïåðåäà¸ì óêàçàòåëü íà EnumFunc Âèíäàì
End Sub

Public Function EnumFunc(ByVal hwnd As Long, ByVal lParam As Long) As Long
    MoveWindow hwnd, pa1.x, pa1.y, pa2.x, pa2.y, True
End Function


увы, всё тоже самое....
PM MAIL ICQ   Вверх
Гость___Sergey__
Дата 23.3.2005, 17:01 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Вставь до вызова EnumThreadWindows
Sleep 1000, можеть меньше, может больше. Пробуй методом тыка.

По моему окно не успевает создаться, а ты уже его энумить собрался smile
  Вверх
Страницы: (4) Все 1 2 [3] 4 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB6 | Следующая тема »


 




[ Время генерации скрипта: 0.0686 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.