Форум » GUI » Новая версия Расширенного релиза библиотеки MiniGUI (часть III) (продолжение) » Ответить

Новая версия Расширенного релиза библиотеки MiniGUI (часть III) (продолжение)

gfilatov: Начало темы находится здесь, а теперь АНОНС * АНОНС * АНОНС * АНОНС * АНОНС Готовится к опубликованию новая сборка №48, которая выйдет в конце недели. Если у Вас есть интересные наработки для включения в новый релиз, то сейчас самое удобное время для их отправки мне Кратко, что нового: - исправление обнаруженных ошибок и неточностей кода; - новый класс HEADERIMAGE для Grid и Browse; - свойство Address в Hyperlink может теперь открывать папку или файл на диске; - добавлен NOTABSTOP класс для Browse; - поддержка пользовательских компонентов (заимствована из оффициального релиза); - расширения и исправления в библиотеках TsBrowse и PropGrid; - обновлены сборки Харбор и HMGS-IDE; - новые и обновленные старые примеры (как обычно ).

Ответов - 166, стр: 1 2 3 4 5 6 7 8 9 All

Петр: gfilatov пишет: 1) Да, hdc контрола всегда известен, он сохраняется в массиве _HMG_aControlHandles на prg-уровне. В _HMG_aControlHandles содержит что угодно но не hdc, в лучшем случае это может быть hWnd. Уточнить поможет _HMG_aControlType hdc = iif ( _HMG_aControlType$"LABEL", getdc(_HMG_aControlHandles), NIL )

gfilatov: Петр пишет: Уточнить поможет _HMG_aControlType hdc = iif ( _HMG_aControlType$"LABEL", getdc(_HMG_aControlHandles), NIL ) Согласен Sergey Spirin пишет: Хочется понять момент инициализации этого контрола Для установки обработчика событий для пользовательских компонент используется процедура Procedure InstallEventHandler, которая вызывается в message loop процедуре Events(). Внутри своего обработчика Вы можете отследить момент инициализации (событие WM_INITDIALOG и т.п.) и момент отрисовки (событие WM_PAINT) Пример обработчика для обычной кнопки: #define WM_COMMAND 0x0111 #define BN_CLICKED 0 *------------------------------------------------------------------------------* Function MyButtonEventHandler ( hWnd, nMsg, wParam, lParam ) *------------------------------------------------------------------------------* Local i Local RetVal := Nil hWnd := Nil // Unused variable if nMsg == WM_COMMAND i := Ascan ( _HMG_aControlHandles , lParam ) If i > 0 IF HiWord (wParam) == BN_CLICKED RetVal := 0 _DoControlEventProcedure ( _HMG_aControlProcedures , i ) Endif Endif endif Return RetVal

Sergey Spirin: gfilatov пишет: Procedure InstallEventHandler, которая вызывается в message loop процедуре Events(). Ok. Спасибо. Здесь ясно. А само определение контрола будет аналогично примеру с ActiveX? То есть, вплоть до вызова CreateWindowEx() (в HB_FUNC( INITACTIVEX ))? Ну, и с чего начали Если исходить из предположения, что некий метод DrawPage() аккуратно и красиво рисует на переданном hdc отчеты, то этого будет достаточно для полноценного функционирования обсуждаемого гипотетического контрола? То есть, такой контрол можно будет расположить "как хочется", расположить их несколько на одном окне и т.п. ?


gfilatov: Sergey Spirin пишет: Ну, и с чего начали Снова смотрим пример определения простой кнопки: *------------------------------------------------------------------------------* Procedure _DefineMyButton ( cName , nRow , nCol , cCaption , bAction , cParent ) *------------------------------------------------------------------------------* Local hControlHandle, nId, hParentFormHandle, k, cMacroVar If .Not. _IsWindowDefined (cParent) MsgMiniGuiError("Window: "+ cParent + " is not defined.") Endif If _IsControlDefined (cName,cParent) MsgMiniGuiError ("Control: " + cName + " Of " + cParent + " Already defined.") Endif cMacroVar := '_' + cParent + '_' + cName k := _GetControlFree() nId := _GetId() hParentFormHandle := GetFormHandle (cParent) hControlHandle := InitMyButton ( ; hParentFormHandle , ; nRow , ; nCol , ; cCaption , ; nId ; ) Public &cMacroVar. := k _HMG_aControlType [k] := 'MYBUTTON' _HMG_aControlNames [k] := cName _HMG_aControlHandles [k] := hControlHandle _HMG_aControlParenthandles [k] := hParentFormHandle _HMG_aControlIds [k] := 0 _HMG_aControlProcedures [k] := bAction _HMG_aControlPageMap [k] := {} _HMG_aControlValue [k] := Nil _HMG_aControlInputMask [k] := "" _HMG_aControllostFocusProcedure [k] := "" _HMG_aControlGotFocusProcedure [k] := "" _HMG_aControlChangeProcedure [k] := "" _HMG_aControlDeleted [k] := .F. _HMG_aControlBkColor [k] := Nil _HMG_aControlFontColor [k] := Nil _HMG_aControlDblClick [k] := "" _HMG_aControlHeadClick [k] := {} _HMG_aControlRow [k] := 0 _HMG_aControlCol [k] := 0 _HMG_aControlWidth [k] := 0 _HMG_aControlHeight [k] := 0 _HMG_aControlSpacing [k] := 0 _HMG_aControlContainerRow [k] := -1 _HMG_aControlContainerCol [k] := -1 _HMG_aControlPicture [k] := "" _HMG_aControlContainerHandle [k] := 0 _HMG_aControlFontName [k] := Nil _HMG_aControlFontSize [k] := Nil _HMG_aControlFontAttributes [k] := {} _HMG_aControlToolTip [k] := '' _HMG_aControlRangeMin [k] := 0 _HMG_aControlRangeMax [k] := 0 _HMG_aControlCaption [k] := '' _HMG_aControlVisible [k] := .t. _HMG_aControlHelpId [k] := 0 _HMG_aControlFontHandle [k] := Nil _HMG_aControlBrushHandle [k] := 0 _HMG_aControlEnabled [k] := .T. _HMG_aControlMiscData1 [k] := 0 Return Если Ваша Си-функция InitMyButton будет принимать координаты и размер создаваемой кнопки (контрола) и соответственно размещать этот контрол, то нет проблем расположить "как хочется"... Да, кстати, для кнопки эта функция выглядит так: *------------------------------------------------------------------------------* * Low Level C Routines *------------------------------------------------------------------------------* #pragma BEGINDUMP #include <windows.h> #include "hbapi.h" #include "hbapiitm.h" HB_FUNC( INITMYBUTTON ) { HWND hwnd = (HWND) hb_parnl (1) ; HWND hbutton; hbutton = CreateWindow( "button" , hb_parc(4) , BS_NOTIFY | WS_CHILD | BS_PUSHBUTTON | WS_VISIBLE, hb_parni(3) , hb_parni(2) , 120 , 28 , hwnd , (HMENU)hb_parni(5) , GetModuleHandle(NULL) , NULL ) ; hb_retnl ( (LONG) hbutton ); } #pragma ENDDUMP

Sergey Spirin: Спасибо большое. Собственно, я не сомневался, что на "pure C / WinApi level" это все осуществимо безпрепятственно. Меня волновал вопрос "надстроек", но, похоже, это не про MiniGui Ok. Значит вердикт такой - при наличии упомянутых методов в FRH, пользовательский предпросмотр в MiniGui вполне может быть реализован пользователем... В Xailer2, похоже, тоже... Еще раз, спасибо.

SADSTAR2: Что то я не увидел в SQLite реализацию _create_function и _create_collation. Смотрел в Си-исходнике и в двух папках примеров. Или я плохо смотрел?

Петр: SADSTAR2 пишет: Или я плохо смотрел? Смотрели вы нормально ;) Их там действительно нет. Я опубликую их здесь на форуме. Я не хочу выкладывать сырые версии, а в условиях отсуствия свободного времени тестирование проходит вяло. Также я рассматриваю возможность работы связки sqlite + ICU. Но это дополнительно к вашей программе несколько dll, общим весом более 10 Mb, а также необходимость использования разных ухищрения для работы с bcc по крайней мере версиии 5.5. Рассматриваются и другие варианты.

Петр: Еще заметка по поводу _create_collation. В идеале и по доброму все это должно соотноситься с codepage - Harbour National Collation Support Module. А это есть очень проблематично, в т.ч. из-за ограниченной Harbour поддержки Unicode. Так что в ближайшем будущем здесь возможны только локальные решения. P.S. Вы бы мне (надеюсь и себе, и другим) очень помогли, если бы написали несколько маленьких тестовых пример, с пояснением какой результат для вас является приемлемым.

Петр: Петр пишет: в т.ч. из-за ограниченной Harbour поддержки Unicode. И фактически отсуствия оной в MiniGUI.

SADSTAR2: Петр пишет: P.S. Вы бы мне (надеюсь и себе, и другим) очень помогли, если бы написали несколько маленьких тестовых пример, с пояснением какой результат для вас является приемлемым. Я бы написал. Но обычно примеры иллюстрируют некую технологию работы. А здесь еще и технологии нет. Только тех.требования. Да? Требования. Общие - безрегистровый (NoCase) поиск в русских полях данных (... LIKE %...% COLLITE ....). Безрегистровая сортировка по русским полям (ordered by ...) варианты реализации 1. Хранить данные в UTF8 - рекомендовано SQLIte. При записи использовать HB_StrToUTF8(), при чтении - HB_UTF8ToStr(). Это удобно тем, что сторонние менеджеры баз SQLite3 правильно показывают такие русские данные. Создать функцию-колайшн "UTF8RusNoCase". Использовать так "SELECT .... WHERE DataColumn LIKE '%"+HB_strToUTF8(FindData)+"%' COLLITE UTF8RusNoCase ordered by ..." 2. Наплевать на рекомендацию. Записывать-считывать без UTF8-преобразования. Это работает - зуб даю. SQLite считает это кодировкой ISO 5339(?) - пишу по памяти. Сторонние менеджеры показывают лажу. Создать пользовательскую функцию UpperRus() которая преобразовывает в соответствии с CP1251. Использовать так "SELECT .... WHERE UpperRus(DataColumn) LIKE '%"+Upper(FindData)+"%' COLLITE BINARY ordered by ..." BINARY - один из трех встроенных колайтов. Используется по-умолчанию. "BINARY - Compares string data using memcmp(), regardless of text encoding." В данном случае его можно применять т.к. русские буквы в CP1251 стоят в нужном порядке - по-алфавиту. Другой случай - "SELECT .... ordered by UpperRus(ResultColumnN)" - сработает? Тогда попробуем по-другому "SELECT ..., UpperRus(ResultColumnN) as OrdCol ...... ordered by OrdCol" Правда в этом варианте есть некоторые мутные пока для меня места. Я думаю - лучше первый вариант. У него больше перспектив и меньше подводных камней. Одно из оснований для моих размышлений. Правильно ли я это понимаю. The default configuration of SQLite only supports case-insensitive comparisons of ASCII characters. The reason for this is that doing full unicode case-insensitive comparisons and case conversions requires tables and logic that would nearly double the size of the SQLite library. The SQLite developers reason that any application that needs full unicode case support probably already has the necessary tables and functions and so SQLite should not take up space to duplicate this ability. В конфигурации по-умолчанию SQLite поддерживает только регистро-чувствительное сравнение ASCI-символов. Причина в том что реализация полного юникодового регистронечувствительного сравнения и регистрового преобразования требует таблиц и алгоритмов которые почти вдвое увеличат размер SQLite-библиотеки. SQLite-разработчики считают что любое приложение, которое нуждается в полной юникодовой регистровой поддержке, вероятно уже имеет необходимые таблицы и функции и поэтому SQLite не должен увеличивать свой размер для дублирования этой возможности. Instead of providing full unicode case support by default, SQLite provides the ability to link against external unicode comparison and conversion routines. The application can overload the built-in NOCASE collating sequence (using sqlite3_create_collation()) and the built-in like(), upper(), and lower() functions (using sqlite3_create_function()). The SQLite source code includes an "ICU" extension that does these overloads. Or, developers can write their own overloads based on their own unicode-aware comparison routines already contained within their project. Вместо того, чтобы обеспечивать полную юникодовую регистровую поддержку по-умолчанию, SQLite предоставляет возможность линковать (связывать, присоединять) внешние процедуры юникодового сравнения и преобразования. Приложение может заменить встроенную последовательность сравнения NOCASE (используя sqlite3_create_collation()) и встроенные функции like(), upper() и lower() (используя sqlite3_create_function()). Исходный код SQLite включает "ICU" расширение которое выполняет эту замену. Или разработчик может написать свою собственную замену основанную на своих собственных процедурах юникод-сравнения содержащихся в его проекте. SQLITE_ENABLE_ICU This option causes the International Components for Unicode or "ICU" extension to SQLite to be added to the build. Похоже - для этого нужно перекомпилировать DLL-ку из исходников. Обычно я не трогаю стандартные функции (только если нет других вариантов). Может быть проблема при обновлении версий. Хотя маэстрам может быть виднее - мой взгляд довольно поверхностен. Вариант с ICU может быть прост и эффективен. На сайтах по Питону я видел подобные сообщения но не понял в чем суть.

gfilatov: Обновил сборку компилятора Харбор 1.1.0 для BCC 5.5.1 (Harbour MiniGUI Extended Distribution) по адресу: http://minigui.mylivepage.ru/file/?fileid=7070 Harbour Build Info --------------------------- Version: Harbour 1.1.0dev (Rev. 10926) Compiler: Borland C++ 5.5.1 (32-bit) PCode version: 0.2 ChangeLog last entry: 2009-04-23 22:11 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl) ChangeLog ID: ChangeLog 10926 2009-04-23 20:03:33Z druzus Built on: Apr 24 2009 11:56:59 Extra C compiler options: -DHB_FM_STATISTICS_OFF -DHB_GUI -DHB_FM_STD_ALLOC Build options: Language options: (Clipper 5.3) (Clipper 5.x undoc) (Xbase++) (Flagship) (dirty extensions) ---------------------------

