Страница: 1 | 2 | 3 | 4 | 5 | 6 |
Вопрос: Позиционирование диалогов CommonDialog
Добавлено: 04.07.04 16:20
Автор вопроса: Lister | ICQ: 298621256
Ответы
Всего ответов: 80
Номер ответа: 61
Автор ответа:
Lister
ICQ: 298621256
Вопросов: 57
Ответов: 304
Профиль | | #61
Добавлено: 17.09.04 12:14
2 cresta:
1)У меня тултип отображается только тогда, когда подведешь курсор к центру кнопки... и немного подождешь
2)Я закомментировал строку .idCommand = IDC_MYBUTTON в WM_NOTIFY. Результат тот же самый Иконки нет.
3)DrawIcon tCDI.nmCommon.hdc, ix, iy, hMyIcon я вывел за границы проверки ix > 0. Икоонки нет...
Cresta, у тебя при нажатии на верхнюю кнопку ix отрицательный??? Странно У меня всегда положительный...
Кстати, я не понял, зачем при определении координат рисования иконки нужен вот этот кусок:
SendMessage toolbarHwnd, TB_GETBUTTON, 1, tbbi
iSize = SendMessage(toolbarHwnd, TB_GETBUTTONSIZE, 0, 0)
rc.Left = 0: rc.Top = 0
rc.Right = LoWord(iSize): rc.Bottom = HiWord(iSize)
если информация о размерах кнопки берется из tCDI.nmCommon.rc???
ix = (tCDI.nmCommon.rc.Right - tCDI.nmCommon.rc.Left - 32) \ 2
Номер ответа: 62
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #62
Добавлено: 17.09.04 15:56
1.Пробовал ждать тултипа - не дождался.
2.IDC_MYBUTTON как таковой вообще не передаётся в WindowProc через структуру tCDI. 3.Идентифицировать, которая кнопка нажата, можно только по ix (в данном примере), для верхней он равен -16, потому и нажатие на верхнюю приводит к пропаданию иконки
4.
SendMessage toolbarHwnd, TB_GETBUTTON, 1, tbbi
iSize = SendMessage(toolbarHwnd, TB_GETBUTTONSIZE, 0, 0)
rc.Left = 0: rc.Top = 0
rc.Right = LoWord(iSize): rc.Bottom = HiWord(iSize)
- это похоже осталось от того кода, который был взят за основу. Может где-то сидят ещё такие куски кода, и они портят дело? Похоже, что это всё надо по-новой делать.
Номер ответа: 63
Автор ответа:
Lister
ICQ: 298621256
Вопросов: 57
Ответов: 304
Профиль | | #63
Добавлено: 17.09.04 16:09
1) очень странно. Тултип у меня есть... Но с ним ерунда - как отведешь указатель из центра кнопки, тут же исчезает
3)похоже, что у тебя ширина первой кнопки = 0, поэтому
ix = (tCDI.nmCommon.rc.Right - tCDI.nmCommon.rc.Left - 32) \ 2
и равно -16
у меня же для ВСЕХ кнопок разность ix 27. То бишь ширина кнопки будет 27*2+32=86 пикселей.
4)Может быть и сидят...
Меня вот одно забавляет - у sne все работает, а у меня на двух компах, на двух разных ХР-ках не пашет
Ты, кстати, не пробовал везде поставить Option Explicit?
Номер ответа: 64
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #64
Добавлено: 17.09.04 16:20
Не знаю, какова ширина кнопки, но вижу, что на экране она такая же как и у остальных кнопок.
Option Explicit - хе-хе, чтобы вставить его, надо весь проект пересмотреть полность, я уже однажды вставлял, правда проект гораздо поболее был, чуть не умер, пока всё поисправлял Еле жив остался, до сих пор хромаю на левую ногу...
А чем всё это разгребать и править, проще тогда уже с нуля всё нарисовать.
Тут ради интереса пошёл к соседу, у него XP pro - тоже не показывает
Номер ответа: 65
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #65
Добавлено: 18.09.04 09:48
Lister
Я тут покромсал немного проект, сейчас картинку рисует, тултип тоже. Тебе нужно?
Номер ответа: 66
Автор ответа:
Lister
ICQ: 298621256
Вопросов: 57
Ответов: 304
Профиль | | #66
Добавлено: 18.09.04 10:00
Да, очень нужно!!!
Номер ответа: 67
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #67
Добавлено: 18.09.04 10:39
Закинул
Там ещё можно подорабатывать, например, чтобы рисунок на утопленой кнопке чуть смещался вправо и вниз (делать OffsetRect), только сначала надо определить последовательность прихода сообщений. Можно с CopyMemory повоевать, чтобы не моргали иконки на рабочем столе и т.д.
В общем посмотри, рисует у тебя или нет?
Номер ответа: 68
Автор ответа:
Lister
ICQ: 298621256
Вопросов: 57
Ответов: 304
Профиль | | #68
Добавлено: 18.09.04 12:56
Рисует, только прерывисто. Подводишь курсор к кнопке, рисунок исчезает, затем
появляется вместе с тултипом. Плюс моргает по мере движения курсора по
кнопками
Номер ответа: 69
Автор ответа:
Lister
ICQ: 298621256
Вопросов: 57
Ответов: 304
Профиль | | #69
Добавлено: 18.09.04 13:15
Я понял, почему у некоторых рисуется иконка на кнопке - у них в оформлении
ХР стоит классический стиль, то бишь без манифестов. И видимо это очень сильно влияет на структуру NMTBCUSTOMDRAW
Может, буз манифестов NMTBCUSTOMDRAW как-то урезать надо?
Потому что без них родимых всё великолепно работает...
Номер ответа: 70
Автор ответа:
Comanche
Вопросов: 87
Ответов: 459
Профиль | | #70
Добавлено: 18.09.04 13:43
2 cresta:
>> Comanche, а какова основная цель проекта? Сделать оперативный просмотрщик .txt - .bmp - .jpg файлов ?
Точно, а все заморочки со "своими" кнопками тулбара - появились по ходу: просто стало интересно, как это сделать, я полез в MSDN, стал разбираться с тулбарами, ихними сообщениями и т.д. Потом захотелось, чтобы окошко стало побольше размером - чтоб большие картинки было удобно смотреть, потом - чтоб вообще во весь экран; потом - чтобы информация о картинке (разрешение, цветность) выводилась для как можно бОльшего числа форматов - и я полез разбираться с GDI+, и т.д. А вообще этот диалог используется в одном проекте - как простенький "просмотрщик".
>> это похоже осталось от того кода, который был взят за основу. Может где-то сидят ещё такие куски кода, и они портят дело? Похоже, что это всё надо по-новой делать.
Нет, нет и ещё раз нет! Можете посмотреть, какой код был взят за основу - см. приведённую ранее ссылку на проект Оловянникова: там нет ничего, связанного с тулбарами, иконками и т.д. И кроме того (насчёт "делать всё по-новой" - у меня-то всё прекрасно работает...
2 Lister:
Блин, в MSDN'овском описании структуры NMTBCUSTOMDRAW единственное место, где сказано про зависимость от XP, - это где про iListGap написано. Когда, наконец, у меня появится комп с XP, я хочу всё же разобраться с этой проблемой...
Номер ответа: 71
Автор ответа:
Lister
ICQ: 298621256
Вопросов: 57
Ответов: 304
Профиль | | #71
Добавлено: 18.09.04 13:54
Я и говорю, без манифеста все великолепно работает и tCDI.nmCommon.dwItemSpec выдает ID новой кнопки - 12345, также как и ID остальных кнопок.
Сейчас как раз сижу и ковыряюсь в MSDN
Номер ответа: 72
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #72
Добавлено: 18.09.04 15:08
Рисует, только прерывисто
Причина: в процедуру WindowProc не приходит id кнопки (IDC_MYBUTTON=12345). Вместо 12345 всё время 0, поэтому пришлось на сообщения не только от верхней кнопки рисовать икону, но и по остальным тоже, т.к. невозможно определить, от какой кнопки пришло сообщение. Поэтому и перерисовывается при движении мыши и по остальным кнопкам.
Я понял, почему у некоторых рисуется иконка на кнопке
Точно. Я тоже попробовал вместо XP включить классическую тему - и в исходном проекте тоже стала рисоваться
И появились ID кнопок, вот они:
12345
41060
41061
41062
41063
41064
Comanche, вот этот кусок зачем?
'''' For i = LBound(buttArr) To UBound(buttArr)
'''' currentState = SendMessageLong(toolbarHwnd, TB_GETSTATE, buttArr(i), 0)
'''' currentState = currentState And (Not TBSTATE_CHECKED)
'''' retVal = SendMessageLong(toolbarHwnd, TB_SETSTATE, buttArr(i), currentState)
'''' Next i
Я его закомментировал - работает точно также, все кнопки работаю как непосредственно от мыши, так и при выборе папки в верхнем комбо. И цикл где создаётся этот массив, тоже покосил. Винда сама перерисовывает отжатое\нажатое состояние штатных кнопок. Тебе только верхнюю надо перерисовывать, что делается немного повыше в этой же процедуре.
И вот этот кусок, о нём писал Lister:
'' SendMessage toolbarHwnd, TB_GETBUTTON, 1, tbbi
'' iSize = SendMessage(toolbarHwnd, TB_GETBUTTONSIZE, 0, 0)
'' rc.Left = 0: rc.Top = 0
'' rc.Right = LoWord(iSize): rc.Bottom = HiWord(iSize)
тоже убрал. Он вообще явно нигде не используется.
If tNMH.code = NM_CUSTOMDRAW And tNMH.hwndFrom = toolbarHwnd Then
сделал как:
If tNMH.hwndFrom = toolbarHwnd Then
При чём со всеми этими изменениями работает как в IDE, так и в ехе-виде.
Номер ответа: 73
Автор ответа:
Lister
ICQ: 298621256
Вопросов: 57
Ответов: 304
Профиль | | #73
Добавлено: 18.09.04 15:19
Точно. Я тоже попробовал вместо XP включить классическую тему - и в исходном проекте тоже стала рисоваться
И что теперь делать? В MSDN вроде ничего не написано (
Номер ответа: 74
Автор ответа:
Lister
ICQ: 298621256
Вопросов: 57
Ответов: 304
Профиль | | #74
Добавлено: 18.09.04 15:23
Кстати, заметили, что нижняя (сетевое окружение) кнопка не имеет стиля TBSTATE_CHECKED?
Номер ответа: 75
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #75
Добавлено: 18.09.04 15:34
Можете посмотреть, какой код был взят за основу
Да никто не оспаривает, что это твоя идея и реализация
Тут ещё идею подкину тебе: в верхнем тулбаре вставить ещё кнопку, по нажатию на которую будет открываться диалог выбора папки и выбраная в нем папка будет папкой по умолчанию для верхней кнопки. Т.е. чтобы верхняя кнопка не была жестко привязана к APP.Path, и можно было оперативно менять стартовую директорию. И хранить в том же .ini