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




Пост N: 699
Зарегистрирован: 25.05.05
ссылка на сообщение  Отправлено: 29.01.08 13:59. Заголовок: Новая версия Расширенного релиза библиотеки MiniGUI (часть III) (продолжение)


Начало темы находится здесь, а теперь

АНОНС * АНОНС * АНОНС * АНОНС * АНОНС

Готовится к опубликованию новая сборка №48, которая выйдет в конце недели.
Если у Вас есть интересные наработки для включения в новый релиз, то сейчас самое удобное время для их отправки мне

Кратко, что нового:

- исправление обнаруженных ошибок и неточностей кода;
- новый класс HEADERIMAGE для Grid и Browse;
- свойство Address в Hyperlink может теперь открывать папку или файл на диске;
- добавлен NOTABSTOP класс для Browse;
- поддержка пользовательских компонентов (заимствована из оффициального релиза);
- расширения и исправления в библиотеках TsBrowse и PropGrid;
- обновлены сборки Харбор и HMGS-IDE;
- новые и обновленные старые примеры (как обычно ).




Спасибо: 0 
Профиль
Ответов - 166 , стр: 1 2 3 4 5 6 7 8 9 All [только новые]


Петр
постоянный участник


Пост N: 644
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 16.04.09 17:02. Заголовок: gfilatov пишет: 1) ..


gfilatov пишет:

 цитата:
1) Да, hdc контрола всегда известен, он сохраняется в массиве _HMG_aControlHandles на prg-уровне.



В _HMG_aControlHandles содержит что угодно но не hdc, в лучшем случае это может быть hWnd.
Уточнить поможет _HMG_aControlType
hdc = iif ( _HMG_aControlType$"LABEL", getdc(_HMG_aControlHandles), NIL )





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




Пост N: 985
Зарегистрирован: 25.05.05
ссылка на сообщение  Отправлено: 16.04.09 17:27. Заголовок: Петр пишет: Уточнит..


Петр пишет:

 цитата:
Уточнить поможет _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



Спасибо: 0 
Профиль
Sergey Spirin
постоянный участник


Пост N: 249
Зарегистрирован: 25.12.07
ссылка на сообщение  Отправлено: 16.04.09 18:10. Заголовок: gfilatov пишет: Pro..


gfilatov пишет:

 цитата:
Procedure InstallEventHandler, которая вызывается в message loop процедуре Events().



Ok. Спасибо. Здесь ясно. А само определение контрола будет аналогично примеру с ActiveX? То есть, вплоть до вызова CreateWindowEx() (в HB_FUNC( INITACTIVEX ))?


Ну, и с чего начали Если исходить из предположения, что некий метод DrawPage() аккуратно и красиво рисует на переданном hdc отчеты, то этого будет достаточно для полноценного функционирования обсуждаемого гипотетического контрола? То есть, такой контрол можно будет расположить "как хочется", расположить их несколько на одном окне и т.п. ?



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




Пост N: 986
Зарегистрирован: 25.05.05
ссылка на сообщение  Отправлено: 16.04.09 18:28. Заголовок: Sergey Spirin пишет:..


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



Спасибо: 0 
Профиль
Sergey Spirin
постоянный участник


Пост N: 250
Зарегистрирован: 25.12.07
ссылка на сообщение  Отправлено: 16.04.09 19:13. Заголовок: Спасибо большое. С..


Спасибо большое.

Собственно, я не сомневался, что на "pure C / WinApi level" это все осуществимо безпрепятственно. Меня волновал вопрос "надстроек", но, похоже, это не про MiniGui

Ok. Значит вердикт такой - при наличии упомянутых методов в FRH, пользовательский предпросмотр в MiniGui вполне может быть реализован пользователем... В Xailer2, похоже, тоже...

Еще раз, спасибо.

Спасибо: 0 
Профиль
SADSTAR2



Пост N: 102
Зарегистрирован: 05.06.07
ссылка на сообщение  Отправлено: 17.04.09 11:08. Заголовок: Что то я не увидел в..


Что то я не увидел в SQLite реализацию _create_function и _create_collation.

Смотрел в Си-исходнике и в двух папках примеров.

Или я плохо смотрел?

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


Пост N: 645
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 17.04.09 12:25. Заголовок: SADSTAR2 пишет: Или..


SADSTAR2 пишет:

 цитата:
Или я плохо смотрел?



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

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


Пост N: 646
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 17.04.09 12:35. Заголовок: Еще заметка по повод..


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

P.S. Вы бы мне (надеюсь и себе, и другим) очень помогли, если бы написали несколько маленьких тестовых пример, с пояснением какой результат для вас является приемлемым.

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


Пост N: 647
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 17.04.09 12:37. Заголовок: Петр пишет: в т.ч. ..


Петр пишет:

 цитата:
в т.ч. из-за ограниченной Harbour поддержки Unicode.


И фактически отсуствия оной в MiniGUI.

Спасибо: 0 
Профиль
SADSTAR2



Пост N: 104
Зарегистрирован: 05.06.07
ссылка на сообщение  Отправлено: 21.04.09 01:47. Заголовок: Петр пишет: P.S. Вы..


Петр пишет:

 цитата:
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 может быть прост и эффективен. На сайтах по Питону я видел подобные сообщения но не понял в чем суть.



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




Пост N: 988
Зарегистрирован: 25.05.05
ссылка на сообщение  Отправлено: 24.04.09 18:07. Заголовок: Harbour 1.1.0dev (Rev. 10926) для BCC 5.5.1 (SVN 2009-04-23 22:11)


Обновил сборку компилятора Харбор 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)
---------------------------


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




Пост N: 989
Зарегистрирован: 25.05.05
ссылка на сообщение  Отправлено: 27.04.09 14:16. Заголовок: Harbour MiniGUI IDE version 0.8.4 - 2009.04.25


Обновил с учетом последних изменений полную сборку IDE
на сайте http://minigui.mylivepage.ru по адресу:

http://minigui.mylivepage.ru/file/?fileid=7076

Что нового в IDE:
- исправление ошибок (как обычно );
- добавлена возможность компиляции проектов с помощью MinGW (я не проверял).



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




Пост N: 990
Зарегистрирован: 25.05.05
ссылка на сообщение  Отправлено: 29.04.09 10:50. Заголовок: Опубликован 66-й релиз Расширенной версии библиотеки MiniGUI


Новый релиз библиотеки выложил по адресу:

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-файлов прямо из Харбор-программы;
- обновлены некоторые старые примеры (как обычно ).


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




Пост N: 992
Зарегистрирован: 25.05.05
ссылка на сообщение  Отправлено: 13.05.09 12:03. Заголовок: АНОНС * АНОНС * АНОН..


АНОНС * АНОНС * АНОНС * АНОНС * АНОНС

Готовится к опубликованию новая сборка №67, которая выйдет завтра.

Кратко, что нового:

- исправление обнаруженных ошибок и неточностей кода;
- новая команда SET CENTERWINDOW RELATIVE PARENT | DESKTOP;
- программное изменение свойства Value и связанное с этим событие будет теперь происходить только при отличие нового и текущего значения Value;
- изменения в элементе управления celled GRID - клавиши Up и Down теперь будут прерывать редактирование с сохранением его результата, а клавиша Enter будет двигать курсор-указатель на поле вправо;
- обновлена сборка компилятора Харбор;
- новые и обновленные некоторые старые примеры (как обычно ).

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




Пост N: 993
Зарегистрирован: 25.05.05
ссылка на сообщение  Отправлено: 14.05.09 13:29. Заголовок: Опубликован 67-й релиз Расширенной версии библиотеки MiniGUI


Новый релиз библиотеки выложил по адресу:

http://minigui.mylivepage.ru/file/?fileid=7207

а также, как обычно, на сервере http://hmgextended.com по адресу:

http://hmgextended.com/files/CONTRIB/hmg-1.6-67-setup.zip

Желаю удачной выкачки!


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




Пост N: 994
Зарегистрирован: 25.05.05
ссылка на сообщение  Отправлено: 19.05.09 14:16. Заголовок: Harbour MiniGUI IDE version 0.8.4.1 - 2009.05.19


Обновил с учетом последних изменений полную сборку IDE
на сайте http://minigui.mylivepage.ru по адресу:

http://minigui.mylivepage.ru/file/?fileid=7237

Что нового в IDE:
- исправление обнаруженных ошибок (как обычно )

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




Пост N: 995
Зарегистрирован: 25.05.05
ссылка на сообщение  Отправлено: 21.05.09 13:30. Заголовок: Harbour 1.1.0dev (Rev. 11097) for BCC 5.5.1 (SVN 2009-05-21 11:19)


Обновил сборку компилятора Харбор 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)
---------------------------

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




Пост N: 996
Зарегистрирован: 25.05.05
ссылка на сообщение  Отправлено: 25.05.09 12:16. Заголовок: Harbour MiniGUI IDE version 0.8.5 - 2009.05.25


Обновил с учетом последних изменений полную сборку IDE
на сайте http://minigui.mylivepage.ru по адресу:

http://minigui.mylivepage.ru/file/?fileid=7287

Что нового в IDE:
- исправление обнаруженных ошибок (как обычно )
- добавлены свойства DRAGITEMS для LISTBOX и DISABLEEDIT для BTNTEXTBOX
- теперь показывает цвет шрифта в элементе управления TEXTBOX



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




Пост N: 997
Зарегистрирован: 25.05.05
ссылка на сообщение  Отправлено: 28.05.09 14:31. Заголовок: Опубликован 68-й релиз Расширенной версии библиотеки MiniGUI


Новый релиз библиотеки выложил по адресу:

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.

Желаю всем удачной выкачки!

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




Пост N: 999
Зарегистрирован: 25.05.05
ссылка на сообщение  Отправлено: 01.06.09 15:32. Заголовок: Harbour MiniGUI IDE version 0.8.7 - 2009.05.31


Обновил с учетом последних изменений полную сборку IDE
на сайте http://minigui.mylivepage.ru по адресу:

http://minigui.mylivepage.ru/file/?fileid=7380

Что нового в IDE:
- исправление обнаруженных ошибок (как обычно );
- добавлено окно с информацией о ходе компиляции программы (можно отключить в настройках);
- теперь можно построить EXE в папке, отличной от папки проекта (задается в настройках).



Спасибо: 0 
Профиль
Ответов - 166 , стр: 1 2 3 4 5 6 7 8 9 All [только новые]
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 684
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет