Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

Страница: 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

Ответить

Страница: 1 | 2 | 3 | 4 | 5 | 6 |

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



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