Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Ресайз формы... Добавлено: 19.07.05 21:46  

Автор вопроса:  Nio | Web-сайт: www.fea.nxt.ru
Задача: вывести форму на "Полный экран", по типу просмотра "на весь экран" в ACDSee (программа аналогичной направленности)

Имеется странная проблема с ресайзом формы: форма выводится поверх всех окон, но какие размеры по вертикали на устанавливай - не хочет закрывать панель задач более, чем наполовину.


frmMain.Top = -350 'Чтобы не было видно заголовка
frmMain.Left = 0
Dim ll_Width As Long
Dim ll_Height As Long
ll_Width = GetSystemMetrics(SM_CXSCREEN)
ll_Height = GetSystemMetrics(SM_CYSCREEN)
Call SetWindowPos(frmMain.hWnd, -1, 0, -23, ll_Width * 10, ll_Height * 10, SWP_SHOWWINDOW)

Какой множитель не ставь к параметрам ll_Height и ll_Width - разницы нет...

Ответить

  Ответы Всего ответов: 14  

Номер ответа: 1
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #1 Добавлено: 19.07.05 22:20
У формы есть свойство WindowState, поставь Maximized

Ответить

Номер ответа: 2
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #2 Добавлено: 19.07.05 22:21
Чтобы небыло заголовка, есть свойство у формы BorderStyle, поставь None

Ответить

Номер ответа: 3
Автор ответа:
 Nio



Вопросов: 15
Ответов: 115
 Web-сайт: www.fea.nxt.ru
 Профиль | | #3
Добавлено: 20.07.05 02:46
Если бы всё было так просто - я бы сюда не писал... Это было первое, что я испробовал, однако результат тот же - форма не доходит до нижнего края экрана ровно на половину высоты панели задач. Даже если та скрыта.

Ответить

Номер ответа: 4
Автор ответа:
 HOOLIGAN



Вопросов: 0
Ответов: 1066
 Профиль | | #4 Добавлено: 20.07.05 02:49
Убери панель задач

Ответить

Номер ответа: 5
Автор ответа:
 HOOLIGAN



Вопросов: 0
Ответов: 1066
 Профиль | | #5 Добавлено: 20.07.05 02:51
Пардон, последнего поста не было, когда отвечал :)

Ответить

Номер ответа: 6
Автор ответа:
 HOOLIGAN



Вопросов: 0
Ответов: 1066
 Профиль | | #6 Добавлено: 20.07.05 02:57
MoveWindow ByVal Me.hwnd, ByVal 0, ByVal 0, ByVal 1024, ByVal 768, True


И панель скрывать не надо.
Естественно убрать заголовок.

Ответить

Номер ответа: 7
Автор ответа:
 Nio



Вопросов: 15
Ответов: 115
 Web-сайт: www.fea.nxt.ru
 Профиль | | #7
Добавлено: 20.07.05 06:45
Когда у формы нет заголовка изначально (во время написания кода) код
frmMain.SetFocus
Dim ll_Width As Long
Dim ll_Height As Long
ll_Width = GetSystemMetrics(SM_CXSCREEN)
ll_Height = GetSystemMetrics(SM_CYSCREEN)
SetWindowPos frmMain.hwnd, -1, 0, 0, ll_Width * 10, ll_Height * 10, SWP_SHOWWINDOW
работает идеально. Проблема в том, что когда форма не максимизирована, заголовок у неё должен быть (BorderStyle=2). Удаление заголовка (выставление BorderStyle=0) во время выполнения не помогает: заголовок исчезает, форма распахивается... Но опять же, не на весь экран, оставляя пустую полоску там, где раньше был заголовок.
Не помогает ни DoEvents между удалением заголовка и ресайзом, ни Sleep... Только если форму свернуть обратно (это вызывается по двойному клику на ней), а потом развернуть ещё раз - разворачивается как надо. Т.е., требуется три даблклика по форме вместо одного. Программная имитация этих действий не помогает... :(

Ответить

Номер ответа: 8
Автор ответа:
 someone



Вопросов: 215
Ответов: 1596
 Web-сайт: 123
 Профиль | | #8
Добавлено: 21.07.05 12:22
Странно, у меня норм работает...
Кстати, frmMain.Top = -350 не катит, т.к. многие выставляют нестандартный размер заголовка у себя в виндовзовских настройках..

Ответить

Номер ответа: 9
Автор ответа:
 Nio



Вопросов: 15
Ответов: 115
 Web-сайт: www.fea.nxt.ru
 Профиль | | #9
Добавлено: 21.07.05 14:28
Что работает - первый пример, или второй?

В общем ладно, забил я на это дело. Для основных функций программы ограничусь максимизацией в пределах материнской MDI-формы, а для просмотра на весь экран сделаю отдельное приложение. Кстати, его можно вызывать через ShellExecute, так что юзер ничего не заметит... Конечно, это кривое решение, зато будет работать железно :)

