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

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

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

Ответов - 301, стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 All

gfilatov2002: sashaBG пишет: Как предотвратиь срабатывание ONLOST или VALID Sasha, Я думаю, что это теперь не получится, поскольку BTNTEXTBOX (или GETBOX) и кнопка стали разными элементами управления, начиная с версии 2.0.6 - и поэтому события ONLOSTFOCUS и VALID срабатывают автоматически при потере фокуса у поля ввода

sashaBG: Спасибо за ответ Григорий ! Тогда пока останусь на 2.0.5 Может еще попробую откомплировать 2.0.8 с BTNTEXTBOX и GETBOX от 2.0.5 , посмотрим что получится. Я пока не пользуюсь последними нововведениями BTNTEXBOX и GETBOX

sashaBG: Не получилось !


Dr. Oldwarez: Сейчас тестирую на пресловутый глюк с последней строкой. В большинстве случаев удалось исправить эту вредную ошибку. Но если записи отсортированы по убывающей, TBROWSE вообще ЗАВИСАЕТ при переходе на последнюю строку, а затем - возврате к первой. Причём выйти из программы невозможно без "комбинации из трёх пальцев" Ctrl+Alt+Del и менеджера задач.

alex_II: Переход на 2.0.8 прошел без проблем Спасибо за хорошую работу, Григорий!

gfilatov2002: Dr. Oldwarez пишет: TBROWSE вообще ЗАВИСАЕТ при переходе на последнюю строку По этой причине я убрал этот трюк из ядра библиотеки Tsbrowse. В одних случаях это работает, а в других - создает новые проблемы

Dr. Oldwarez: gfilatov2002 пишет: По этой причине я убрал этот трюк из ядра библиотеки Tsbrowse. В одних случаях это работает, а в других - создает новые проблемы Тогда понятно. Ждём следующих версий. На семёрку, надеюсь, пока переходить не будете?

SergKis: Для gfilatov2002. Пример: \MiniGUI\SAMPLES\BASIC\Mdi_2>demo.exe В browse по Up/Dn курсор двигается через строку (как будто dbSkip(2)). Три browse на окне ведут себя также. Наши исправления в h_browse.prg (v.m. 2.07): [pre2] *-----------------------------------------------------------------------------* Procedure _BrowseUp ( ControlName , ParentForm , z ) *-----------------------------------------------------------------------------* Local i , s , _Alias , _RecNo , _BrowseArea , _BrowseRecMap , _DeltaScroll // [4] i := Iif( pcount() == 2 , GetControlIndex ( ControlName , ParentForm ) , z ) // BAA 18-Мар-2012 09:55:49 _HMG_ActiveDlgProcHandle := _HMG_aControlParenthandles // Так как есть такой hwndDlg _DeltaScroll := ListView_GetSubItemRect ( _HMG_aControlhandles , 0 , 0 ) _BrowseRecMap := _HMG_aControlRangeMax s := LISTVIEW_GETFIRSTITEM ( _HMG_aControlHandles ) If s == 1 _Alias := Alias() _BrowseArea := _HMG_aControlSpacing If Select (_BrowseArea) == 0 Return EndIf Select &_BrowseArea _RecNo := RecNo() Go _BrowseRecMap [1] Skip -1 IF ! _BrowseRecMap [1] == RecNo() // BAA 18-Мар-2012 10:09:03 Что бы не дергалось _BrowseVscrollUpdate( i ) _BrowseUpdate( '', '', i ) ListView_Scroll( _HMG_aControlHandles , _DeltaScroll[2] * (-1) , 0 ) ENDIF Go _RecNo if Select( _Alias ) != 0 Select &_Alias Else Select 0 Endif ListView_SetCursel ( _HMG_aControlHandles , 1 ) Else if _HMG_ActiveDlgProcHandle == 0 ListView_SetCursel ( _HMG_aControlHandles , s - 1 ) endif _BrowseVscrollFastUpdate ( i , -1 ) EndIf _BrowseOnChange (i) // BAA 18-Мар-2012 09:55:41 _HMG_ActiveDlgProcHandle := 0 Return *-----------------------------------------------------------------------------* Procedure _BrowseDown ( ControlName , ParentForm , z ) *-----------------------------------------------------------------------------* Local i , PageLength , s , _Alias , _RecNo , _BrowseArea , _BrowseRecMap , _DeltaScroll // [4] i := Iif( pcount() == 2 , GetControlIndex ( ControlName , ParentForm ) , z ) // BAA 18-Мар-2012 09:56:02 _HMG_ActiveDlgProcHandle := _HMG_aControlParenthandles // Так как есть такой hwndDlg _DeltaScroll := ListView_GetSubItemRect ( _HMG_aControlhandles , 0 , 0 ) _BrowseRecMap := _HMG_aControlRangeMax s := LISTVIEW_GETFIRSTITEM ( _HMG_aControlHandles ) PageLength := LISTVIEWGETCOUNTPERPAGE ( _HMG_aControlhandles ) If s == PageLength if _HMG_aControlContainerHandle != 0 Return EndIf _Alias := Alias() _BrowseArea := _HMG_aControlSpacing If Select (_BrowseArea) == 0 Return EndIf Select &_BrowseArea _RecNo := RecNo() Go _BrowseRecMap [1] Skip _BrowseUpdate( '', '', i ) _BrowseVscrollUpdate( i ) ListView_Scroll( _HMG_aControlHandles , _DeltaScroll[2] * (-1) , 0 ) Go _RecNo if Select( _Alias ) != 0 Select &_Alias Else Select 0 Endif ListView_SetCursel ( _HMG_aControlHandles , Len(_HMG_aControlRangeMax ) ) Else if _HMG_ActiveDlgProcHandle == 0 ListView_SetCursel ( _HMG_aControlHandles , s+1 ) endif _BrowseVscrollFastUpdate ( i , 1 ) EndIf _BrowseOnChange (i) // BAA 18-Мар-2012 09:56:16 _HMG_ActiveDlgProcHandle := 0 Return [/pre2]

gfilatov2002: SergKis пишет: Наши исправления в h_browse.prg Большое спасибо за исправления! Уже поправил h_browse.prg для следующей сборки

SergKis: Для gfilatov2002. У контролов есть свойство Cargo, у окон нет. Может есть смысл добавить ?

gfilatov2002: SergKis пишет: Может есть смысл добавить ? Нет Для этого существуют следующие команды: SET WINDOWPROPERTY "PROP_DBF" VALUE cxFile ... GET WINDOWPROPERTY "PROP_DBF" VALUE cxFile которые позволяют присвоить (и позже запросить) любое пользовательское свойство активному окну

SergKis: gfilatov2002 пишет:Для этого существуют следующие команды: Спасибо за носомтык. Проглядел.

SergKis: gfilatov2002 пишет: Для этого существуют следующие команды: SET WINDOWPROPERTY "PROP_DBF" VALUE cxFile ... GET WINDOWPROPERTY "PROP_DBF" VALUE cxFile которые позволяют присвоить (и позже запросить) любое пользовательское свойство активному окну К сожалению это не так. Команда SET WINDOWPROPERTY "PROP_MYARRAY" VALUE {"Test1", "Test2"} не работает.

gfilatov2002: SergKis пишет: Команда SET WINDOWPROPERTY "PROP_MYARRAY" VALUE {"Test1", "Test2"} не работает. Вы не можете присвоить массив с помощью этой команды - только простые типы данных (символьный, логический) И еще уточнение - эти команды предназначены для дочерних MDI окон (рабочий пример находится в папке samples\Basic\mdi_2) Проверил также для обычного окна - работает (см. пример ниже). [pre2]/* * MINIGUI - Harbour Win32 GUI library Demo */ #include "minigui.ch" Function Main Local Item1 := GetUserName() Local Item2 := GetComputerName() DEFINE WINDOW Form1 ; AT 0,0 ; WIDTH 300 ; HEIGHT 300 ; TITLE "MiniGUI Demo" ; MAIN ; NOMAXIMIZE NOSIZE @ 5,10 FRAME Frame1 CAPTION "Frame" WIDTH 200 HEIGHT 150 @ 20,20 LABEL Label1 VALUE "User Name" AUTOSIZE @ 45,20 TEXTBOX TextBox1 VALUE "" Form1.Label1.Cargo := "TextBox1" // f.e., store the TextBox name in the label's cargo @ 80,20 LABEL Label2 VALUE "Computer Name" AUTOSIZE @105,20 TEXTBOX TextBox2 VALUE "" Form1.Label2.Cargo := "TextBox2" @ 180,20 BUTTON Button1 CAPTION "Get Names" ON CLICK _GetNames() @ 220,20 BUTTON Button2 CAPTION "Set Names" ON CLICK _SetNames() @ 180,150 BUTTON Button3 CAPTION "Disable Frame" ON CLICK DisableFrame() @ 220,150 BUTTON Button4 CAPTION "Enable Frame" ON CLICK EnableFrame() SET WINDOWPROPERTY "PROP_ITEM1" VALUE Item1 SET WINDOWPROPERTY "PROP_ITEM2" VALUE Item2 END WINDOW Form1.Frame1.Cargo := {"Label1","TextBox1","Label2","TextBox2"} // store the Label and TextBox names in the frame's cargo CENTER WINDOW Form1 ACTIVATE WINDOW Form1 Return Nil Static Function _GetNames() Local Item1 Local Item2 GET WINDOWPROPERTY "PROP_ITEM1" OF Form1 VALUE Item1 GET WINDOWPROPERTY "PROP_ITEM2" OF Form1 VALUE Item2 Form1.TextBox1.Value := Item1 //GetUserName() Form1.TextBox2.Value := Item2 //GetComputerName() Return Nil Static Function _SetNames() Local cBoxName1, cBoxName2 cBoxName1 := Form1.Label1.Cargo // to take the TextBox name from the label's cargo cBoxName2 := Form1.Label2.Cargo Form1.&(cBoxName1).Value := GetUserName() Form1.&(cBoxName2).Value := GetComputerName() Return Nil Static Function DisableFrame() Local aControls, i Form1.Frame1.Enabled := .f. aControls := Form1.Frame1.Cargo // array of child control's names in this frame For i:=1 To Len(aControls) SetProperty("Form1", aControls, "Enabled", .f.) Next Return Nil Static Function EnableFrame() Local aControls, i Form1.Frame1.Enabled := .t. aControls := Form1.Frame1.Cargo For i:=1 To Len(aControls) SetProperty("Form1", aControls, "Enabled", .t.) Next Return Nil [/pre2] P.S. Если требуется присвоить массив, то создайте у окна невидимую метку LABEL и присваивайте массив Form.Label.Cargo := aFormArray

SergKis: gfilatov2002 пишет:Вы не можете присвоить массив с помощью этой команды - только простые типы данных (символьный, логический) Это уже увидел в SetProp(...). И еще уточнение - эти команды предназначены для дочерних MDI окон О них и разговор. ... создайте у окна невидимую метку LABEL и присваивайте массив Это понятно, но как-то не правильно, окно ведь объект, как и контрол. Не проще ли добавить весь, существующий, механизм Cargo к окну. Рабочий пример samples\Basic\mdi_2 как раз смотрим и имеем: 1. VK_TAB реагирует (уходит с browse), но больше никогда не возвращается. 2. Установленное ON KEY ESCAPE на child окно реагирует нормально, но при включении EDIT INPLACE (внутри browse идет переназначение ESC на контрол ввода), то при возврате по Esc из EDIT INPLACE теряется ESCAPE на окне. Т.е. механизм HotKey на MDI не так, как на обычном окне.

gfilatov2002: АНОНС * АНОНС * АНОНС * АНОНС * АНОНС Завершена подготовка к опубликованию новой версии 2.0.9, которая выйдет послезавтра. Кратко, что нового: - исправление обнаруженных ошибок и неточностей кода: - в т.ч. исправлена обработка события OnChange при прокрутке средней кнопки мыши и движение указателя Browse внутри MdiChicd-окна (благодарю SergKis за предложенные исправления); - добавлен новый тип DYNAMIC в построчное редактирование элемента управления Grid (автор - Адам Любчук); - обновлена сборка Харбора версии 3.1.0dev, библиотеки HbSQLite3 до версии 3.7.11 и HbZipArc; - пересобрана HMGS-IDE с текущей версией библиотеки; - добавлены новые и обновлены старые примеры (как обычно). Спасибо за внимание!

Andrey: gfilatov2002 пишет: и HbZipArc Работает ли HbZipArc в "multi/single-thread Harbour", если да то где можно посмотреть пример на него ? Если нет, то какой архиватор в МиниГуи поддерживает мультипоточность ? Пытаюсь из двух программ на МиниГуи (мультипотоковую загрузку файла и распаковку ZIP-файлов на библиотеке ziparchive ) сделать одну !

gfilatov2002: Новый релиз библиотеки для компилятора BCC выложил, как и обещал, по адресу: http://minigui.mylivepage.ru/file/?fileid=8703 а также, как обычно, на сервере http://hmgextended.com по адресу: http://hmgextended.com/files/CONTRIB/hmg-2.0.9-setup.zip Также доступна эта сборка и для компилятора MinGW по адресу: http://hmgextended.com/files/CONTRIB/hmg209-mingw.zip Спасибо за внимание!

krutoff: Спасибо за очередную сборку. Григорий я нашел ошибку(в старой сборке) в модуле h_tbrowse.prg в функции ExpSeek( cExp, lSoft ) 4825: cType := ValType( Eval( &("{||" + ( ::cAlias ) + "->" + ( ::cAlias )->( IndexKey() ) + "}") ) ) надо: cType := ValType( Eval( &("{||" + ( ::cAlias ) + "->(" + ( ::cAlias )->( IndexKey() ) + ")}") ) ) Смысл в чем: если в индексном поле стоит выражение (напр. "UPPER(LEFT(FIELDNAME,10) )" ) то если не поставить доп.скобку - идет ошибка и срабатывает блок Recovery/

gfilatov2002: krutoff пишет: я нашел ошибку(в старой сборке) в модуле h_tbrowse.prg Благодарю за помощь! Обязательно поправлю эту строку для следующей сборки.



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