gfilatov: Обновил с учетом последних изменений полную сборку IDE на сайте http://minigui.mylivepage.ru по адресу: http://minigui.mylivepage.ru/file/?fileid=7076 Что нового в IDE: - исправление ошибок (как обычно ); - добавлена возможность компиляции проектов с помощью MinGW (я не проверял).

gfilatov: Новый релиз библиотеки выложил по адресу: http://minigui.mylivepage.ru/file/?fileid=7088 а также, как обычно, на сервере http://hmgextended.com по адресу: http://hmgextended.com/files/CONTRIB/hmg-1.6-66-setup.zip Кратко, что нового: - исправление обнаруженных ошибок и неточностей кода; - новое свойство DisableEdit для элемента управления BtnTextBox; - добавлена возможность управлять свойством Blink для элемента управления Label во время выполнения программы; - обновлена библиотека PropGrid; - обновлены сборки компилятора Харбор и HMGS-IDE; - новый пример HaruPDF для демонстрации создания пользовательских PDF-файлов прямо из Харбор-программы; - обновлены некоторые старые примеры (как обычно ).

gfilatov: АНОНС * АНОНС * АНОНС * АНОНС * АНОНС Готовится к опубликованию новая сборка №67, которая выйдет завтра. Кратко, что нового: - исправление обнаруженных ошибок и неточностей кода; - новая команда SET CENTERWINDOW RELATIVE PARENT | DESKTOP; - программное изменение свойства Value и связанное с этим событие будет теперь происходить только при отличие нового и текущего значения Value; - изменения в элементе управления celled GRID - клавиши Up и Down теперь будут прерывать редактирование с сохранением его результата, а клавиша Enter будет двигать курсор-указатель на поле вправо; - обновлена сборка компилятора Харбор; - новые и обновленные некоторые старые примеры (как обычно ).

gfilatov: Новый релиз библиотеки выложил по адресу: http://minigui.mylivepage.ru/file/?fileid=7207 а также, как обычно, на сервере http://hmgextended.com по адресу: http://hmgextended.com/files/CONTRIB/hmg-1.6-67-setup.zip Желаю удачной выкачки!

gfilatov: Обновил с учетом последних изменений полную сборку IDE на сайте http://minigui.mylivepage.ru по адресу: http://minigui.mylivepage.ru/file/?fileid=7237 Что нового в IDE: - исправление обнаруженных ошибок (как обычно )

gfilatov: Обновил сборку компилятора Харбор 1.1.0 для BCC 5.5.1 (Harbour MiniGUI Extended Distribution) по адресу: http://minigui.mylivepage.ru/file/?fileid=7263 Harbour Build Info --------------------------- Version: Harbour 1.1.0dev (Rev. 11097) Compiler: Borland C++ 5.5.1 (32-bit) Platform: Windows 98 4.10.2222 A PCode version: 0.2 ChangeLog last entry: 2009-05-21 11:19 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl) ChangeLog ID: ChangeLog 11097 2009-05-21 09:10:41Z druzus Built on: May 21 2009 13:04:30 Extra C compiler options: -DHB_FM_STATISTICS_OFF -DHB_GUI -DHB_FM_STD_ALLOC Build options: Language options: (Clipper 5.3) (Clipper 5.x undoc) (Xbase++) (Flagship) ---------------------------

gfilatov: Обновил с учетом последних изменений полную сборку IDE на сайте http://minigui.mylivepage.ru по адресу: http://minigui.mylivepage.ru/file/?fileid=7287 Что нового в IDE: - исправление обнаруженных ошибок (как обычно ) - добавлены свойства DRAGITEMS для LISTBOX и DISABLEEDIT для BTNTEXTBOX - теперь показывает цвет шрифта в элементе управления TEXTBOX

gfilatov: Новый релиз библиотеки выложил по адресу: http://minigui.mylivepage.ru/file/?fileid=7321 а также, как обычно, на сервере http://hmgextended.com по адресу: http://hmgextended.com/files/CONTRIB/hmg-1.6-68-setup.zip Также обновил (с учетом последних изменений от автора) полную сборку IDE 0.8.6 по адресу: http://minigui.mylivepage.ru/file/?fileid=7320 Подробные изменения см. в соответствующих файлах changelog.txt. Желаю всем удачной выкачки!

gfilatov: Обновил с учетом последних изменений полную сборку IDE на сайте http://minigui.mylivepage.ru по адресу: http://minigui.mylivepage.ru/file/?fileid=7380 Что нового в IDE: - исправление обнаруженных ошибок (как обычно ); - добавлено окно с информацией о ходе компиляции программы (можно отключить в настройках); - теперь можно построить EXE в папке, отличной от папки проекта (задается в настройках).



полная версия страницы