Ответить

Номер ответа: 10
Автор ответа:
 someone



Вопросов: 215
Ответов: 1596
 Web-сайт: 123
 Профиль | | #10
Добавлено: 21.07.05 14:35
работает второй пример.
Кстати, его можно вызывать через ShellExecute, так что юзер ничего не заметит... Конечно, это кривое решение, зато будет работать железно :)

когда ты откомпилируешь прогу, никто тебе уже не скажет где криво, а где нет ;)
не все равно ли, если работает? ;)

Ответить

Номер ответа: 11
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #11 Добавлено: 21.07.05 16:03
нет, не всёравно, должно работать ровно... :) Вообщето я не пойму, мне чтоб развернуть форму ПОЛНОСТЬЮ на весь экран хватает св-ва WindowState. И вообще почему именно ПОЛОВИНА панели задач? Мне кажеться то что-то в винде у тебя... Ещё в принципе нечего не мешает поставить BorderStyle=0, скрыть панель задач, и развенуть форму чуть чуть больше (Screen.Height + 100) итп...

Ответить

Номер ответа: 12
Автор ответа:
 Nio



Вопросов: 15
Ответов: 115
 Web-сайт: www.fea.nxt.ru
 Профиль | | #12
Добавлено: 21.07.05 18:22
Поясняю ещё раз: форма имеет заголовок. Она должна его иметь, пока не развёрнута на весь экран, потому что так надо. Итак, убираем заголовок (Borderstate=0). Если максимизировать через WindowState, она просто развернётся, не перекрыв панели задач. А надо, чтобы поверх всех окон... Поэтому разворачиваем через API, как во втором примере. Форма разворачивается... Перекрывает всё и вся, в том числе панель задач (дело вообще не в ней)... А НА МЕСТЕ, ГДЕ БЫЛ ЗАГОЛОВОК остаётся полоска пустоты, которая исчезает, только если форму свернуть и развернуть ещё раз. Причём не программно, а вручную, программная имитация этих действий не помогает.

Парадокс в том, что когда форма максимизирована, ни перемещать, ни менять её размеры нельзя...

К тому же, оказывается, когда активируешь одну из дочерних форм MDI-формы, НЕ дочерняя форма того же приложения сворачиваются. Если её же сделать дочерней, этого не происходит. Но дочернюю форму сделать НЕ дочерней во время выполнения нельзя! А дочернюю невозможно развернуть на весь экран, только в пределах материнской... Поэтому я на это дело забил. Сделал все формы дочерними, а для просмотра на весь экран - отдельное приложение. Заодно пригодится в качестве автономного просмотрщика, когда не нужен редактор. ^_^

Ответить

Номер ответа: 13
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #13 Добавлено: 21.07.05 22:32
мда, ну ты и замутил тут всё. Ладно, делай как знаешь, а вообще можно посмотреть на тот парадокс? ну там где форма криво разворачивается, или чего там... так и не понял, вообщем дай код посмотреть.

Ответить

Номер ответа: 14
Автор ответа:
 Nio



Вопросов: 15
Ответов: 115
 Web-сайт: www.fea.nxt.ru
 Профиль | | #14
Добавлено: 22.07.05 06:15
Зачем код? Смотри уж готовую бету...

Итак, программа для просмотра/редактирования манги с субтитрами. Для чего это нужно? Предположим, имеется некоторая манга на английском языке. Вы её скачиваете (достаёте), читаете... Постепенно ребята с mangaproject.ru переводят её на русский язык, и чтобы почитать на русском, необходимо заново скачать многие десятки, а то и сотни мегабайт манги... Что не есть хорошо. Теперь же можно будет скачать крошечный архив с субтитрами, подключить их, и наслаждаться мангой на русском языке: оригинальные надписи будут закрыты русскими, их можно в любой момент отключить, подредактировать и т.п. В общем, смотрите:

www.fea.nxt.ru/setup.exe
Зеркало: www.fanime.narod.ru/setup.exe

Пример ианги с субтитрами:
www.fea.nxt.ru/sample.rar
Зеркало: www.fanime.narod.ru/sample.rar

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам