On-line: PSP, гостей 1. Всего: 2 [подробнее..]
АвторСообщение



Пост 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.



Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 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>







Спасибо: 0 
ПрофильЦитата Ответить
модератор




Пост 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.



Спасибо: 0 
ПрофильЦитата Ответить
модератор




Пост 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

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост 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

принесет нам желаемый результат.

Но будьте осторожны с псевдо ООП..



Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост 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






Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 34
Зарегистрирован: 05.06.07
ссылка на сообщение  Отправлено: 30.10.07 01:48. Заголовок: Re:


gfilatov пишет:

 цитата:
SADSTAR2 пишет:
цитата:
В SLIDER нет реакции на системное событие GotFocus и LostFocus (толко OnChange).


Снова Вы абсолютно правы, но это уже особенности реализации этого контрола в WinAPI, который не имеет подобных событий
Предлагайте, какие из существующий системных сообщений у этого конторола мы может использовать для обработки GotFocus и LostFocus



Я наверное имею неправильные представления о работе системы, но Слайдер ведь получает фокус ввода так же как и кнопка или текстбокс. Т.е. кнопкой <Tab> без мыши попадаешь на слайдер, видишь рамку которая показывает текущий фокус ввода, управляешь слайдером клавишами и покидаешь по <Tab>.
Значит должно быть и событие такое.


Спасибо: 0 
ПрофильЦитата Ответить
модератор




Пост 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.



Спасибо: 0 
ПрофильЦитата Ответить
модератор




Пост N: 628
Зарегистрирован: 25.05.05
ссылка на сообщение  Отправлено: 30.10.07 17:26. Заголовок: SADSTAR2 пишет: Сла..


SADSTAR2 пишет:

 цитата:
Слайдер ведь получает фокус ввода


Да, все верно
Но при этом обработчику не посылается сообщение ??_SETFOCUS
Кстати, по ходу добавил обработку события ON SCROLL, срабатывающее в процессе перетаскивания ползунка

SADSTAR2 пишет:

 цитата:
кнопкой <Tab> без мыши попадаешь на слайдер, видишь рамку которая показывает текущий фокус ввода, управляешь слайдером клавишами и покидаешь по <Tab>.



Вот именно! Но какие при этом генерируются сообщения обработчику?
Поэтому я и просил помощи у сведущих товарищей
Петр?!


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост 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



Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 300
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 30.10.07 17:47. Заголовок: Действительно, некот..


Действительно, некоторые элементы управления Windows (controls) имеют свою специфику - SLIDER один из них. Чтобы заставить SLIDER адекватно реагировать на происходящее ( ) - нужно делать сабклассинг. Только есть ли в этом такая большая необходимость?


Спасибо: 0 
ПрофильЦитата Ответить
модератор




Пост N: 629
Зарегистрирован: 25.05.05
ссылка на сообщение  Отправлено: 30.10.07 19:01. Заголовок: Петр пишет: нужно д..


Петр пишет:

 цитата:
нужно делать сабклассинг


Элемент управления Spinner имеет пример такого обработчика для вывода контекстного меню и режима расширенной навигации по клавише Enter

Петр пишет:

 цитата:
Только есть ли в этом такая большая необходимость?


Я тоже не вижу, но для полноты и единообразия реализации событий у всех контроллов это может потребоваться

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 301
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 30.10.07 20:29. Заголовок: Окей, до сл.выпуска ..


Окей, до сл.выпуска сделаем .

Спасибо: 0 
ПрофильЦитата Ответить
модератор




Пост N: 630
Зарегистрирован: 25.05.05
ссылка на сообщение  Отправлено: 30.10.07 20:39. Заголовок: Петр пишет: до сл.в..


Петр пишет:

 цитата:
до сл.выпуска сделаем


Спасибо!
Я планирую выпустить следующий релиз не раннее 26 ноября

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 34
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет