Автор | Сообщение |
|
| |
Пост N: 33
Зарегистрирован: 05.06.07
|
|
Отправлено: 29.10.07 03:23. Заголовок: Вопросы и замечания по реализации некоторых объектов
накопилось некоторое количество вопросов, на которые я не смог найти ответа . А так же замечаний по реализации некоторых свойств. Думаю - уместно будет их опубликовать для коллективного обсуждения, устранения или моего образования (если я что то не так понимаю). Все - в версии 1.43. Может в 1.44 что то уже изменилось? ---- У контрола TAB нет свойств для управления цветом букв в заголовках страниц и фоном на теле TAB. Последнее особенно важно т.к. не позволяет выбрать цвет TAB в тон измененному цвету окна. Аналогично - TimePicker ---- В SLIDER нет реакции на системное событие GotFocus и LostFocus (толко OnChange). Т.е. система эти действия производит, а МиниГУИ их не ловит. А мне было бы полезно и удобно . Аналогично в RadioGroup. ----- TextBox. Во время вставки текста в TextBox из ClipBoard посредством Shif+Ins происходит изменение режима вставки как будто просто нажали Ins. ----- ListBox 1. запись нового значения в текущую позицию i:=wMain.List_1.Value wMain.List_1.Item(i):=t сбрасывает текущую позицию в 0. Думаю - это нелогичное поведение. Восстановление позиции wMain.List_1.Value:=i вызывает срабатывание обработчика события OnChange для List_1 2. запись нового значения в нулевую позицию wMain.List_1.Item(0):=t добавляет новую строку т.е. выполняет wMain.List_1.AddItem(t) Это баг или фича? --- функция file(fn) не переваривает полное имя файла с пробелом в имени каталога или файла типичный код if !file(fn); MsgStop('Файл '+fn+' не найден'); endif Изменение file('"'+fn+'"') - не помогает. Что делать? --- повторю про ShowGrid() чтобы было все в одном месте Сделал себе функцию ShowGrid() для целей конкретного приложения. При компиляции выпадает на ошибку. Переобозвал в ShowGrid2() - все Ок. Поиск по всем файлам дал только SHOWGRID в составе команды DRAW GRAPH IN WINDOW GraphTest ; ... ; SHOWGRID ; ... Думаю - это нелогичное поведение компилятора - не различать внутренний тэг команды и честную функцию. --- Как изменить имя существующего на форме контрола? Только удалением и созданием нового с новым именем? Но тогда нарушится последовательность обхода. Закрывать форму и открывать снова с новым именем контрола? --- Объясните на пальцах - что такое активация окна? Я считал что окно пассивно до активации , т.е. не выполняет никаких активных действий. А выяснилось что между "load window ..." и "activate window ..." уже срабатывают обработчики событий окна OnSize и OnMove. Да наверное и другие тоже. --- Жду ответа как соловей лета. С наилучшими пожеланиями. SadStar.
|
|
|
Ответов - 13
[только новые]
|
|
|
| постоянный участник
|
Пост N: 295
Зарегистрирован: 09.10.06
|
|
Отправлено: 29.10.07 12:55. Заголовок: Re:
SADSTAR2 пишет: цитата: | Поиск по всем файлам дал только SHOWGRID в составе команды DRAW GRAPH IN WINDOW GraphTest ; ... ; SHOWGRID ; ... Думаю - это нелогичное поведение компилятора - не различать внутренний тэг команды и честную функцию. |
| i_altsyntax.ch #xcommand SHOWGRID <grid>; =>; _HMG_ActiveControlFontItalic := <grid>
|
|
|
|
| модератор
|
Пост N: 623
Зарегистрирован: 25.05.05
|
|
Отправлено: 29.10.07 13:06. Заголовок: Re:
SADSTAR2 пишет: цитата: | У контрола TAB нет свойств для управления цветом букв в заголовках страниц и фоном на теле TAB. Последнее особенно важно т.к. не позволяет выбрать цвет TAB в тон измененному цвету окна. Аналогично - TimePicker |
| Все верно! Нужна помощь сишников и/или знатоков WinAPI в реализации этого свойства SADSTAR2 пишет: цитата: | В SLIDER нет реакции на системное событие GotFocus и LostFocus (толко OnChange). |
| Снова Вы абсолютно правы, но это уже особенности реализации этого контрола в WinAPI, который не имеет подобных событий Предлагайте, какие из существующий системных сообщений у этого конторола мы может использовать для обработки GotFocus и LostFocus SADSTAR2 пишет: цитата: | функция file(fn) не переваривает полное имя файла с пробелом в имени каталога или файла |
| Это косяки реализации этой функции в Харборе Вроде, разработчики работают над исправлением ситуации - предложили новую функцию HB_FILEEXISTS(), но она не поддерживает маски SADSTAR2 пишет: цитата: | Сделал себе функцию ShowGrid() для целей конкретного приложения. При компиляции выпадает на ошибку. |
| Увы, так работает препроцессор Харбора SADSTAR2 пишет: цитата: | Как изменить имя существующего на форме контрола? |
| А зачем? Именуйте как надо сразу... SADSTAR2 пишет: цитата: | Закрывать форму и открывать снова с новым именем контрола? |
| Думаю, что да SADSTAR2 пишет: цитата: | что такое активация окна? |
| Это когда окно уже создано, но еще не показано SADSTAR2 пишет: цитата: | Я считал что окно пассивно до активации |
| Активация вызывает вывод окна на экран и остановку для обработки системных ссобщений. Впрочем, такая остановка может быть отложена при использовании класса NOWAIT, но тогда может потребоваться позже вызвать DO MESSAGE LOOP.
|
|
|
|
| модератор
|
Пост N: 624
Зарегистрирован: 25.05.05
|
|
Отправлено: 29.10.07 13:08. Заголовок: Re:
SADSTAR2 пишет: цитата: | ListBox 1. запись нового значения в текущую позицию i:=wMain.List_1.Value wMain.List_1.Item(i):=t сбрасывает текущую позицию в 0. Думаю - это нелогичное поведение. |
| Увы, так работает WinAPI SADSTAR2 пишет: цитата: | 2. запись нового значения в нулевую позицию wMain.List_1.Item(0):=t добавляет новую строку т.е. выполняет wMain.List_1.AddItem(t) Это баг или фича? |
| Снова работает WinAPI Если Вас не устраивает такое поведение ListBox, то попробуйте использовать GRID
|
|
|
|
| постоянный участник
|
Пост N: 296
Зарегистрирован: 09.10.06
|
|
Отправлено: 29.10.07 13:50. Заголовок: Re:
gfilatov пишет: цитата: | А зачем? Именуйте как надо сразу... |
| Очевидно, что речь идет о дизайнере форм или чего нибудь другого. SADSTAR2 в коде создания всех контролов вы можете встретить такой код mVar := '_' + ParentFormName + '_' + ControlName .. Public &mVar. := k .. _HMG_aControlNames [k] := ControlName Очевидно, что mVarNew := '_' + ParentFormName + '_' + ControlNameNew Public &mVarNew := mVar _HMG_aControlNames [mVarNew] := ControlNameNew RELEASE mVar принесет нам желаемый результат. Но будьте осторожны с псевдо ООП..
|
|
|
|
| постоянный участник
|
Пост N: 297
Зарегистрирован: 09.10.06
|
|
Отправлено: 29.10.07 14:10. Заголовок: Re:
SADSTAR2 пишет: цитата: | У контрола TAB нет свойств для управления цветом букв в заголовках страниц и фоном на теле TAB. |
| Частично исправить ситуацию можно используя сл.конструкцию Brush := CreateSolidBrush( red, green, blue ) SetWindowBrush( hWnd, Brush ) Где hWnd хэндл нужного вам контрола. Причем можно использовать для установки фона и картинку. Подробнее смотрите source\h_wbrush.prg
|
|
|
|
| |
Пост N: 34
Зарегистрирован: 05.06.07
|
|
Отправлено: 30.10.07 01:48. Заголовок: Re:
gfilatov пишет: цитата: | SADSTAR2 пишет: цитата: В SLIDER нет реакции на системное событие GotFocus и LostFocus (толко OnChange). Снова Вы абсолютно правы, но это уже особенности реализации этого контрола в WinAPI, который не имеет подобных событий Предлагайте, какие из существующий системных сообщений у этого конторола мы может использовать для обработки GotFocus и LostFocus |
| Я наверное имею неправильные представления о работе системы, но Слайдер ведь получает фокус ввода так же как и кнопка или текстбокс. Т.е. кнопкой <Tab> без мыши попадаешь на слайдер, видишь рамку которая показывает текущий фокус ввода, управляешь слайдером клавишами и покидаешь по <Tab>. Значит должно быть и событие такое.
|
|
|
|
| модератор
|
Пост N: 627
Зарегистрирован: 25.05.05
|
|
Отправлено: 30.10.07 17:20. Заголовок: SADSTAR2 пишет: Lis..
SADSTAR2 пишет: цитата: | ListBox 1. запись нового значения в текущую позицию i:=wMain.List_1.Value wMain.List_1.Item(i):=t сбрасывает текущую позицию в 0. Думаю - это нелогичное поведение. |
| Уже поправил для нового релиза. Кстати, это справедливо и для MultiSelect ListBox контрола. SADSTAR2 пишет: цитата: | 2. запись нового значения в нулевую позицию wMain.List_1.Item(0):=t добавляет новую строку т.е. выполняет wMain.List_1.AddItem(t) Это баг или фича? |
| Видимо, все же фича, которую предоставляет WinAPI.
|
|
|
|
| модератор
|
Пост N: 628
Зарегистрирован: 25.05.05
|
|
Отправлено: 30.10.07 17:26. Заголовок: SADSTAR2 пишет: Сла..
SADSTAR2 пишет: цитата: | Слайдер ведь получает фокус ввода |
| Да, все верно Но при этом обработчику не посылается сообщение ??_SETFOCUS Кстати, по ходу добавил обработку события ON SCROLL, срабатывающее в процессе перетаскивания ползунка SADSTAR2 пишет: цитата: | кнопкой <Tab> без мыши попадаешь на слайдер, видишь рамку которая показывает текущий фокус ввода, управляешь слайдером клавишами и покидаешь по <Tab>. |
| Вот именно! Но какие при этом генерируются сообщения обработчику? Поэтому я и просил помощи у сведущих товарищей Петр?!
|
|
|
|
| постоянный участник
|
Пост N: 299
Зарегистрирован: 09.10.06
|
|
Отправлено: 30.10.07 17:36. Заголовок: LB_INSERTSTRING This..
LB_INSERTSTRING This message is sent by an application to insert a string into a list box. Unlike the LB_ADDSTRING message, the LB_INSERTSTRING message does not cause a list with the LBS_SORT style to be sorted. LB_INSERTSTRING wParam = (WPARAM) index; lParam = (LPARAM)(LPCTSTR) lpsz; Parameters index Zero-based index of the position at which to insert the string. If this parameter is –1, the string is added to the end of the list. А вот реализация из MiniGUI HB_FUNC( LISTBOXINSERTSTRING ) { char *cString = hb_parc( 2 ); SendMessage( (HWND) hb_parnl(1), LB_INSERTSTRING, (WPARAM) hb_parni(3) - 1, (LPARAM) cString ); } Все логично 0-1 = -1
|
|
|
|
| постоянный участник
|
Пост N: 300
Зарегистрирован: 09.10.06
|
|
Отправлено: 30.10.07 17:47. Заголовок: Действительно, некот..
Действительно, некоторые элементы управления Windows (controls) имеют свою специфику - SLIDER один из них. Чтобы заставить SLIDER адекватно реагировать на происходящее ( ) - нужно делать сабклассинг. Только есть ли в этом такая большая необходимость?
|
|
|
|
| модератор
|
Пост N: 629
Зарегистрирован: 25.05.05
|
|
Отправлено: 30.10.07 19:01. Заголовок: Петр пишет: нужно д..
Петр пишет: Элемент управления Spinner имеет пример такого обработчика для вывода контекстного меню и режима расширенной навигации по клавише Enter Петр пишет: цитата: | Только есть ли в этом такая большая необходимость? |
| Я тоже не вижу, но для полноты и единообразия реализации событий у всех контроллов это может потребоваться
|
|
|
|
|
| постоянный участник
|
Пост N: 301
Зарегистрирован: 09.10.06
|
|
Отправлено: 30.10.07 20:29. Заголовок: Окей, до сл.выпуска ..
Окей, до сл.выпуска сделаем .
|
|
|
|
| модератор
|
Пост N: 630
Зарегистрирован: 25.05.05
|
|
Отправлено: 30.10.07 20:39. Заголовок: Петр пишет: до сл.в..
Петр пишет: Спасибо! Я планирую выпустить следующий релиз не раннее 26 ноября
|
|
|
|