Форум » 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

Pasha: Возможно, проблема возникает исключительно с rddads Для dbSkip(0) вызывается AdsRefreshRecord, а для dbGoto(RecNo()) - не вызывается

Haz: Pasha пишет: Возможно, проблема возникает исключительно с rddads Pasha, не могу проверить дома с другими RDD работу в сети, но в скоро написанном примере наглядно отличие dbSkip() от dbGoto(RecNo()) Скомпилите пример и по очереди в вровсы забивайте разные значения оба бровса по одной базе с разными алиасами и PostEdit, RDD RDDCDX верхний вровс использует dbGoto(RecNo()) в PostEdit нижний вровс использует dbSkip(0) в PostEdit Отличие видно в том , что при вводе чего-либо в нижний бровс и редактировании песле этого верхнего бровса , значение в верхнем устанавливается сразу ( после получения фокуса ) правильным. В ADS Remote Server, кроме того еще и вылет по блокировке с dbGoto(RecNo()) , возможно на сетке и CDX упадет Func Main() #include "minigui.ch" #include "TSBrowse.ch" local i := 1 local j := '' local lOk := .T. local cKey := '' local cFile := 'TEST.DBF' REQUEST DBFCDX rddRegister( "DBFCDX", 1 ) rddsetdefault( "DBFCDX" ) // Создадим тестовую базку DbCreate( cFile, {{"FIELD01", "C", 20, 0} }) //Откроем в одной области и запишем пустую запись Use ( cFile ) SHARED NEW ALIAS 'BASE1' DBAPPEND() //Откроем ее же в другой области Use ( cFile ) SHARED NEW ALIAS 'BASE2' DEFINE WINDOW Form_0 ; AT 0,0 ; WIDTH 300 ; HEIGHT 150 ; TITLE 'TestLock' ; MAIN DbselectArea("BASE1") DEFINE TBROWSE TBASE1 At 5, 5 ALIAS "BASE1" ; WIDTH 270 ; HEIGHT 55 ; COLORS { CLR_BLACK, CLR_BLUE } ; FONT "MS Sans Serif" ; SIZE 8 ; CELL END TBROWSE TBASE1:LoadFields( .T. ) TBASE1:nHeightCell += 5 TBASE1:aColumns[1]:nEditMove := DT_DONT_MOVE TBASE1:SetColSize(1,265 ) TBASE1:aColumns[1]:bPostEdit := {|| DbGoto(Recno()) } DbselectArea("BASE1") DEFINE TBROWSE TBASE2 At 55, 5 ALIAS "BASE2" ; WIDTH 270 ; HEIGHT 55 ; COLORS { CLR_BLACK, CLR_BLUE } ; FONT "MS Sans Serif" ; SIZE 8; CELL END TBROWSE TBASE2:LoadFields( .T. ) TBASE2:nHeightCell += 5 TBASE2:aColumns[1]:nEditMove := DT_DONT_MOVE TBASE2:SetColSize(1,265 ) TBASE2:aColumns[1]:bPostEdit := {|| DbSkip(0) } END WINDOW CENTER WINDOW Form_0 ACTIVATE WINDOW Form_0 return nil

dimao: Собственно, почему проект ориентирован на Борландовский компилятор? Я против него ничего не имею, но MinGW как-то роднее , с ним и nightly bin под винду идет. Чем борланд так уж лучше?


Chikanuk: dimao пишет: Собственно, почему проект ориентирован на Борландовский компилятор? Исторически, наверное?... dimao пишет: но MinGW как-то роднее , А собрать им? Исходники-то есть. PS: сам под виндой (увы мне ) пользуюсь MinGW. Программы (чисто по математике) работают на 25% быстрее, чем собранные BCC5.5.1 (А под Debian - еще на 13% быстрее... На том же железе)

gfilatov2002: Выложил текущую сборку компилятора Харбор 2.1.0rc2 для BCC 5.5.1 по адресу: http://minigui.mylivepage.ru/file/?fileid=8549 Harbour 2.1.0rc2 (Rev. 16405) Copyright (c) 1999-2011,http://harbour-project.org/ Harbour Build Info --------------------------- Version: Harbour 2.1.0rc2 (Rev. 16405) Compiler: Borland C++ 5.5.1 (32-bit) PCode version: 0.3 ChangeLog last entry: 2011-03-01 09:43 UTC+0100 Viktor Szakats (harbour.01 syenar.hu) ChangeLog ID: ChangeLog 16405 2011-03-01 08:44:17Z vszakats Built on: Mar 1 2011 11:03:31 Extra C compiler options: -DHB_GC_AUTO -DHB_GUI Build options: (Clipper 5.3b) (Clipper 5.x undoc) (WINANSI) ---------------------------

AM: Я дико извиняюсь, но почему в документации по TBrowse-объектам нигде нет информации о внутренних переменных? Они встречаются в примерах, но описания (даже перечня) их я не нашёл, прямо нигде! Как так?

gfilatov2002: AM пишет: Они встречаются в примерах, но описания (даже перечня) их я не нашёл Надо смотреть в сырцах TsBrowse: DATA aActions // actions to be executed on header's click DATA aCheck //V90 // stock bitmaps for check box DATA aColors // the whole colors kit DATA aColSel //V90 // automatic selected columns creation with databases or recordsets DATA aArray AS ARRAY // browsed array DATA aBitmaps AS ARRAY INIT {} // array with bitmaps handles DATA aDefault AS ARRAY INIT {} // default values in append mode DATA aClipBoard // used by RButtonDown method DATA aColSizes, aColumns, aHeaders // the core of TSBrowse DATA aDefValue AS ARRAY INIT {} // for array in append mode DATA aIcons AS ARRAY INIT {} // array with icons names DATA aImages AS ARRAY INIT {} // array with bitmaps names DATA aJustify // compatibility with TWBrowse DATA aLine // bLine as array DATA aMsg AS ARRAY INIT {} // multi languaje feature DATA aKeyRemap AS ARRAY INIT {} // to prevalidate keys at KeyChar method DATA aPostList // used by ComboWBlock function DATA aSelected // selected items in select mode DATA aSortBmp //V90 // stock bitmaps for sort in headers DATA aSuperHead // array with SuperHeads properties DATA aTags //V90 // array with dbf index tags DATA aFormatPic // array of picture clause DATA bBof // codeblock to check if we are before the first record DATA bEof // codeblock to check if we are beyond the last record DATA bAddRec // custom function for adding record (with your own message) DATA bBitMapH // bitmap handle DATA bContext // evaluates windows keyboard context key DATA bBookMark //V90 // for xBrowse compatibility DATA bDelete // evaluated after user deletes a row with lCanDelete mode DATA bFileLock // custom function for locking database (with your own message) DATA bGoToPos // scrollbar block DATA bFilter // a simple filter tool DATA bIconDraw, bIconText // icons drawing directives DATA bInit // code block to be evaluated on init DATA bKeyCount //V90 // ado keycount block DATA bLine, bSkip, bGoTop, bGoBottom, ; bLogicLen, bChange // navigation codeblocks DATA bKeyNo // logical position on indexed databases DATA bOnDraw // evaluated in DrawSelect() DATA bOnDrawLine //V90 // evaluated in DrawLine() DATA bOnEscape //V90 // to do something when browse ends through escape key DATA bPostDel // evaluated after record deletion DATA bRecLock // custom function for locking record (with your own message) DATA bRecNo //V90 // retrieves or changes physical record position DATA bSeekChange // used by seeking feature DATA bSelected // to be evaluated in select mode DATA bSetOrder // used by seeking feature DATA bTagOrder // to restore index on GotFocus DATA bUserSearch // user code block for AutoSearch DATA bUserFilter // user code block for AutoFilter DATA bUserKeys // user code block to change the // behavior of pressed keys DATA cAlias // data base alias or "ARRAY" or "TEXT_" DATA cDriver // RDD in use DATA cField, uValue1, uValue2 // SetFilter Params DATA cOrderType // index key type for seeking DATA cPrefix // used by TSBrowse search feature DATA cSeek // used by TSBrowse search feature DATA cFont // new DATA cChildControl // new DATA cArray // new DATA cToolTip // tooltip when mouse is over Cells DATA hBmpCursor AS NUMERIC // bitmap cursor for first column DATA l2007 AS LOGICAL INIT .F. // new look //V90 DATA l3DLook AS LOGICAL INIT .F. READONLY // internally control state of ::Look3D() in "Phantom" column DATA lHitTop, lHitBottom, lCaptured, lMChange // browsing flags DATA lAppendMode AS LOGICAL INIT .F. READONLY // automatic append flag DATA lAutoCol //V90 // automatic columns generation from AUTOCOLS clause DATA lAutoEdit AS LOGICAL INIT .F. // activates continuous edition mode DATA lAutoSkip AS LOGICAL INIT .F. // compatibility with TCBrowse DATA lCanAppend AS LOGICAL INIT .F. READONLY // activates auto append mode DATA lCanDelete AS LOGICAL INIT .F. HIDDEN // activates delete capability DATA lCanSelect AS LOGICAL INIT .F. // activates select mode DATA lCellBrw // celled browse flag DATA lCellStyle AS LOGICAL INIT .F. // compatibility with TCBrowse DATA lChanged AS LOGICAL INIT .F. // field has changed indicator DATA lClipMore AS LOGICAL INIT .F. // ClipMore RDD DATA lColDrag AS LOGICAL // dragging feature DATA lConfirm AS LOGICAL INIT .T. HIDDEN // ask for user confirm to delete a row DATA lDescend AS LOGICAL INIT .F. // descending indexes DATA lDestroy // flag to destroy bitmap created for selected records DATA lDontChange //V90 // avoids user to change line with mouse or keyboard DATA lDrawHeaders AS LOGICAL INIT .T. // condition for headers drawing DATA lDrawFooters // condition for footers drawing DATA lEditable AS LOGICAL // editabe cells in automatic columns creation DATA lEditing AS LOGICAL INIT .F. READONLY // to avoid lost focus at editing time DATA lDrawSuperHd AS LOGICAL INIT .F. // condition for SuperHeader drawing DATA lDrawSpecHd AS LOGICAL INIT .F. // condition for SpecHeader drawing DATA lEditingHd AS LOGICAL INIT .F. READONLY // to avoid lost focus at editing time SpecHd DATA lEditableHd AS LOGICAL INIT .F. // activates edition mode of SpecHd on init #ifdef _TSBFILTER7_ DATA lFilterMode AS LOGICAL INIT .F. READONLY // index based filters with NTX RDD #endif DATA lAutoSearch AS LOGICAL INIT .F. READONLY // condition for SuperHeader as AutoSearch DATA lAutoFilter AS LOGICAL INIT .F. READONLY // condition for SuperHeader as AutoFilter DATA lHasChgSpec AS LOGICAL INIT .F. // SpecHeader data has changed flag for further actions DATA lFirstFocus HIDDEN // controls some actions on init DATA lFirstPaint // controls some actions on init DATA lFixCaret AS LOGICAL // TSGet fix caret at editing time DATA lFooting AS LOGICAL // indicates footers can be drawn DATA lNoPaint // to avoid unnecessary painting DATA lGrasp AS LOGICAL INIT .F. READONLY // used by drag & drop feature DATA lHasChanged AS LOGICAL INIT .F. // browsed data has changed flag for further actions DATA lHasFocus AS LOGICAL INIT .F. // focused flag DATA lIconView AS LOGICAL INIT .F. // compatibility with TCBrowse DATA lInitGoTop //V90 // go to top on init, default = .T. DATA lIsArr // browsing an array DATA lIsDbf AS LOGICAL INIT .F. READONLY // browsed object is a database DATA lIsTxt // browsing a text file DATA lLineDrag AS LOGICAL // TSBrowse dragging feature DATA lLockFreeze AS LOGICAL // avoids cursor positioning on frozen columns DATA lMoveCols AS LOGICAL // Choose between moving or exchanging columns (::moveColumn() or ::exchange()) DATA lNoChangeOrd AS LOGICAL // avoids changing active order by double clicking on headers DATA lNoExit AS LOGICAL INIT .F. // prevents edit exit with arrow keys DATA lNoGrayBar AS LOGICAL // don't show inactive cursor DATA lNoHScroll AS LOGICAL // disables horizontal scroll bar DATA lNoLiteBar AS LOGICAL // no cursor DATA lNoMoveCols AS LOGICAL // avoids resize or move columns by the user DATA lNoPopup AS LOGICAL //V90 // avoids popup menu when right click the column's header DATA lPopupActiv AS LOGICAL INIT .F. //V90 // defined popup menu when right click the column's header DATA lNoResetPos AS LOGICAL // prevents to reset record position on gotfocus DATA lNoVScroll AS LOGICAL // disables vertical scroll bar DATA lLogicDrop AS LOGICAL // compatibility with TCBrowse DATA lPageMode AS LOGICAL INIT .F. // paging mode flag DATA lPainted AS LOGICAL // controls some actions on init DATA lRePaint AS LOGICAL // bypass paint if false DATA lPostEdit // to detect postediting DATA lUndo AS LOGICAL INIT .F. // used by RButtonDown method DATA lUpdated AS LOGICAL INIT .F. // replaces lEditCol return value DATA lUpperSeek AS LOGICAL INIT .T. // controls if char expresions are seek in uppercase or not DATA lSeek AS LOGICAL INIT .T. // activates TSBrowse seeking feature DATA lSelector AS LOGICAL INIT .F. //V90 // automatic first column with pointer bitmap DATA lTransparent //V90 // flag for transparent browses DATA lEnabled AS LOGICAL INIT .T. // enable/disable TSBrowse for displaying data //JP 1.55 DATA lPickerMode AS LOGICAL INIT .T. // enable/disable DatePicker Mode in inplace Editing //MWS Sep 20/07 DATA lPhantArrRow AS LOGICAL INIT .F. // Flag for initial empty row in array DATA lEnum AS LOGICAL INIT .F. // activates SpecHeader as Enumerator DATA nAdjColumn AS NUMERIC // column expands to flush table window right DATA nAligBmp AS NUMERIC INIT 0 // bitmap layout in selected cell DATA nCell AS NUMERIC // actual column DATA nClrHeadBack, nClrHeadFore // headers colors DATA nClrFocuBack, nClrFocuFore // focused cell colors DATA nClrEditBack, nClrEditFore // editing cell colors DATA nClrFootBack, nClrFootFore // footers colors DATA nClrSeleBack, nClrSeleFore // selected cell no focused DATA nClrOrdeBack, nClrOrdeFore // order control column colors DATA nClrSpcHdBack,nClrSpcHdFore,nClrSpcHdActive // special headers colors DATA nClrLine // grid line color DATA nColOrder AS NUMERIC // compatibility with TCBrowse DATA nColPos AS NUMERIC INIT 0 // grid column position DATA nColSel AS NUMERIC INIT 0 // column to mark in selected records DATA nColSpecHd AS NUMERIC // activatec editing column of SpecHeader DATA nDragCol AS NUMERIC INIT 0 HIDDEN // drag & drop feature DATA nFireKey // key to start edition, defaults to VK_F2 DATA nFirstKey AS NUMERIC INIT 0 HIDDEN // First logic pos in filtered databases DATA nFreeze AS NUMERIC // 0,1,2.. freezes left most columns DATA nHeightCell AS NUMERIC INIT 0 // resizable cell height DATA nHeightHead AS NUMERIC INIT 0 // " header " DATA nHeightFoot AS NUMERIC INIT 0 // " footer " DATA nHeightSuper AS NUMERIC INIT 0 // " Superhead " DATA nHeightSpecHd AS NUMERIC INIT 0 // " Special header " DATA nIconPos // compability with TCBrowse DATA nLastPainted AS NUMERIC INIT 0 HIDDEN // last painted nRow DATA nLastPos AS NUMERIC // last record position before lost focus DATA nLastnAt AS NUMERIC INIT 0 HIDDEN // last ::nAt value before lost focus DATA nLen AS NUMERIC // total number of browsed items DATA nLineStyle // user definable grid lines style DATA nMaxFilter // maximum number of records to count on index based filters DATA nMemoHE, nMemoWE, nMemoHV, nMemoWV // memo sizes on edit and view mode // Height in lines and Width in pixels // default: 3 lines height and 200 pixels width DATA nOldCell HIDDEN // to control column bGotfocus DATA nOffset AS NUMERIC INIT 0 HIDDEN // offset marker for text viewer DATA nPaintRow AS NUMERIC //V90 // row being painted in DrawLine Method DATA nPhantom AS NUMERIC INIT PHCOL_GRID // controls drawing state for "Phantom" column (-1 or -2) inside ::Look3D() DATA nPrevRec // internally used to go previous record back DATA nRowPos, nAt AS NUMERIC INIT 0 // grid row positions DATA nSelWidth //V90 // Selector column's width DATA nLenPos AS NUMERIC INIT 0 // total number of browsed items in Window JP 1.31 DATA nWheelLines // lines to scroll with mouse wheel action DATA nFontSize // New from HMG DATA nUserKey // user key to change the // behavior of pressed keys DATA nSortColDir AS NUMERIC INIT 0 // Sorting table columns ascending or descending DATA oGet // get object DATA oPhant // phantom column DATA oRSet //V90 // recordset toleauto object DATA oTxtFile AS OBJECT // for text files browsing (TTxtFile() class) DATA uBmpSel // bitmap to show in selected records DATA uLastTag // last TagOrder before losing focus

gfilatov2002: Обновил полную сборку Minigui IDE на сайте http://minigui.mylivepage.ru по адресу: http://minigui.mylivepage.ru/file/?fileid=8550 а также, как обычно, на сервереhttp://hmgextended.com в папке HMGS-IDE.

gfilatov2002: АНОНС * АНОНС * АНОНС * АНОНС * АНОНС Завершается подготовка к опубликованию новой сборки №94, которая выйдет на следующей неделе. Кратко, что нового: - исправление обнаруженных ошибок и неточностей кода; - исправлены ошибки, приводившие к повторному вызову события OnChange в RadioGroup и celled Grid; - RichEdit теперь использует системную DLL версии 4.1 с поддержкой Unicode; - небольшие изменения в библиотеке TsBrowse (от Игоря Назарова и Януша Пора); - обновлена сборка Харбора версии 2.1.0rc2, Hmgs-Ide до версии 1.0.7; - добавлены новые и обновлены некоторые старые примеры (как обычно ) Спасибо за внимание!

LYSK: В старых сборках были примеры с ADS RDD. В последних сборках я их не нахожу. Или не там ищу?

gfilatov2002: LYSK пишет: В старых сборках были примеры с ADS RDD По типу такого #include "minigui.ch" #include "Ads.ch" function Main() REQUEST ADS rddsetdefault( "ADS" ) SET SERVER LOCAL SET FILETYPE TO CDX DEFINE WINDOW Win_1 ; AT 0,0 ; WIDTH 640 ; HEIGHT 480 ; TITLE "EDIT Command Demo" ; MAIN ; ON INIT OpenTable() ; ON RELEASE Closetable() ; BACKCOLOR GRAY DEFINE MAIN MENU OF Win_1 POPUP "&File" ITEM "&Simple Edit test" ACTION EDIT WORKAREA CLIENTES SEPARATOR ITEM "E&xit" ACTION Win_1.Release END POPUP END MENU END WINDOW MAXIMIZE WINDOW Win_1 ACTIVATE WINDOW Win_1 return nil /*-----------------------------------------------------------------------------*/ Procedure OpenTable() USE CLIENTES INDEX CLIENTES NEW Return Nil /*-----------------------------------------------------------------------------*/ Procedure CloseTable() CLOSE CLIENTES Return Nil /*-----------------------------------------------------------------------------*/

Haz: Григорий , добрый день! Скорее всего речь об тестах из поставки харбур .\hb21\contrib\rddads\tests\ там хорошие примеры , но в консольном режиме. Сегодня ночью могу накидать типовой пример в MiniGui + Local ADS ( если нужно ? ) - работа со словарем данных - использование сторед процедур - работа с advantage SQL

gfilatov2002: Haz пишет: могу накидать типовой пример в MiniGui + Local ADS Не хотелось бы Вас напрягать, но попробуйте накидать Единственная просьба: выкладывать такой пример со всеми необходимыми для его запуска .DLL и .CHR файлами

LYSK: Просим! Просим!

Haz: Ловите пример со всеми необходимыми для его запуска .DLL и .CHR файлами click here

Haz: Подправил некоторые ошибки в примере ADS - динамически меняется число колонок в бровсе после sql - добавил autofit по ширине бровса Пример c ADS

Andrey: Haz пишет: могу накидать типовой пример в MiniGui + Local ADS ( если нужно ? ) - работа со словарем данных - использование сторед процедур - работа с advantage SQL А под LetoDB можешь сделать пример ? Было бы очень многим интересно и познавательно !!!

Vlad04: С использованием IDE.

Haz: Andrey пишет: А под LetoDB можешь сделать пример ? Андрей , я с Leto не работал, мне хватает ADS. Так что ... думаю примера не получиться Vlad04 пишет: С использованием IDE. а это как ?

Vlad04: С minigui поставляется и дизайнер форм (IDE). Разумеется , если вы его используете.

Haz: Использую конечно, но очень не значительно - только чтобы набросать макет. Стараюсь больше "рисовать руками", дизайнер удобен, но: 1) так и не нашел в сырцах как помеять сетку с 5 пикселов , к примеру на 2 2) в нем нет возможности пользовательских установок - к примеру я хочу все лейблы по высоте 16 в проекте, вместо дефолтных 24 , для этого мне нужно в каждой это менять руками, ну или шрифты и их размер. 3) в случае вылета по ошибке ( а это нормально для динамически меняющейся системы ) - не успевает сохранить то что до этого надизайнил и тренируйся снова! 4) с некоторых пор окна со свойствами (objectInspector к примеру) перестали слушаться попытки изменения размера( в сырцах строго задоно - меньше - нельзя) и у меня на ноуте начинают "наплывать" друг на друга . Работа в дизайнере начинается с растаскивания их по углам, чтоб не мешали. 5) ну и тормоза при прорисовке .... Это не баг дизайнера !!!...., но пока он задумывается , я успеваю все поправить руками в коде. PS. Большое спасибо людям , разрабатывающим этот инструмент! Не воспринимайте вышесказанное как упрек, просто всего сразу не охватишь. Очень и очень нужную всем работу делаете. СПАСИБО

gfilatov2002: Новый релиз библиотеки выложил, как и обещал, по адресу: http://minigui.mylivepage.ru/file/?fileid=8551 а также, как обычно, на сервере http://hmgextended.com по адресу: http://hmgextended.com/files/CONTRIB/hmg-1.9-94-setup.zip

i3t4j6: gfilatov2002 пишет: Новый релиз библиотеки выложил ... В очередном окне с помощью TsBrowse открывается файл с использованием oBrw:SetFilter(). При закрытии файла dbCloseArea() или dbCloseall() появляется ошибка : Error DBCMD/2001 Файл не вiдкритий: ORDSCOPE</p><BR> Called from ORDSCOPE(0) <BR> Called from TSBROWSE:SETFILTER(10826) <BR> Called from TSBROWSE:DESTROY(2199) Если строки 10826 и 10827 убрать - то ошибка не появляется.

gfilatov2002: i3t4j6 пишет: При закрытии файла dbCloseArea() или dbCloseall() появляется ошибка : Поправил в методе Destroy следующим образом: ... #ifndef _TSBFILTER7_ If ::lFilterMode ::lFilterMode := .F. If Select( ::cAlias ) != 0 ::SetFilter() EndIf EndIf #endif Если это не помогло, то отпишитесь об ошибке...

i3t4j6: gfilatov2002 пишет: Поправил в методе Destroy ... Спасибо огромное - все в порядке !!! (за оперативность тоже !!!)

gfilatov2002: Выложил текущую сборку компилятора Харбор 2.1.0rc2 для BCC 5.5.1 по адресу: http://minigui.mylivepage.ru/file/?fileid=8555 Harbour 2.1.0rc2 (Rev. 16501) Copyright (c) 1999-2011,http://harbour-project.org/ Harbour Build Info --------------------------- Version: Harbour 2.1.0rc2 (Rev. 16501) Compiler: Borland C++ 5.5.1 (32-bit) PCode version: 0.3 ChangeLog last entry: 2011-03-23 07:56 UTC+0100 Viktor Szakats (harbour.01 syenar.hu) ChangeLog ID: ChangeLog 16501 2011-03-23 06:56:58Z vszakats Built on: Mar 23 2011 11:12:51 Extra C compiler options: -DHB_GC_AUTO -DHB_GUI Build options: (Clipper 5.3b) (Clipper 5.x undoc) (WINANSI) ---------------------------

Haz: Григорий , добрый день. Обнаружил пропуск в коде h_tbrowse ( касается только ADS, для других RDD строка присутствует ниже по тексту) : После строки 10744 пропущено ::bTagOrder := {|uTag| ( cAlias )->( OrdSetFocus( uTag ) ) }, ; поэтому далее вылетаем тк Valtype(::bTagOrder) == "U" Error BASE/1004 Метод не экспортирован: EVAL Called from EVAL Called from TSBROWSE:SETORDER(11015) ......

gfilatov2002: Haz пишет: Обнаружил пропуск в коде h_tbrowse Спасибо! Поправлю для новой сборки (планирую выпустить ее на День Космонавтики - юбилей все-таки ).

gfilatov2002: АНОНС * АНОНС * АНОНС * АНОНС * АНОНС Завершена подготовка к опубликованию новой сборки №95, которая выйдет завтра. Кратко, что нового: - исправление обнаруженных ошибок и неточностей кода; - исправления после использования RichEdit версии 4.1 с поддержкой Unicode; - добавлена новая возможность для элемента управления HyperLink - запуск пользовательской процедуры; - небольшие изменения в библиотеке TsBrowse (от Игоря Назарова); - обновлена сборка Харбора версии 2.1.0rc2, Hmgs-Ide до версии 1.0.7.1; - исправлены предупреждения при сборке библиотеки и примеров с помощью компилятора MinGW32; - добавлены новые и обновлены некоторые старые примеры (как обычно ) Спасибо за внимание!

gfilatov2002: Новый релиз библиотеки выложил, как и обещал, по адресу: http://minigui.mylivepage.ru/file/?fileid=8561 а также, как обычно, на сервере http://hmgextended.com по адресу: http://hmgextended.com/files/CONTRIB/hmg-1.9-95-setup.zip Поздравляю всех с Днем Космонавтики!

gustow: gfilatov2002 пишет: Поздравляю всех с Днем Космонавтики! ПОЕХАЛИ тестировать 95й релиз! :)) Пока полет нормальный. Спасибо за работу, Григорий!

gfilatov2002: gustow пишет: ПОЕХАЛИ тестировать 95й релиз Спасибо на добром слове! Кстати, для любителей альтернативных Си-компиляторов выложил на сервере http://hmgextended.com в папке CONTRIB 95-ю сборку библиотеки для компилятора Mingw32

Vlad04: Разместил картинку на главной форме. При переносе в другую директорию ( exe) картинка не отображается! Как правильно сделать? Использую IDE. Спасибо

Alw Spencer: gfilatov2002 Существует ли пошаговая инструкция по установке MiniGUI с нуля? То есть, выполнив все шаги, получаем рабочую среду для разработки на Харборе с МиниГУИ. (Наверно, тут должно входить - установка и настройка путей и переменных для Си, Харбора и МиниГуи, а может и среды программирования.) Спасибо.

Vlad04: Устанавливаешь BCC55 ( если его использовать) , там есть какая-то мелкая заморочка, давно ставил не помню. Инсталлируешь МиниГУИ( т.е. запускаешь hmg-1.9-95-setup.exe, в данном случае ) и вперед. Я использую Ide. Там открыть Tools->Preferenses и настроить свое окружение. Все что стоит по умолчанию , с тем сразу можно начинать работать

gfilatov2002: Vlad04 пишет: При переносе в другую директорию ( exe) картинка не отображается! Как правильно сделать? Надо встроить картинку в экзешник как ресурс, для чего использовать ресурсный файл <моя прога>.RC, в который добавить строку типа LOGO BITMAP logo.bmp В программе нужно вызывать в качестве фона уже не logo.bmp, а указать имя ресурса 'LOGO'. Для работы с ресурсами в IDE есть вкладка 'Rc - Bat' в окне активного проекта, куда надо просто добавить этот ресурсный файл (по команде 'Add' из меню, которое вызывается по правому клику мыши).

gfilatov2002: Alw Spencer пишет: Существует ли пошаговая инструкция по установке MiniGUI с нуля? Да, конечно (она находится в файле помощи MiniGUI.chm в папке minigui\Doc - раздел 'Getting Started / Download Links') Надеюсь, что Вас не испугает английский язык справки

Dr. Oldwarez: Очень прошу вас в следующий TBROWSE добавить возможность пользовательских процедур добавления и удаления записи. В сложных базах данных, вроде моих, часто бывает нужно при добавлении строки автоматически заполнять автоинкрементный первичный ключ, и, кроме того, прописать значения полей из вышестоящей таблицы. А при удалении строки необходимо проверять её не только на наличии связанных записей в подчинённых таблицах, но и на дополнительные условия по значению определённых полей. Если же строка не соответствует разрешениям на удаление - вместо удаления выдаётся соответствующее сообщение. Пока что для этого используются соответствующие клавиши, типа F7-добавить строку, F8-удалить строку (традиция Norton Commander)

gustow: Alw Spencer , вот тут начатый (да заброшеный :( ) мною перевод МиниГУИвского хэлпа. Взгляните в эту главку "3.1. Что нужно, чтобы начать / Откуда это скачать" Надеюсь, для начала поможет. Язык - русский :)

Alw Spencer: Vlad04 gfilatov2002 gustow Спасибо за ссылки. Разберемся теперь.

Vlad04: Пытаюсь перевести терминальную программу под MiniGUI. Вопрос по отображению и прямому редактированию данных таблиц. GRID - я понял, только для отбражения данных памяти, напрямую с таблицами не работает BROWSE и TBROWSE - для этого предназначены. Но можно ли в BROWSE используя ТОЛЬКО КЛАВИАТУРУ выбрать нужную колонку для изменения? В примерах BASIC\BROWSE_1...BASIC\BROWSE_8 и др. колонку можно выбрать только мышкой. При работе клавиатурой выбор всегда начинается с первого столбца и далее по строке.Что конечно неудобно. А вот в некоторых примерах BASIC\GRID_1 ... BASIC\GRID_8 можно клавиатурой выбирать колонку для редактированияи при этом получить всю информацию о колонке ячейке. С TBROWSE подробно еще не разобрался. Можно ли в BROWSE получить доступ к произвольной колонке ( а не по порядку) со всей информацией о ней и ячейке. Спасибо

gfilatov2002: Vlad04 пишет: Можно ли в BROWSE получить доступ к произвольной колонке ( а не по порядку) со всей информацией о ней и ячейке Только с помощью мыши, если использовать BROWSE. У TBROWSE такого ограничения нет

gfilatov2002: Выложил текущую сборку компилятора Харбор 2.1.0rc2 для BCC 5.5.1 по адресу: http://minigui.mylivepage.ru/file/?fileid=8564 Harbour 2.1.0rc2 (Rev. 16680) Copyright (c) 1999-2011,http://harbour-project.org/ Harbour Build Info --------------------------- Version: Harbour 2.1.0rc2 (Rev. 16680) Compiler: Borland C++ 5.5.1 (32-bit) PCode version: 0.3 ChangeLog last entry: 2011-04-26 18:25 UTC-0800 Pritpal Bedi (bedipritpal@hotmail.com) ChangeLog ID: ChangeLog 16680 2011-04-27 01:28:24Z vouchcac Built on: Apr 27 2011 11:33:12 Extra C compiler options: -DHB_GC_AUTO -DHB_GUI Build options: (Clipper 5.3b) (Clipper 5.x undoc) (WINANSI) ---------------------------

Vlad04: ToolBar Кнопочки располагаются одна за одной. А можно ли кнопки как- то сгруппировать, а группы разнести друг от друга ? ( На форме 2 бровза и кнопки управления мне хотелось бы приблизить к ним). Спасибо

Vlad04: Можно. Разобрался сам , есть подходящий пример.

gfilatov2002: Выложил текущую сборку компилятора Харбор 2.1.0rc2 для BCC 5.5.1 по адресу: http://minigui.mylivepage.ru/file/?fileid=8566 Harbour 2.1.0rc2 (Rev. 16750) Copyright (c) 1999-2011,http://harbour-project.org/ Harbour Build Info --------------------------- Version: Harbour 2.1.0rc2 (Rev. 16750) Compiler: Borland C++ 5.5.1 (32-bit) PCode version: 0.3 ChangeLog last entry: 2011-05-11 12:50 UTC+0200 Viktor Szakats (harbour.01 syenar.hu) ChangeLog ID: ChangeLog 16750 2011-05-11 10:50:29Z vszakats Built on: May 11 2011 14:35:32 Extra C compiler options: -DHB_GC_AUTO -DHB_GUI Build options: (Clipper 5.3b) (Clipper 5.x undoc) (WINANSI) ---------------------------

gfilatov2002: АНОНС * АНОНС * АНОНС * АНОНС * АНОНС Завершена подготовка к опубликованию новой сборки №96, которая выйдет послезавтра. Кратко, что нового: - исправление обнаруженных ошибок и неточностей кода; - добавлена новая команда для глобального определения горячих клавиш (полезно для утилит в трее); - добавлен пример использования и необходимые библиотеки для поддержки PostGreSQL; - небольшие изменения в библиотеке TsBrowse; - HMGS-IDE была перекомпилирована с использованием библиотеки TsBrowse версии 9.0; - обновлена сборка Харбора версии 2.1.0rc2, библиотека hbsqlite3 до версии 3.7.6; - обновлены некоторые старые примеры (как обычно ) Спасибо за внимание!

gfilatov2002: Новый релиз библиотеки выложил, как и обещал, по адресу: http://minigui.mylivepage.ru/file/?fileid=8567 а также, как обычно, на сервере http://hmgextended.com по адресу: http://hmgextended.com/files/CONTRIB/hmg-1.9-96-setup.zip Также доступна эта сборка для компилятора MinGW по адресу: http://hmgextended.com/files/CONTRIB/hmg96-mingw.zip Ожидаю комментарии от всех заинтересовавшихся этой новостью

Andrey: gfilatov2002 пишет: Также доступна эта сборка для компилятора MinGW А в чем разница между MinGW и BCC ?

gfilatov2002: Andrey пишет: в чем разница между MinGW и BCC ? BCC - это коммерческий продукт с закрытым кодом и ограниченной лицензией, предназначенный для работы под Windows, а MinGW - многоплатформенный open source проект, который постоянно развивается и оптимизируется.

Vlad04: При компиляции (Build) процесс , иногда после редактирования файлов , как бы в бесконечный цикл попадает- стартует и не останавливается (использую IDE). При закрытии по кнопке Close никаких сообщений в Log нет. На 95 версии , вроде такого не замечал

gfilatov2002: Выложил текущую сборку компилятора Харбор 2.1.0rc2 для BCC 5.5.1 по адресу: http://minigui.mylivepage.ru/file/?fileid=8569 Harbour 2.1.0rc2 (Rev. 16865) Copyright (c) 1999-2011, http://harbour-project.org/ Harbour Build Info --------------------------- Version: Harbour 2.1.0rc2 (Rev. 16865) Compiler: Borland C++ 5.5.1 (32-bit) PCode version: 0.3 ChangeLog last entry: 2011-06-06 21:31 UTC-0800 Pritpal Bedi (bedipritpal@hotmail.com) ChangeLog ID: ChangeLog 16865 2011-06-07 04:34:10Z vouchcac Built on: Jun 7 2011 11:20:45 Extra C compiler options: -DHB_GC_AUTO -DHB_GUI Build options: (Clipper 5.3b) (Clipper 5.x undoc) (WINANSI) ---------------------------

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

Dima: SkyNET пишет: Хм... Простите, а я точно туда попал ? Вот ;) http://clipper.b.qip.ru/?1-1-0-00000072-000-0-0-1200304731

SADSTAR2: gfilatov2002 пишет: Выложил текущую сборку компилятора Харбор 2.1.0rc2 для BCC 5.5.1 по адресу: http://minigui.mylivepage.ru/file/?fileid=8569 И все зарегистрировались?

gfilatov2002: АНОНС * АНОНС * АНОНС * АНОНС * АНОНС Завершена подготовка к опубликованию новой сборки №97, которая выйдет завтра. Кратко, что нового: - увеличено количество одновременно открываемых файлов в функции GetFile() до 255; - добавлена поддержка клика средней кнопки мыши в событии MouseClick для окон; - небольшие изменения в библиотеке TsBrowse; - HMGS-IDE была перекомпилирована с использованием библиотеки TsBrowse версии 9.0; - обновлена сборка Харбора версии 2.1.0rc2, библиотека hbsqlite3 до версии 3.7.6.3; - добавлены новые примеры Спасибо за внимание!

gfilatov2002: Новый релиз библиотеки выложил, как и обещал, по адресу: http://minigui.mylivepage.ru/file/?fileid=8571 а также, как обычно, на сервере http://hmgextended.com по адресу: http://hmgextended.com/files/CONTRIB/hmg-1.9-97-setup.zip Также доступна эта сборка для компилятора MinGW по адресу: http://hmgextended.com/files/CONTRIB/hmg97-mingw.zip Жду свежих идей для новых сборок (иначе их выпуск находится под вопросом)...

Andrey: gfilatov2002 пишет: Жду свежих идей для новых сборок (иначе их выпуск находится под вопросом)... Идеи будут ! Григорий, не прекращай выпуск библиотеки ! А иначе на чем будем писать программы. Несколько предложений (с чем столкнулся): 1) Потихоньку адаптировать Минигуи по Линукс. 2) Ранее писалось про библиотеку КНОПОК. Подключить к МиниГуи. 3) Работа с PNG файлами в МиниГуи. Очень непонятно работает. Сделать подключение PNG через ресурсный файл. 4) IDE - сделать независимое расположение объектов проекта (форм, программ, ресурса) как в xMate 5) IDE - сделать надстройку для hbmk2.exe (диалоговый режим создания bat-файла) 6) Документация - нет описания сборки для хХарбора, для MinGW - т.е. небольшие руководства как это делать. А вообще с документацией по компиляции - дело швах.... Заставить что-то компилировать бывает очень трудно. Новички всегда натыкаются на эти грабли.

gfilatov2002: Andrey Спасибо за добрые слова! По поводу твоих предложений есть небольшие комментарии: 1) для этого уже есть проект HMG-4, основанный на использовании компонентов Qt 2) не является остро необходимым в плане минимализма minigui 3) Работа с PNG файлами в МиниГуи доступна при использовании компонента QHTML (русская документация есть в папке samples\Advanced\qhtm_2\Doc). Пример подключения PNG через ресурсный файл см. в папке samples\Advanced\qhtm_3 4) и 5) это вопросы к автору IDE (сомневаюсь, что он будет этим заниматься без мотивации) 6) считаю, что поддержка хХарбора и MinGW в минигуи предназначена только для "продвинутых" опытных пользователей, которые знают, для чего они этот инструментарий используют. А для новичков есть все необходимое для работы в текущей поставке библиотеки: - простые батники compile.bat; - батники build.bat при использовании утилиты hbmk2. Спасибо за внимание!

Andrey: gfilatov2002 пишет: 4) и 5) это вопросы к автору IDE (сомневаюсь, что он будет этим заниматься без мотивации) А какая мотивация ? Давайте скинемся ему на мотивацию. Я готов поделиться определенной суммой денег... Пускай только отдача будет... Только пускай в IDE дизайнер форм получше сделает. Он тупит на коде, т.е. код обработки вносишь в xMate, потом лезешь подправляешь форму, компилируешь в xMate и приплыли... кода обработки кнопки нет. Лезешь в предыдущую копию и вспоминаешь где этот код !!! Дибилизм... А примеры для МиниГуи я тоже готовлю. Многоязычный. Уже почти закончил. Вышлю вам на почту.

Vlad04: Я использую IDE для сборки проекта и только на него ориентируюсь в дальнейшем. Есть конечно замечания и пожелания.Часть форм создаю в дизайнере, часть вручную. Есть некоторое несоответствие. 1)Не все ручные можно повторить в дизайнере. 2)При компиляции иногда процесс уходит в бесконечность, но дизайнер не виснет, процесс можно прервать. 3)На некоторых ошибках программы, которую компилируешь, дизайнер вылетает. Но надо отметить должное, что таких моментов становится меньше( в сравнении с предыдущим годом) 4)Что хотелось бы впервую очередь, чтобы появилось свойство Align для таких объектов как Frame, Panel, brows( Сложно для различных мониторов у пользователей нужные размеры подбирать) Чтобы объекты Frame, Panel действительно стали контейнерами, т.е. при их перемещении и все вложенные объекты перемещались. Ну а xMate появился , наверно, не от хорошей жизни и по мере совершенствования IDE потребность в нем у тех , кто им пользуется, будет все меньше и меньше.

S-A-N: Vlad04 пишет: 4)Что хотелось бы впервую очередь, ... Чтобы объекты Frame, Panel действительно стали контейнерами, т.е. при их перемещении и все вложенные объекты перемещались. +1. Очень не хватает наследования вложенными объектами свойств ENABLED, READONLY и методов HIDE, SHOW контейнера. Наверное, это тоже вопрос стимулирования автора библиотеки :(

Andrey: gfilatov2002 пишет: BCC - это коммерческий продукт с закрытым кодом и ограниченной лицензией, предназначенный для работы под Windows, а MinGW - многоплатформенный open source проект, который постоянно развивается и оптимизируется. А чисто теоритически - MiniGUI сможет работать под Linux ? И есть ли такие планы ?

SADSTAR2: Не может т.к. это оболочка к WinAPI

gfilatov2002: АНОНС * АНОНС * АНОНС * АНОНС * АНОНС Завершена подготовка к опубликованию новой сборки №98, которая выйдет послезавтра. Кратко, что нового: - добавлена обработка событий OnMouseHover и OnMouseLeave для элементов управления Label и Image; - элемент управления HyperLink теперь построен на базе Label, как это сделано в официальном релизе; - добавлена поддержка Transparent свойства для элемента управления Image; - обновлена сборка Харбора до финальной версии 3.0.0, библиотека hbsqlite3 до версии 3.7.7.1; - добавлены новые и обновлены некоторые старые примеры (как обычно ) Спасибо за внимание!

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

Andrey: gfilatov2002 пишет: http://hmgextended.com/files/CONTRIB/hmg-1.9-98-setup.zip Также доступна эта сборка для компилятора MinGW по адресу: http://hmgextended.com/files/CONTRIB/hmg98-mingw.zip А почему номер версии hmg98-mingw.zip не похож на hmg-1.9-98-setup.zip ? Может нужно было бы написать hmg-1.9-98-mingw.zip ?

gfilatov2002: Andrey пишет: Может нужно было бы написать hmg-1.9-98-mingw.zip ? Может быть... Я планирую отказаться от сквозной нумерации сборок при переходе ко 2-й версии. Чтобы вторая версия имела только один номер 2.0.0 без указания номера сборки. Но до этого еще надо дожить

gfilatov2002: АНОНС * АНОНС * АНОНС * АНОНС * АНОНС Завершена подготовка к опубликованию новой сборки №99, которая выйдет завтра. Кратко, что нового: - добавлены новые классы UPPERCASE и LOWERCASE для элемента управления ComboBox; - добавлен новый класс NOBORDER для элемента управления AnimateBox; - весь Си-код библиотеки и примеров приведен в соответствие с изменениями в текущей версии Харбора; - HMGS-IDE была перекомпилирована с использованием текущей версии библиотеки; - обновлена сборка Харбора до версии 3.1.0dev, а также утилита MPM; - добавлены новые и обновлены старые примеры Ваши комментарии и пожелания приветствуются! Спасибо за внимание!

Andrey: gfilatov2002 пишет: Завершена подготовка к опубликованию новой сборки №99, которая выйдет завтра. Ждем с нетерпением. gfilatov2002 пишет: а также утилита MPM А для чего она нужна ?

gfilatov2002: Andrey пишет: А для чего она нужна ? MPM - это MiniGui Project Manager, open source утилита для сборки программ (см. исходники в папке minigui\Utils\MPM). Позволяет создавать/сохранять профиль проекта, в который включаются все исходники, формы и ресурсы программы, а также можно указать взаимосвязь между ними для ускорения incremental компоновки (перекомпилируются только изменившиеся модули программы).

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

alex_II: Спасибо Отличная работа gfilatov2002 пишет: - добавлен новый класс NOBORDER для элемента управления AnimateBox хорошо бы то же самое и для PROGRESSBAR'а

Andrey: alex_II пишет: хорошо бы то же самое и для PROGRESSBAR'а Присоединяюсь ! И примерчик как это будет работать тоже...

gfilatov2002: Обновил полную сборку Minigui IDE на сайте http://minigui.mylivepage.ru по адресу: http://minigui.mylivepage.ru/file/?fileid=8604 а также, как обычно, на сервере http://hmgextended.com в папке HMGS-IDE.

krutoff: При компиляции примера RichEditEx на xHarbour Compiler build 1.2.1 (SimpLex) (Rev. 9376) выдает ошибку: Error: Unresolved external '_HB_ISNIL' referenced from D:\MINIGUI\XHARBOUR\LIB\HBPRINTER.LIB|winprint Проверил - функция HB_IsNIL() есть и не менялась. Может у кого-то тоже с xHarbour была такая бодяга?

gfilatov2002: krutoff пишет: xHarbour Compiler build 1.2.1 (SimpLex) (Rev. 9376) По следующему адресу доступна исправленная сборка для этого компилятора: http://tech.groups.yahoo.com/group/harbourminigui/files/CONTRIB/xhmg99_xhb9382.zip которая также содержит xHarbour Compiler build 1.2.1 (SimpLex) (Rev. 9382)

krutoff: Спасибо, Григорий! Как всегда, оперативная и быстрая реакция! И опять все работает. Спасибо!

krutoff: Уважаемый Григорий! Снова у меня вопрос. С какой-то версии (может 95) появилась установка в minigui.ch: * Enable support for Panel windows in HMG #define _PANEL_ И я заметил, что в операторе Define Window ... CHILD моя программа сваливается с сообщением: Only Panel windows can be defined inside a DEFINE WINDOW...END WINDOW structure. Program terminated. Called from _DEFINEWINDOW(141) Может есть какой нибудь выход? Я нашел - только вместо CHILD ставить MODAL, но это не всегда удобно. Заранее спасибо...

gfilatov2002: krutoff пишет: * Enable support for Panel windows in HMG Есть два пути для решения этой проблемы: 1) Закомментировать эту строку в minigui.ch #define _PANEL_ и затем пересобрать библиотеку. Это решение подходит, если Вы не пользуетесь окнами типа Panel. 2) Добавить в начале Вашей программы следующую команду SET PROGRAMMATICCHANGE OFF Надеюсь, что это поможет решить Вашу проблему

gfilatov2002: АНОНС * АНОНС * АНОНС * АНОНС * АНОНС Завершена подготовка к опубликованию новой версии 2.0, которая выйдет завтра. Кратко, что нового: - исправление обнаруженных погрешностей в коде библиотеки; - добавлен новый класс MARQUEE (бесконечный цикл) для элемента управления PROGRESSBAR; - мелкие дополнения в команде DO REPORT; - обновлены библиотеки HBPrinter до версии 2.25 и TSBrowse; - обновлена сборка Харбора версии 3.1.0dev, а также HMGS-IDE до версии 1.0.8; - добавлены новые и обновлены старые примеры Ваши комментарии и пожелания приветствуются! Спасибо за внимание!

gustow: Урррррррррраааааа!!! Вот это - действительно ЮБИЛЕЙ !!! Всем спасибо огромное! В первую очередь - уж не скромничай, пожалуйста - Григорию и "команде" за бесконечное терпение и прилежание в "строительстве" бесконечных билдов HMG Ext. Ну и всем нам - тоже! :) :) :)

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

Dr. Oldwarez: СПАСИБО!!! Уже скачал и пробую

gustow: Григорий, обнаружил баг (если это он) в MPM (возможно, это было и раньше, но напоролся только нынче) (HMG Ext. 2.0.1.; всё для Harbour и MiniGUI установлено "стандартно" - на C:; WinXP SP2; во всех остальных аспектах работает нормально): Вылетает в MpmStop() тут (MPM.PRG, строка 1919) [pre2] IF !MemoWrite(cBatFile, BuildBatch( ; lDebug, lRebuild, lXHarbour, lGenLib, lXp, lShow, ; cProjFolder, cHarbourFolder, cREDIR, cHRB, cBCC, cBRC, cILINK, cTLIB)) MpmStop('Cannot write ' + cBatFile + '.') BREAK ENDIF[/pre2] при таком ("слишком длинном", что ли?) пути к проекту (вот начало MAIN.MPM) [pre2] PROJECTFOLDER=E:\__gustow\reestr\reestr_30_source\hrb_test DEBUG=NO REBUILD=NO RUNAFTER=YES HIDEBUILD=YES DELETETEMP=YES XHARBOUR=NO MULTITHREAD=NO GENPPO=NO EXETYPE=MIXED WARNINGS=NONE GENLIB=NO PRGPARAMS= EXEPARAMS= ZIPSUPPORT=NO ODBCSUPPORT=NO ADSSUPPORT=NO MYSQLSUPPORT=NO C:\MiniGUI\Harbour\lib\libct.lib MAIN.PRG ... далее еще куча PRGшек[/pre2]Копирую проект, например, в "E:\_gug\" (соответственно меняя PROJECTFOLDER), открываю оттуда - там всё билдится нормально.

gfilatov2002: gustow пишет: IF !MemoWrite(cBatFile, BuildBatch( ; Выглядит, как ограничение в Харборовской функции MemoWrit() Но, возможно, что я ошибаюсь...

gfilatov2002: Обновил полную сборку Minigui IDE на сайте http://minigui.mylivepage.ru по адресу: http://minigui.mylivepage.ru/file/?fileid=8611 а также, как обычно, на сервере http://hmgextended.com в папке HMGS-IDE. Изменений в IDE довольно много и они связаны с подключением к проекту нового автора, который полностью перелопатил и отформатировал весь код, что позволило собирать IDE без предупреждений Харбора (ключ -w), но вследствие таких больших изменений эта версия является тестовой (beta). Ваши отклики о найденных ошибках приветствуются!

Vlad04: Сегодня проверил. Проект имеет десятка полтора форм и еще больше .prg. Все собралось без вопросов.

gfilatov2002: АНОНС * АНОНС * АНОНС * АНОНС * АНОНС Завершается подготовка к опубликованию новой версии 2.0.2, которая выйдет на следующей неделе. Кратко, что нового: - исправление обнаруженных погрешностей в коде библиотеки; - воосстановлено нормальное поведение элемента управления Spinner в режиме ReadOnly (это обсуждалось здесь на форуме еще в 2007 г.); - добавлено свойство TabStop для всех элементов управления; - добавлен необязательный класс HOTKEY <клавиша> для кнопок с целью быстрого определения горячих клавиш; - кнопки с иконками теперь поддерживают стиль XP под WinXP; - добавлена новая команда SET [GRID] NAVIGATIONMODE EXCEL для назначения перемещения при редактировании в гриде вниз, а клавиша <Tab> при этом используется для горизонтального перемещения между ячейками (как в Экселе); - обновлена сборка Харбора версии 3.1.0dev, а также HMGS-IDE до версии 1.1.0; - добавлены новые (в частности, шаблон официального HMGIDE) и обновлены старые примеры Спасибо за внимание!

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

AM: Обнаружил неувязочку. В новой версии не работает функция hb_fEof() (hbmisc.lib) - всегда возвращает .t. , как с этим бороться? Кроме того, не нашёл исходников этой библиотеки (раньше были), хотя не факт, что понадобятся.

gfilatov2002: AM пишет: не работает функция hb_fEof() (hbmisc.lib) - всегда возвращает .t. , как с этим бороться? Попробуй заменить эту функцию самописным аналогом (см. рабочий пример ниже). [pre2]/* * $Id: testhbf.prg 15174 2010-07-25 08:45:50Z vszakats $ */ PROCEDURE Main() // open a text file here IF hb_fuse( "testhbf.prg", 0 ) > 1 DO WHILE ! hb_feof() qout( "line " + str( hb_frecno(), 2 ) + " " + hb_freadln() ) hb_fskip( 1 ) ENDDO qout( "" ) // close the file hb_fuse() ENDIF wait RETURN STAT FUNCTION hb_feof() RETURN hb_finfo()[6][/pre2]

AM: Спасибо, так работает.

gfilatov2002: AM пишет: Спасибо, так работает А причина этой проблемы в том, что функция HB_FEOF() теперь определена в библиотеке hbrtl и закрывает видимость этой функции в hbmisc

alex_II: При переходе с 2.0.1 на 2.0.2 получил ошибку: Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland Error: Unresolved external '_hb_tracemode' referenced from C:\MINIGUI\HARBOUR\LIB\HBRTL.LIB|trace

Vlad04: Изменений в IDE довольно много напрочь слетает DEFINE SPLITBOX. По-видимому он не поддерживается IDE ?

gfilatov2002: АНОНС * АНОНС * АНОНС * АНОНС * АНОНС Завершается подготовка к опубликованию новой версии 2.0.3, которая выйдет на следующей неделе. Кратко, что нового: - кнопки с иконками теперь поддерживают стиль XP под WinXP при изменении картинки; - добавлен новый необязательный класс RESULT [TO] <имя переменной> в команды COMPRESS и UNCOMPRESS; - изменен в сторону уменьшения коэффициент пропорциональности при выводе картинки в команде PRINT GRAPH; - обновлена сборка Харбора версии 3.1.0dev, многие пользовательские библиотеки, а также HMGS-IDE до версии 1.1.0.1; - добавлены новые и обновлены старые примеры Спасибо за внимание!

gfilatov2002: Новый релиз библиотеки выложил, как и обещал, по адресу: http://minigui.mylivepage.ru/file/?fileid=8620 а также, как обычно, на сервере http://hmgextended.com по адресу: http://hmgextended.com/files/CONTRIB/hmg-2.0.3-setup.zip Также доступна эта сборка и для компилятора MinGW по адресу: http://hmgextended.com/files/CONTRIB/hmg203-mingw.zip Спасибо за внимание! P.S. Выпуск последующих версий будет зависеть целиком от Ваших пожеланий/присланного кода Надеюсь на активность всех заинтересованных лиц

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

gfilatov2002: alex_II пишет: Переход с 2.0.1 на 2.0.3 прошел нормально Благодарю за подтверждение! Увы, но стимулов продолжать эту работу все меньше и меньше...

gustow: Решил (как раз придется "чистить от мусора" один старый проект - и переводить под консоль на Харборе) подделать MiniGUI\UTILS\FuncList (в принципе вещь полезная - но последний раз трогалась автором в 2008м) - сделать поточнее детекцию вызовов (не ловит, к примеру, конструкции SET KEY ... TO ...; неплохо бы - но не всё сразу - отлавливать функции пользователя в ACHOICE(), DBEDIT() и т.п.), сделать вывод в HTML (или в каком формате лучше? XLS, RTF, ...? соображения?..) списка ВСЕХ функций; списка _только_ НЕвызываемых никем функций. В общем, что-то вроде куска из приснопамятного FoxDoc (так, вроде бы, звалось?). Вопросы к Григорию и сообществу: 1. Нужно ли это? (вообще) 2. А вдруг такое (подобное готовое и удобное) уже есть - и париться не надо? 3. Всякие соображения по поводу? 4. ну и вообще :)

gfilatov2002: gustow пишет: Вопросы к Григорию Если проект на Клиппере, то лучше использовать известный документатор типа Click! (автор Фил Барнетт). Если же интересует (в плане чистки кода) список неиспользуемых баластных функций, то можно посмотреть (и допилить по месту ) утилиту Project Analyzer из папки Utils\Project_Analyzer

gustow: Тогда, как понимаю, лучше "допилить по месту" Project Analyzer? Или вообще в подобной утили нет нужды? Проект-то на Клиппере, но (как писал выше) собирается перегоняться на консольный Харбор. А м.б. "допилить по месту" (подоткнув харборовские возможности) тот же "Click!"? Исходники там есть. Или смысла (нужды у харбористов) нет? (извиняюсь, что офтоплю в ветке про HMG Ext., но начал-то с входящего в его состав)

gfilatov2002: gustow пишет: "допилить по месту" (подоткнув харборовские возможности) тот же "Click!"? Думаю, что для Вас это была бы лучшая возможность, учитывая дальнейший переход на консольный Харбор.

Andrey: gfilatov2002 пишет: Выпуск последующих версий будет зависеть целиком от Ваших пожеланий/присланного кода 1) Хотелось бы использовать в проектах картинки PNG вместо BMP без внешних DLL ! То что есть в примерах MiniGui - мало очень. 2) Мало примеров работы с потоками, в документации МиниГуи нет вообще про мультипоточность. Может не там искал... 3) Хотелось бы, чтоб интерфейс программ на МиниГуи был покрасивей...

Andrey: gustow пишет: 1. Нужно ли это? (вообще) Нужно !!! Сам мучуюсь... Как перетащил проект с Клипера, так много функций осталось "баластом" в проекте. Только нужно предусмотреть подключение списка внешних функций для проекта в такую прогу. Согласен помочь в написании такой проги....

gfilatov2002: Andrey пишет: 1) Хотелось бы использовать в проектах картинки PNG вместо BMP без внешних DLL ! То что есть в примерах MiniGui - мало очень. 2) Мало примеров работы с потоками, в документации МиниГуи нет вообще про мультипоточность. Может не там искал... 3) Хотелось бы, чтоб интерфейс программ на МиниГуи был покрасивей Andrey, Благодарю за пожелания! Отвечаю в порядке поступления: 1) увы, но без внешних DLL не получится, поскольку в Винде нет нативной поддержки формата PNG 2) мультипоточность намеренно не упомянута в доке, поскольку эта фича не имеет отношения к построению интерфейса с помощью минигуи 3) красивый интерфейс, по-видимому, предполагает использование скинов, риббон-прибамбасов и прочее. Минигуи основана на возможностях WinAPI. Если требуется выход за пределы этих возможностей, то существуют сторонние DLL, которые можно прикрутить для создания такого навороченного интерфейса ИМХО, естественно

gustow: Andrey , здорово, что не один я мучаюсь (хоть и недолго, думаю, осталось... не-не-не, не в том смысле! :) просто почти все старые проекты с Клиппера уже перетащил на консоль-Харбор, вычистив мусор "руками")! По делу: "нужно предусмотреть подключение списка внешних функций для проекта" - имеется в виду, что есть некие вызываемые в проекте функции, располагающиеся в неких OBJ, DLL и т.п.? (т.е., к примеру, пользователем ПЕРЕД началом "ловли блох" создается некий текст.файл с именем типа "ext_func.txt", где построчно - имена внешних функций, вызовы которых НЕ надо ловить) Правильно понимаю? Правда, если "тело" этой функции (Function ... Return) НЕ находится в одном из PRG - она ж не словится еще на 1й стадии сканирования файлов проекта (в UTILS\FuncList, в CallsTable.prg - в функции BuildList()), а, следовательно, ее вызовы и НЕ будут искаться на 2й стадии (CallsTable.prg - в функции FillList()). Или я что-то не про то?.. (Григорий, опять извиняюсь за оффтоп... Andrey, если по этой работе предполагаем некороткое обсуждение - может, перенести продолжение в отдельную ветку этого подфорума?)

Vlad04: Меня больше "донимает" во многих случаях несовместимость Ide и ручной правки кода ( это самый быстрый способ разработки ). Сложные формы с многими элементами чисто в ручную сложно писать.

Dr. Oldwarez: Конечно же, продолжайте! Я каждый раз с нетерпением жду свежего релиза. На нём и работаем.

Andrey: gustow пишет: создается некий текст.файл с именем типа "ext_func.txt", где построчно - имена внешних функций, вызовы которых НЕ надо ловить) Правильно понимаю? Да правильно. У меня в проектах есть свой конфигуратор (ини-файл), в котором описаны вызовы функций по той, или иной клавише.... gustow пишет: если по этой работе предполагаем некороткое обсуждение - может, перенести продолжение в отдельную ветку этого подфорума?) Присоединяюсь ....

gustow: Трёп по FuncList (или на какой основе лучше делать?) продолжаем в новой теме

Andrey: gfilatov2002 пишет: Благодарю за пожелания! Отвечаю в порядке поступления: 1) увы, но без внешних DLL не получится, поскольку в Винде нет нативной поддержки формата PNG А договориться с кем нибудь или использовать открытые исходники для этого ? gfilatov2002 пишет: Если требуется выход за пределы этих возможностей, то существуют сторонние DLL, которые можно прикрутить для создания такого навороченного интерфейса ИМХО, естественно А какие сторонние DLL посоветуете ?

Andrey: gfilatov2002 пишет: P.S. Выпуск последующих версий будет зависеть целиком от Ваших пожеланий/присланного кода Надеюсь на активность всех заинтересованных лиц Еще ОДНО БОЛЬШОЕ напоминание из темы: http://clipper.borda.ru/?1-1-0-00000250-000-0-0-1278173207 ММК пишет: Придется вам ребята проставляться Григорию :))) В свое время Меркадо для FW сделал две библиотечки; одна Tsbrows, ее уже в гуи включили. А еще осталась TSButton . Уговаривайте Григория :))) Просим, просим, просим....

Vlad04: Красивости это хорошо, но если выбирать , то прежде всего функционал и решать вопросы в первую очередь по нему. 1с7.7 - вообще серенькая мышка...

gfilatov2002: Andrey пишет: договориться с кем нибудь или использовать открытые исходники для этого ? Поддержка PNG формата есть в поставке Win2000/XP и выше в библиотеке GdiPlus.dll Дело за малым - прикрутить отображение png-файла в окне программы (сохранение в формате PNG уже есть в примере samples\Advanced\GdiPlus) Andrey пишет: А какие сторонние DLL посоветуете ? Наиболее известная - это Xtreme Suite Pro ActiveX на сайте http://www.codejock.com/ Естественно, это дело платное... Из описания следует, что With Xtreme SuitePro you can create powerful enterprise class applications that incorporate a full set of highly customizable user interface components that include Microsoft Office style toolbars and menus.

Andrey: gfilatov2002 пишет: Дело за малым - прикрутить отображение png-файла в окне программы ..... P.S. Выпуск последующих версий будет зависеть целиком от Ваших пожеланий/присланного кода Пожелания есть - включить в состав библиотеки МиниГуи в следующих версиях !!!

Andrey: При инсталяции МиниГуи - желательно чтоб вносились переменные окружения с предупреждением в окне: 1) PATH = БукваДиска:\MiniGui\BATCH 2) MG_ROOT = БукваДиска:\MiniGui А то на чистой машине каждый раз начинаешь вспоминать что нужно править, чтоб заработала сборка МиниГиу.

gfilatov2002: АНОНС * АНОНС * АНОНС * АНОНС * АНОНС Завершена подготовка к опубликованию новой версии 2.0.4, которая выйдет завтра. Кратко, что нового: - добавлен новый необязательный класс FILEPROGRESS <block> в команды COMPRESS и UNCOMPRESS; - изменен в сторону увеличения коэффициент пропорциональности при выводе картинки в команде PRINT GRAPH; - обновлена сборка Харбора версии 3.1.0dev, многие пользовательские библиотеки, SQLITE3 до версии 3.7.9, а также HMGS-IDE до версии 1.1.0.2; - добавлены новые и обновлены старые примеры Спасибо за внимание!

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

Andrey: Спасибо за новую сборку библиотеки !!! Особенно порадовал пример \MiniGUI\SAMPLES\Advanced\AVI_Animation

alex_II: Проблем при переходе на новую сборку не обнаружил! Отличная работа Григорий!! Спасибо!!!

gfilatov2002: alex_II пишет: Проблем при переходе на новую сборку не обнаружил! Большое спасибо за отзыв! Рад это услышать и знать, что кто-то использует библиотеку

Vlad04: кто-то использует библиотеку Ставка только на неё - MiniGUI. Старые программы собрались .Но ошибки прежние остались в Ide : DEFINE BROWSE Browse_1 ... WORKAREA DOC_ADD FIELDS mFIELDS1 ON DBLCLICK (ShowTovarCenaKol2()) ... END BROWSE При сохранении IDE строку ON DBLCLICK (ShowTovarCenaKol2()) записывает как ONChanGe DBLCLICK (ShowTovarCenaKol2()) Так же пропадает В заголовке некоторых форм NOMAXIMIZE

gfilatov2002: Vlad04 пишет: При сохранении IDE строку ON DBLCLICK (ShowTovarCenaKol2()) записывает как ONChanGe DBLCLICK (ShowTovarCenaKol2()) Так же пропадает В заголовке некоторых форм NOMAXIMIZE Благодарю за отчет об ошибках! Видимо, что-то зацепили авторы при форматировании исходников Ide Сейчас посмотрю, как это можно поправить... Чуть позже... Что я накопал: ON DBLCLICK поддерживается в Ide только для элементов управления TREE и TBROWSE. Для всех остальных рассматривается только конструкция ONDBLCLICK (без пробела). Это сделано для единообразия загрузки контролов. Поэтому ручная правка FMG-файлов не рекомендуется: после этого форма может быть загружена с ошибками, подобными приведенной Вами

Andrey: gfilatov2002 пишет: Это сделано для единообразия загрузки контролов. Поэтому ручная правка FMG-файлов не рекомендуется: после этого форма может быть загружена с ошибками, подобными приведенной Вами У меня такая же проблема в 5 проектах. Правишь в IDE форму и слетает то что в FRM правил. Как тогда это убрать ? Как можно предусмотреть в будущем ?

gfilatov2002: Andrey пишет: Как тогда это убрать ? Только с помощью резервной копии форм, сделанной перед редактированием в Ide. Andrey пишет: Как можно предусмотреть в будущем ? Переработать исходники Ide под свои нужды (и не забыть прислать эти наработки мне для включения в следующую сборку).

gustow: gfilatov2002 пишет: Рад это услышать и знать, что кто-то использует библиотеку Григорий, могу доложить, что в системе Минздрава Свердловской области используются (по крайней мере - т.е. сделанные мною и тиражно [в куче медучреждений]) следующие программы, сделанные на HMG Ext.: - в задаче "АС Поликлиника" (расчеты по обязат. мед.страхованию - поликлиника) (модуль поиска рецептов и экспорта в Excel и др. форматы); - в задаче "Мониторинг ОРВИ" (почтовый робот с "интеллектуальным разбором" приаттаченных Excel-файлов; раньше "вручную" тратилось дошиша времени) (GUI-элементы не использовались, но с HMG разработка шла "веселее"); - в задаче "Реестр-Стационар" (расчеты по обязат. мед.страхованию - стационар) (модуль анализа и представления сводной инфы по экономическим показателям работы ЛПУ за период времени: опять же - реализация на HMG оказалась наиболее простой). Люди в области вполне довольны возможностями получения инфы в "человеческом" виде из "древних" (программы по ОМС работают с начала 90х) задач. И это только то, что используется тиражно (т.е. 200-300ми медучреждениями области) - а и для "внутренних нужд" конторы полепливаю всякую мелочь, позволяющую "изгаляться" с разными источниками данных и комбинировать из них что хочу. Правда, мои шефы не особо в курсе, что "для государства!" используется "какая-то самоделка" (в общем-то, оставил пока надежду сагитировать их принять это как одно из "легальных" средств разработки - да и ладно) - но тоже довольны, что "ишь ты, смотри-ка - работает!" :))

gfilatov2002: gustow пишет: Григорий, могу доложить Спасибо! Очень познавательно А теперь вопрос к Вам, как к практику: каких возможностей в построении интерфейса программ Вам не хватает в библиотеке? Нужны ли медработникам такие фишки, как изменение скинов программы и т.п. украшательства

S-A-N: Григорий, рискну высказать свое мнение. Пользователи моих программ в процессе ввода часто переключаются между языками (русский/английский/украинский), что создает некоторое неудобство при вводе десятичного разделителя в поля ввода. Это, конечно, мелочь - отслеживать текущую раскладку клавиатуры или мне "лепить" дополнительную обработку, - но ... Нельзя ли сделать стандартным такое поведение control'ов с числовыми полями ввода, чтобы при вводе "точка" и "запятая" заменялись на системный десятичный разделитель? А украшательства ... Не знаю, лично мне хватает. Разве что добавить горизонтальную/вертикальную линию. В любом случае, большое Вам спасибо за библиотеку.

Vlad04: Разве что добавить горизонтальную/вертикальную DEFINE LABEL Label_4 ROW 180 COL 20 WIDTH 450 HEIGHT 1 VALUE "" BORDER .T. END LABEL Я так делаю горизонтальную линию, а если поменять соответственно значения WIDTH 1 и HEIGHT ... будет вертикальная линия.

S-A-N: Vlad04 пишет: DEFINE LABEL Спасибо за подсказку. Я пользовался FRAME с пустым CAPTION.

gfilatov2002: S-A-N пишет: чтобы при вводе "точка" и "запятая" заменялись на системный десятичный разделитель? Если набирать числа и десятичный разделитель на числовой клавиатуре (обычно располагается справа на краю), то "точка" не будет зависеть от текущей раскладки клавиатуры S-A-N пишет: добавить горизонтальную/вертикальную линию Для этого существует команда DRAW LINE IN WINDOW (см. рабочий пример использования в папке samples\Advanced\ExploreWinObjects) S-A-N пишет: большое Вам спасибо за библиотеку Как Вы знаете, я не являюсь автором этой библиотеки. Мой вклад заключается только в поддержании ее "на плаву" и собирании интересных примеров использования для очередной сборки

Andrey: gfilatov2002 пишет: Мой вклад заключается только в поддержании ее "на плаву" и собирании интересных примеров использования для очередной сборки Спасибо БОЛЬШОЕ за твой труд ! Библиотека не просто "плавает"... Программы на ней летают (маленькие, легкие, функциональные и быстрые) !!!

gfilatov2002: АНОНС * АНОНС * АНОНС * АНОНС * АНОНС Завершена подготовка к опубликованию новой версии 2.0.5, которая выйдет послезавтра. Кратко, что нового: - исправление обнаруженных ошибок и неточностей кода; - добавлена поддержка маски ввода 'N' в элемент управления TextBox; - переработан код элемента управления BtnTextBox - добавлена поддержка тем Винды и смена картинки на кнопке(ах); - переработан код элемента управления GetBox в части поддежки встоенной в него кнопки; - обновлена сборка Харбора версии 3.1.0dev, библиотеки WinReport и TsBrowse; - добавлены новые и обновлены старые примеры Спасибо за внимание!

Andrey: Ждем с нетерпением !

gfilatov2002: Новый релиз библиотеки для компилятора BCC выложил, как и обещал, по адресу: http://minigui.mylivepage.ru/file/?fileid=8695 а также, как обычно, на сервере http://hmgextended.com по адресу: http://hmgextended.com/files/CONTRIB/hmg-2.0.5-setup.zip Также доступна эта сборка и для компилятора MinGW по адресу: http://hmgextended.com/files/CONTRIB/hmg205-mingw.zip Спасибо за внимание! Замечание По техническим причинам (вследствие их неготовности) в эту сборку не влючены обновления для BtnTextBox и GetBox, которые требуют также обновления кода библиотеки TsBrowse. Стабильность - прежде всего!

alex_II: Спасибо! Отличная работа, проблем при переходе не встретил

Vlad04: Согласен

gustow: Проблем при переходе тоже не наблюдал.

Петр: Я рад за всех. Но Григорию хотелось бы посоветовать, поскольку в сборку MiniGUI не включается ChangeLog Harbour, хотя бы в анонсе указывать, к примеру, такие моменты * modified DB_DBFLOCK_HB64 locking scheme - extended RLOCK/FLOCK area from 2^31-2 to 2^32-2 it effectively changes maximum number of records in this locking scheme to 4'294'967'294 - use COMIX like hyper locking mode it should increase performance Warning: INCOMPATIBLE! all applications using DB_DBFLOCK_HB64 locking mode should be updated - it is not safe to concurrently access the same files using programs compiled with older Harbour versions and current one. И еще можно locks.txt в доки добавить

gfilatov2002: Петр пишет: Григорию хотелось бы посоветовать, поскольку в сборку MiniGUI не включается ChangeLog Harbour Петр, Вы абсолютно правы, но это выходит за рамки поддержки графической библиотеки. К тому же, эти изменения в Харборе относятся к нетипичному способу блокировки при использовании драйвера DBFNSX. Это демонстрирует следующий пример: [pre2]#include "dbinfo.ch" PROCEDURE Main() rddSetDefault( "DBFNSX" ) hb_rddInfo( RDDI_LOCKSCHEME, DB_DBFLOCK_HB64, "DBFNSX" ) dbCreate( "test.dbf", { { "T1", "C", 10, 0 } } ) USE test EXCLUSIVE INDEX ON FIELD->T1 TAG test1 TO test USE test SHARED browse() RETURN[/pre2] Я надеюсь, что те, кто использует конструкции вида hb_rddInfo( RDDI_LOCKSCHEME, DB_DBFLOCK_HB64, "DBFNSX" ) внимательно следят за обновлениями Харбора

Петр: gfilatov2002 пишет: это выходит за рамки поддержки графической библиотеки. Ок внимательно следят за обновлениями Харбора Я тоже надеюсь Для "невнимательных" * harbour/src/vm/classes.c * disabled inheriting of class variables values from ancestor classes when new class is dynamically created. Warning: INCOMPATIBLE! This modification is not backward compatible and can interact with some existing code which has to be updated for new behavior. Я знаю Ваше отношение к ООП

gfilatov2002: Обновил полную сборку Minigui IDE на сайте http://minigui.mylivepage.ru по адресу: http://minigui.mylivepage.ru/file/?fileid=8699 а также, как обычно, на сервере http://hmgextended.com в папке HMGS-IDE. P.S. Продолжаем исправлять ошибки, внесенные в эту новую версию

a_sidorov: Делаю задачу на MiniGui С какими проблемами столкнулся: 1. Мышка реагирует не на объект, расположенный сверху другого объекта, а на тот объект, который раньше определен, независимо от его вида на экране. Пришлось переставлять определения объектов. 2. Объекты, расположенные на окне ТАВ, на самом деле прорисовываются и вне окна TAB (они действительно определяются как объекты окна Window, TAB только определяет их видимость и здесь мышь работает корректно, определяя только видимые объекты на закладке). 3. При работе с цветами желательно сразу прописать какой либо цвет при определении объекта, и если вычисляемый цвет не работает, нужно проверить, было ли определение цвета при определении объекта. В основном все проблемы решил, в том числе, сделал динамическое изменение всех размеров объектов в окне задачи при изменения размеров окна, изменение всех цветов по темам, градиентную прорисовку кнопок, выделение рисунков и подписей при подведении мыши. Теперь о проблеме, в которую уперся. Необходимо было нарисовать закладки TAB в другом месте и красиво. Попробовал на Buttоnex с градиентной заливкой (помогли примеры)- получается нормально, потом начал рисовать при помощи Label с дорисовкой графикой DRAW LINE IN WINDOW, DRAW ARC IN WINDOW. Оказалось, что графика в Windows XP (SP3) работает некорректно. Это можно видеть на примерах, приведенных в дистрибутиве (наример, Basic/BaseGraph и других тоже). Если запустить пример, затем запустить любую новую задачу, которая закроет окно примера, затем сбросить окно новой задачи на панель задач, то на примере останется все кроме графики – то есть практически пустое окно. На Windows-7 все работает корректно, окно задачи восстанавливается вместе с графикой. Проблема из той же серии – при сбросе своей задачи на панель задач и ее восстановлении на экране графика не восстанавливается (на XP). В приведенных примерах прорисовка графики прописывается в методе ON INIT (либо возможность закрывается), у меня не получилось. Попробовал ON RESTORE, непонятно вообще когда метод вызывается. Пока рабочий вариант ON MINIMIZE {||fl_minimize:=70}; ON PAINT {||if(fl_minimize>0,(form_graph_tab(),fl_minimize--),)}; При прорисовке большого числа линий (>30) этот метод тоже начинает глючить. Может быть есть решение проблемы рисования графики? Нужно нарисовать красивые кнопки с кривыми краями и тенями. Может быть рисовать (заливать) внутри окна Label? Буду искать пример, если кто-то поможет, буду рад.

Vlad04: сделал динамическое изменение всех размеров объектов в окне задачи при изменения размеров окна, Использовал прием из примеров или что-то свое?

a_sidorov: Пересчет всех размеров окон производится считыванием из свойств окна задачи, умножением размеров других окон на множитель или изменение и запись в свойства окон. Типа (в функции пересчета размеров): //из свойств основного окна aWindowsYX[3]:= Form_1.HEIGHT //либо передвигаем окна form_1.img_oper.row:=aWindowsYX[3]-93 //либо масштабируем aadd(ascale,(aWindowsYX[3])/(aoldWindowsYX[3])) -- string_prg2:= round(oldstring_prg2*aScale,0) -- form_1.Main_LBL_txt.HEIGHT:=string_prg2[3]

Andrey: a_sidorov пишет: Оказалось, что графика в Windows XP (SP3) работает некорректно. Это можно видеть на примерах, приведенных в дистрибутиве (наример, Basic/BaseGraph и других тоже). Если запустить пример, затем запустить любую новую задачу, которая закроет окно примера, затем сбросить окно новой задачи на панель задач, то на примере останется все кроме графики – то есть практически пустое окно. На Windows-7 все работает корректно, окно задачи восстанавливается вместе с графикой. Проблема из той же серии – при сбросе своей задачи на панель задач и ее восстановлении на экране графика не восстанавливается (на XP). В приведенных примерах прорисовка графики прописывается в методе ON INIT (либо возможность закрывается), у меня не получилось. Попробовал ON RESTORE, непонятно вообще когда метод вызывается. Пока рабочий вариант ON MINIMIZE {||fl_minimize:=70}; ON PAINT {||if(fl_minimize>0,(form_graph_tab(),fl_minimize--),)}; При прорисовке большого числа линий (>30) этот метод тоже начинает глючить. Может быть есть решение проблемы рисования графики? Нужно нарисовать красивые кнопки с кривыми краями и тенями. Может быть рисовать (заливать) внутри окна Label? Буду искать пример, если кто-то поможет, буду рад. Я тоже сталкивался с такой проблемой. Думал, что я не понимаю как НУЖНО делать и забросил.... Буду очень рад услышать как решить такие проблемы.

Петр: Andrey пишет: Буду очень рад услышать как решить такие проблемы Перефразируя Е.Гайдара можно сказать - есть два пути для выхода из кризиса. Реалистический, если прилетят инопланетяне, и все за нас сделают. И фантастический, если мы все сделаем сами. Реалистический путь - переход на Win7

Andrey: Петр пишет: Реалистический путь - переход на Win7 Тогда дело труба.... У меня много юзеров на ХР сидят....

Dr. Oldwarez: Andrey пишет: Тогда дело труба.... У меня много юзеров на ХР сидят.... Я тоже сижу на XP и совсем не хочу пересаживаться на семёрку. Мой шеф на ХР работает, а семёрки у него нет. Я тоже семёрки не хочу - большинство моих ноутов с ней просто несовместимы. Например субноутбук Sony Vaio PCG SR1K. А XP там отлично работает! Ещё одна причина моей нелюбви к XP и Висте (которая всегда висла, виснет и будет виснуть) - то, что там постоянно вылазят совершенно идиотские вопросы, вроде: "являетесь ли вы администратором" если надо, к примеру, скопировать файл в другую директорию. Ага, щазз я им всё скажу! Единственный случай, когда применение семёрки оправдано - если оперативная память превышает 3 Гб.

krutoff: Не работает множественный ToolTip. Видно в примере MAINDEMO_(SYNTAX_I), в BTNTEXTBOX Text_3 ToolTip вообще не показывает. Это конечно вроде и мелочь, но при наличии двух кнопок и ввода в GetBox или BTNTEXTBOX бывает надо указать подсказки по всем этим кнопкам...

gfilatov2002: krutoff пишет: при наличии двух кнопок и ввода в GetBox или BTNTEXTBOX бывает надо указать подсказки по всем этим кнопкам... Да, Вы правы В следующей сборке будет доступен переработанный элемент управления BTNTEXTBOX (и GetBOX также) с поддержкой множественного ToolTip. Кстати, код примера MAINDEMO_(SYNTAX_I), включенный в текущую сборку, был обновлен именно для демонстрации этой возможности

a_sidorov: Проблема графики в XP (при наложении окон и восстановления окна задачи) решается, если взять прорисовку графики из примера SAMPLES\Advanced\Curves, и в DrawCurves() вместо рисования кривой поставить вызов своей функции перерисовки графики.

a_sidorov: Добил графику в XP (на 98 тоже работает): 1. Для того, чтобы не стиралась графика при сбросе и перекрытии окон, сделал как в SAMPLES\Advanced\Curves 2. Чтобы иногда не стирались тексты в других окнах (Label), ERASE WINODWS использую только при смене графики if !l_old_page==l_page ERASE WINDOW Form_1 CLEAN MEMORY l_old_page:=l_page endif 3. Поставил обращение к функции перерисовки графики либо к RefreshPaint() после некоторых операций (только если не срабатывала), например после CENTER WINDOW 4. Сделал в функции рисования линии или кривой локальную копию переменной с массивом цветов перед обращением к рисованию кривой либо линии (иногда был эффект исчезновения цвета). При рисовании линий и теней использовал последовательную многократную (5 проходов с градацией цвета) обрисовку LABEL при помощи DRAW ARC IN WINDOW и DRAW LINE IN WINDOW. Общее количество линий больше 70. Работает нормально.

gfilatov2002: АНОНС * АНОНС * АНОНС * АНОНС * АНОНС Завершена подготовка к опубликованию новой версии 2.0.6, которая выйдет на следующей неделе. Кратко, что нового: - добавлены обещанные ранее улучшения: 1) переработан код элемента управления BtnTextBox - добавлена поддержка тем Винды и смена картинки на кнопке(ах); 2) переработан код элемента управления GetBox в части поддержки встроенной в него кнопки; - обновлена сборка Харбора версии 3.1.0dev, HMGS-IDE, библиотеки HbPrint, PropGrid и TsBrowse; - добавлены новые и обновлены старые примеры (как обычно ) Спасибо за внимание!

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

sashaBG: Выполните етот код : #include "minigui.ch" Function Main set navigation extended DEFINE WINDOW Form_1 ; AT 0,0 ; WIDTH 500 HEIGHT 300 ; TITLE 'Harbour MiniGUI Demo ' ; MAIN DEFINE LABEL LABEL_5 COL 10 ROW 90 VALUE "Press F1 or Click on buttons ( FOCUSEDCONTROL Not working !!!)" AUTOSIZE .T. FONTNAME "Arial" FONTSIZE 10 VISIBLE .T. END LABEL DEFINE BTNTEXTBOX BTNTEXTBOX_DOST COL 90 ROW 115 WIDTH 140 HEIGHT 20 TOOLTIP "" ACTION do_help() BUTTONWIDTH 20 FONTNAME "tahoma" FONTSIZE 10 FONTCOLOR {0,0,0} MAXLENGTH 14 VISIBLE .T. TABSTOP .T. END BTNTEXTBOX DEFINE BTNTEXTBOX BTNTEXTBOX_SKA41 COL 90 ROW 135 WIDTH 140 HEIGHT 20 TOOLTIP "" ACTION do_help() BUTTONWIDTH 20 FONTNAME "tahoma" FONTSIZE 10 FONTCOLOR {0,0,0} MAXLENGTH 5 VISIBLE .T. TABSTOP .T. END BTNTEXTBOX END WINDOW Form_1.Center ON KEY F1 OF Form_1 ACTION DO_HELP() Form_1.Activate Return Nil *-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._. STATIC FUNCTION DO_HELP( ) LOCAL cControl := FORM_1.FOCUSEDCONTROL msginfo(cControl) return nil Когда нажимаем на кнопку FOCUSEDCONTROL возвращает пустой стринг ! Раньше работало нормально .

alex_II: Переход на релиз 2.0.6 прошел нормально Отличная работа Григорий Большое спасибо

gfilatov2002: sashaBG пишет: Когда нажимаем на кнопку FOCUSEDCONTROL возвращает пустой стринг Благодарю за сообщение об ошибке! Вы можете скачать для проверки исправленную версию библиотеки по адресу архив Примечание. Эта ссылка будет доступна в течение 10 дней

sashaBG: Спасибо Григорий ! Ты как всегда NUMBER ONE !!! :)

sashaBG: У BTNTEXBOX OnLost Событие срабатывает неправильно ! #include "minigui.ch" Function Main set navigation extended DEFINE WINDOW Form_1 ; AT 0,0 ; WIDTH 500 HEIGHT 300 ; TITLE 'Harbour MiniGUI Demo ' ; MAIN DEFINE BTNTEXTBOX BTNTEXTBOX_1 COL 90 ROW 105 WIDTH 140 HEIGHT 20 ACTION nil VALUE 'BTNTEXTBOX_1' ONLOSTFOCUS DO_ONLOST('1') BUTTONWIDTH 20 FONTNAME "tahoma" FONTSIZE 10 FONTCOLOR {0,0,0} MAXLENGTH 14 VISIBLE .T. TABSTOP .T. END BTNTEXTBOX DEFINE BTNTEXTBOX BTNTEXTBOX_2 COL 90 ROW 135 WIDTH 140 HEIGHT 20 VALUE 'BTNTEXTBOX_2' ACTION nil ONLOSTFOCUS DO_ONLOST('2') BUTTONWIDTH 20 FONTNAME "tahoma" FONTSIZE 10 FONTCOLOR {0,0,0} MAXLENGTH 5 VISIBLE .T. TABSTOP .T. END BTNTEXTBOX END WINDOW Form_1.Center Form_1.Activate Return Nil *-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._. STATIC FUNCTION DO_ONLOST(cPar ) msginfo(' ON LOST EVENT FROM BTNTEXTBOX_'+cPar ) return nil ПРИ НАЖАТИИ КНОПОК НЕ ДОЛЖНО СРАБАТЫВАТЬ СООБЩЕНИЕ

gfilatov2002: sashaBG пишет: ПРИ НАЖАТИИ КНОПОК НЕ ДОЛЖНО СРАБАТЫВАТЬ СООБЩЕНИЕ Увы, но это плата за "настоящие" (а не нарисованные) кнопки в теперешней реализации BTNTEXBOX : поскольку поле ввода теряет фокус при нажатии такой кнопки, то срабатывает событие OnLostFocus Кстати, проверил срабатывание события OnLostFocus на старой реализации этого контрола в сборке 2.0.5: работает точно также, как сейчас!

sashaBG: В версии 2.0.5 срабатывает сначало событие в ACTION и я там его ловлю и исправляю :) а в 2.0.6 срабатывает сначало событие ONLOST для меня в етом проблема

gfilatov2002: sashaBG пишет: для меня в етом проблема Предложение: Как альтернативу BTNTEXBOX с LostFocus Вы можете попробовать использовать GetBox с классами Action и Valid

santy: Григорий добрый вечер. Для программы нужно было использовать Wait Window из примера samples\Basic\WAIT_WINDOW пример demo2 загружает процесор больше 50% функция ShowWaitWindowModal( cMessage ). Если поменять на Laskey(), Inkey() загрузка исчезает. Вопрос: У меня есть реализовано два Wait Window один аналогичный Visual Foxpro (верхний правый угол), второй из Paradox (красный нижний правый угол). Возможно ли закинуть реализацию и примеры? Спасибо.

gfilatov2002: santy пишет: Вопрос: У меня есть реализовано два Wait Window один аналогичный Visual Foxpro (верхний правый угол), второй из Paradox (красный нижний правый угол). Возможно ли закинуть реализацию и примеры? Да, присылайте на мою почту Мой адрес знаете?

santy: Только тот ,что в профиле.

Петр: santy пишет: пример demo2 загружает процесор больше 50% функция ShowWaitWindowModal( cMessage ) Так на то он и пример, чтобы его не использовать Там (т.е. в ShowWaitWindowModal()) в цикле нужно добавить hb_releaseCPU() для harbour или, кажется, releaseCPU() для xHb

gfilatov2002: santy пишет: Только тот ,что в профиле Этот адрес подойдет - присылайте примеры

Vlad04: Петр Так на то он и пример, чтобы его не использовать Напугал! На примерах учатся

santy: На то он и пример , что бы его проанализировать и исправить. Для чего создаются примеры ? Для того чтобы продемонстрировать возможности системы. Если есть ошибки или нестандартное поведение, надо писать и по возможности исправлять. Думаю это правильно.

gfilatov2002: АНОНС * АНОНС * АНОНС * АНОНС * АНОНС Завершена подготовка к опубликованию новой версии 2.0.7, которая выйдет завтра. Кратко, что нового: - исправление обнаруженных ошибок и неточностей кода, внесенных в предыдущей сборке; - исправлена неправильная позиция надписей заголовков в элементе управления Tab при одновременном использовании классов Bottom и BackColor (ownerdraw стиль); - теперь размеры картинки элемента управления Image могут быть определены автоматически, если не указаны ее высота/ширина; - обновлена сборка Харбора версии 3.1.0dev, библиотеки PropGrid и TsBrowse (где исправлена проблема с "залипанием" последней строки в некоторых случаях); - добавлены новые и обновлены старые примеры Спасибо за внимание!

Andrey: gfilatov2002 пишет: теперь размеры картинки элемента управления Image могут быть определены автоматически, если не указаны ее высота/ширина; Пример в студию ! Хочется глянуть !

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

Dr. Oldwarez: Я так обрадовался и начал перекомпилировку программ. К сожалению, всё стало только хуже Теперь уже не только последняя строка цепляется, но и все, кроме первых двух (при последующем откручивании наверх). Самое ужасное то, что программа при этом ЗАВИСАЕТ намертво, и снять её можно только пресловутой CTRL+ALT+DEL.

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

sashaBG: Подтверждаю зависание в TSBROWSE !

gfilatov2002: sashaBG пишет: Подтверждаю зависание в TSBROWSE ! Для дальнейшего рассмотрения этой проблемы требуется демонстрационный пример

Andrey: Если собирать проект для МиниГуи под MinGW - собирается ОДИН ехе-ник или будет присутствовать еще dll-ка MinGW ?

gfilatov2002: Andrey пишет: Если собирать проект для МиниГуи под MinGW - собирается ОДИН ехе-ник Именно так - никаких дополнительных DLL не нужно

Andrey: gfilatov2002 СПАСИБО ! Есть ли инструкция сборки программ под MinGW (как его ставить, если уже установлен BCC) ? Кто может просветить как собирать проект под BCC и MinGW (в одном *.hbp) ?

gfilatov2002: Andrey пишет: Есть ли инструкция сборки программ под MinGW Используйте структуру каталогов, как она задана в сборке по адресу http://hmgextended.com/files/CONTRIB/hmg207-mingw.zip и собирайте свою программу с помощью батника build.bat из примеров, включенных в эту поставку. Вот и все инструкции

Andrey: gfilatov2002 пишет: Вот и все инструкции Спасибо ! А как указать для МойПроект.hbp сборку под MinGW ?

gfilatov2002: Andrey пишет: А как указать для МойПроект.hbp сборку под MinGW ? Просто в начале батника для сборки проекта указываете @echo off SET HMGPATH=<имя диска>:\hmg SET PATH=%HMGPATH%\harbour\bin;%HMGPATH%\mingw\bin;%PATH% ... где <имя диска> - это имя корневого диска, на котором развернута сборка P.S. Готовый скрипт см. в файле minigui\buildapp.bat сборки для компилятора MinGW.

Andrey: gfilatov2002 пишет: Используйте структуру каталогов, как она задана в сборке по адресу Не совсем понятно... У меня установлено на диск Z: Z:\BCC55 Z:\MINIGUI если добавить Z:\HMG Z:\MINIGUI то папки MINIGUI - пересекутся !!! Я могу конечно переименовать папку, но хотелось бы что в дальнейшем была возможность собирать программу с помощью любого компилятора. Можно ли как то упорядочить этот процесс ? Кто и как разместил/собирает проект несколькими компиляторами ? И где скачать(и какую версию) MinGW для MiniGui ? А то у меня не собирается.... Z:\HMG\minigui>buildapp.bat Z:\hmg\mingw\bin\nm.exe: 'C:/WINDOWS/TEMP/hbmk_ex6y1x.dir/.c': No such file Z:/hmg/harbour/lib/libhbvm.a(hvmall.o)(.text+0x1ab):hvmall.c: undefined reference to `__mingw_vfprintf' collect2: ld returned 1 exit status hbmk2: Error: Running linker. 1 gcc.exe C:/WINDOWS/TEMP/hbmk_ex6y1x.dir/hbmk_d4jlpp.o Z:/HMG/minigui/_temp.o -mwindows -Wl,--start-grou p -lminigui -ltsbrowse -ladordd -lcalldll -lhbprinter -lminiprint -lhbct -lhbmisc -lhbtip -lhbziparc -lhbm zip -lminizip -lhbwin -lxhb -lmsvfw32 -lvfw32 -lhbextern -lhbdebug -lhbvm -lhbrtl -lhblang -lhbcpage -lgtc gi -lgtpca -lgtstd -lgtwin -lgtwvt -lgtgui -lhbrdd -lhbuddall -lhbusrrdd -lrddntx -lrddcdx -lrddnsx -lrddf pt -lhbrdd -lhbhsx -lhbsix -lhbmacro -lhbcplr -lhbpp -lhbcommon -lhbmainwin -lkernel32 -luser32 -lgdi32 -l advapi32 -lws2_32 -lwinspool -lcomctl32 -lcomdlg32 -lshell32 -luuid -lole32 -loleaut32 -lmpr -lwinmm -lmap i32 -limm32 -lmsimg32 -lwininet -lhbpcre -lhbzlib -Wl,--end-group -o.exe -LZ:/hmg/harbour/lib -LZ:/hmg/ harbour/bin -LZ:/hmg/minigui/lib

gfilatov2002: Andrey пишет: Не совсем понятно Если не хотите переименовывать папку minigui каждый раз при смене компилятора, то тогда нужно размещать эти папки на разных дисках. Andrey пишет: Можно ли как то упорядочить этот процесс ? Возможно, надо выбрать для себя приоритетный компилятор, как это сделано в текущей сборке для BCC Andrey пишет: И где скачать(и какую версию) MinGW для MiniGui ? Можно использовать версию 4.6.1 из поставки ночного релиза Харбора, который располагается по адресу http://sourceforge.net/projects/harbour-project/files/binaries-windows/nightly/

krutoff: sashaBG пишет: Подтверждаю зависание в TSBROWSE ! А у меня после ввода новых записей при заполнении окна TSBROWSE - ввода последней записи внизу окна - происходит очищение всего окна и даже тек. запись не показывает - остается только текущая ячейка. Откатился на пред. версию 2.06 - все опять отрабатывает. У меня в конце объявления TSBROWSE стоит: oBrw:nHeightCell += 6 oBrw:nHeightHead += 10 oBrw:nHeightFoot += 4 oBrw:nWheelLines := 1

gfilatov2002: krutoff пишет: у меня после ввода новых записей при заполнении окна TSBROWSE - ввода последней записи внизу окна - происходит очищение всего окна Да, подтверждаю, есть такая бяка. Уже поправил код библиотеки tsbrowse для новой сборки - добавил проверку (см. ниже): [pre2]... If ! ::lHitBottom .and. ! ::lAppendMode .and. ::nRowCount() == ::nRowPos() ::Refresh( .F. ) // 2.0.7 EndIf ::nAt := ::nLogicPos() //V90 ... [/pre2]

gfilatov2002: АНОНС * АНОНС * АНОНС * АНОНС * АНОНС Завершена подготовка к опубликованию новой версии 2.0.8, которая выйдет послезавтра. Кратко, что нового: - исправление обнаруженных ошибок и неточностей кода; - добавлен новый экспериментальный элемент управления CHECKLABEL (автор - Януш Пора); - добавлена константа WIN32_LEAN_AND_MEAN при компиляции Си-кода библиотеки, как это сделано в xHarbour; - обновлена сборка Харбора версии 3.1.0dev, библиотеки HbPrint и TsBrowse; - пересобрана HMGS-IDE с текущей версией библиотеки; - добавлены новые и обновлены старые примеры Спасибо за внимание!

Andrey: gfilatov2002 пишет: добавлены новые и обновлены старые примеры Подскажите пожалуйста, а есть ли возможность показа PNG-картинки без библиотеки Freeimage.dll ??? И пример, где можно посмотреть ?

gfilatov2002: Andrey пишет: есть ли возможность показа PNG-картинки без библиотеки Freeimage.dll Если Вам не нравится отдельная библиотека Freeimage.dll, то ее можно статически встроить в приложение, откомпилированное с помощью MinGW. Правда екзешник получится более 6 МБайт. Пример, как это сделать, мне прислал Владимир Чумаченко <ChVolodymyr@yandex.ru>. Картинки выводятся на экран как с диска, так и из ресурсов приложения [pre2]/* * MINIGUI - Harbour Win32 GUI library Demo * * Static FreeImage usage * (c) 2012 Vladimir Chumachenko <ChVolodymyr@yandex.ru> * * Revised by Grigory Filatov <gfilatov@inbox.ru> */ #include "FreeImage.ch" #include "MiniGUI.ch" // Области вывода изображений имеют фиксированные размеры // Координаты области изображения из файла #define FI_TOP 30 #define FI_LEFT 30 #define FI_BOTTOM 455 #define FI_RIGHT 380 #define FI_WIDTH ( FI_RIGHT - FI_LEFT ) #define FI_HEIGHT ( FI_BOTTOM - FI_TOP ) // Координаты области изображения из ресурса #define RES_TOP FI_TOP #define RES_LEFT ( FI_RIGHT + 50 ) #define RES_BOTTOM FI_BOTTOM #define RES_RIGHT 780 #define RES_WIDTH ( RES_RIGHT - RES_LEFT ) #define RES_HEIGHT ( RES_BOTTOM - RES_TOP ) // Имена ресурсов (соответсвуют определениям Demo.rc), хотя можно определить // свои и связывать их в процедуре загрузки. #define PNG_BIRD 'BIRD' #define PNG_SEA 'SEA' #define JPG_TOWN 'TOWN' #define JPG_WATERFALL 'WATERFALL' // Имя файла, имя ресурса Static cFileImg Static cResImg /****** * * Вывод графики из файла и ресурса * */ Procedure Main FI_Initialise() Set font to 'Tahoma', 9 Define window wMain ; At 0, 0 ; Width 810 ; Height 525 ; Title 'FreeImage Demo' ; NoMaximize ; NoSize ; Icon 'MAINICON' ; Main ; On Release FI_DeInitialise() ; On Paint { || ShowFile(), ShowRes() } Define main menu Define Popup '&File' MenuItem '&Open' Action OpenImgFile() Separator MenuItem 'E&xit Alt+X' Action ReleaseAllWindows() End Popup // !!! Все пункты меню связаны с именем соответствующего ресурса Define Popup '&Resourse' MenuItem 'Bird (png)' Action OpenImgRes( PNG_BIRD , 'PNG' ) MenuItem 'Sea (png)' Action OpenImgRes( PNG_SEA , 'PNG' ) MenuItem 'Town (jpg)' Action OpenImgRes( JPG_TOWN , 'JPG' ) MenuItem 'Waterfall (jpg)' Action OpenImgRes( JPG_WATERFALL, 'JPG' ) End Popup End menu @ ( FI_TOP - 25 ), ( FI_LEFT - 25 ) Frame frmFile ; Caption 'File' ; Width ( FI_WIDTH + 45 ) ; Height ( FI_HEIGHT + 45 ) @ ( RES_TOP - 25 ), ( RES_LEFT - 25 ) Frame frmResource ; Caption 'Resource' ; Width ( RES_WIDTH + 45 ) ; Height ( RES_HEIGHT + 45 ) End window On Key Alt+X of wMain Action ReleaseAllWindows() Center window wMain Activate window wMain Return ****** End of Main ****** /****** * * OpenImgFile() * * Выбор файла для загрузки * */ Static Procedure OpenImgFile Local cFile := GetFile( { { 'Image files (*.bmp;*.jpg;*.jpeg;*.gif;*.png;*.psd;*.tif;*.ico)', ; '*.bmp;*.jpg;*.jpeg;*.gif;*.png;*.psd;*.tif;*.ico' ; } ; }, 'Select image', GetCurrentFolder(), .F., .T. ) If !Empty( cFile ) cFileImg := cFile wMain.frmFile.Caption := cFileNoPath( cFile ) ShowFile() Endif Return ****** End of OpenImgFile ****** /****** * * ShowFile() * * Вывод изображения из файла * */ Static Procedure ShowFile Static nHandleFileImg Local nTop := FI_TOP , ; nLeft := FI_LEFT , ; nBottom := FI_BOTTOM, ; nRight := FI_RIGHT , ; cImage , ; pps , ; hDC , ; nWidth , ; nHeight , ; cID , ; aData , ; nKoeff , ; nHandleClone If !( nHandleFileImg == nil ) FI_Unload( nHandleFileImg ) nHandleFileImg := nil Endif If IsNil( cFileImg ) Return Else nHandleFileImg := FI_Load( FI_GetFileType( cFileImg ), cFileImg, 0 ) // Загрузка рисунка Endif InvalidateRect( Application.Handle, 1, FI_LEFT, FI_TOP, FI_RIGHT, FI_BOTTOM ) nWidth := FI_GetWidth( nHandleFileImg ) nHeight := FI_GetHeight( nHandleFileImg ) If ( ( nHeight > FI_HEIGHT ) .or. ( nWidth > FI_WIDTH ) ) If ( ( nHeight - FI_HEIGHT ) > ( nWidth - FI_WIDTH ) ) nKoeff := ( FI_HEIGHT / nHeight ) Else nKoeff := ( FI_WIDTH / nWidth ) Endif nHeight := Round( ( nHeight * nKoeff ), 0 ) nWidth := Round( ( nWidth * nKoeff ), 0 ) nHandleClone := FI_Clone( nHandleFileImg ) FI_Unload( nHandleFileImg ) nHandleFileImg := FI_Rescale( nHandleClone, nWidth, nHeight, FILTER_BICUBIC ) FI_Unload( nHandleClone ) Endif If ( nWidth < FI_WIDTH ) nLeft += Int( ( FI_WIDTH - nWidth ) / 2 ) nRight := ( nLeft + nWidth ) Endif If ( nHeight < FI_HEIGHT ) nTop += Int( ( FI_HEIGHT - nHeight ) / 2 ) nBottom := ( nTop + nHeight ) Endif pps := DefinePaintStru() hDC := BeginPaint( Application.Handle, pps ) FI_WinDraw( nHandleFileImg, hDC, nTop, nLeft, nBottom, nRight ) EndPaint( Application.Handle, pps ) Return ****** End of ShowFile ****** /****** * * OpenImgRes( cRes, cType ) * * Загрузка рисунка из ресурса * */ Static Procedure OpenImgRes( cRes, cType ) Local cData := Win_LoadResource( cRes, cType ) If !Empty( cData ) cResImg := cData wMain.frmResource.Caption := ( cRes + ' (' + cType + ')' ) ShowRes() Else MsgExclamation( cRes + ' not found.', 'Error' ) Endif Return ****** End of OpenImgRes ****** /****** * * ShowRes() * * Вывод рисунка из переменной (ресурса, загруженного в память) * */ Static Procedure ShowRes Static nHandleResImg Local nTop := RES_TOP , ; nLeft := RES_LEFT , ; nBottom := RES_BOTTOM, ; nRight := RES_RIGHT , ; cImage , ; pps , ; hDC , ; nWidth , ; nHeight , ; cID , ; aData , ; nKoeff , ; nHandleClone If !( nHandleResImg == nil ) FI_Unload( nHandleResImg ) nHandleResImg := nil Endif If Empty( cResImg ) Return Else nHandleResImg := FI_LoadFromMem( FI_GetFileTypeFromMem( cResImg, Len( cResImg ) ), cResImg, 0 ) Endif InvalidateRect( Application.Handle, 1, RES_LEFT, RES_TOP, RES_RIGHT, RES_BOTTOM ) nWidth := FI_GetWidth( nHandleResImg ) nHeight := FI_GetHeight( nHandleResImg ) If ( ( nHeight > RES_HEIGHT ) .or. ( nWidth > RES_WIDTH ) ) If ( ( nHeight - RES_HEIGHT ) > ( nWidth - RES_WIDTH ) ) nKoeff := ( RES_HEIGHT / nHeight ) Else nKoeff := ( RES_WIDTH / nWidth ) Endif nHeight := Round( ( nHeight * nKoeff ), 0 ) nWidth := Round( ( nWidth * nKoeff ), 0 ) nHandleClone := FI_Clone( nHandleResImg ) FI_Unload( nHandleResImg ) nHandleResImg := FI_Rescale( nHandleClone, nWidth, nHeight, FILTER_BICUBIC ) FI_Unload( nHandleClone ) Endif If ( nWidth < FI_WIDTH ) nLeft += Int( ( FI_WIDTH - nWidth ) / 2 ) nRight := ( nLeft + nWidth ) Endif If ( nHeight < FI_HEIGHT ) nTop += Int( ( FI_HEIGHT - nHeight ) / 2 ) nBottom := ( nTop + nHeight ) Endif pps := DefinePaintStru() hDC := BeginPaint( Application.Handle, pps ) FI_WinDraw( nHandleResImg, hDC, nTop, nLeft, nBottom, nRight ) EndPaint( Application.Handle, pps ) Return ****** End of ShowRes ****** #pragma BEGINDUMP #include <windows.h> #include "hbapi.h" #include "hbapiitm.h" // Определение структуры для рисования HB_FUNC_STATIC( DEFINEPAINTSTRU ) { PAINTSTRUCT *pps = (PAINTSTRUCT*) hb_xgrab( sizeof( PAINTSTRUCT ) ); hb_retnl( (LONG) pps ); } #pragma ENDDUMP[/pre2]

Andrey: gfilatov2002 пишет: е можно статически встроить в приложение, откомпилированное с помощью MinGW Я так и не смог собрать примеры на МиниГуи с помощью MinGW ....

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

Dr. Oldwarez: Залипание последней строки и периодическое исчезновение FOOTERа так никуда и не делось

SergKis: Для gfilatov2002: При инициализации дочернего окна MDI в c_windowMDI.c неточность: [pre2] HB_FUNC( INITMDICHILDWINDOW ) { HWND hwndChild; MDICREATESTRUCT mcs; char rgch[ 150 ]; static int cUntitled; int Style = 0; if( hb_parl(9) ) rgch[ 0 ] = 0; else { if( hb_parc(2) == NULL ) wsprintf( rgch, "Untitled%d", cUntitled++ ); else { strncpy( rgch, hb_parc(2), 149 ); rgch[ 149 ] = 0; } } if( !hb_parl(7) ) Style = Style | WS_MINIMIZEBOX; // ??? Эти константы не работаеют нужны WS_MINIMIZE if( !hb_parl(8) ) Style = Style | WS_MAXIMIZEBOX; // ??? Эти константы не работаеют WS_MAXIMIZE if( hb_parl(10) ) Style = Style | WS_VSCROLL; if( hb_parl(11) ) Style = Style | WS_HSCROLL; // Create the MDI child window mcs.szClass = "MdiChildWndClass"; // window class name mcs.szTitle = rgch; // window title mcs.hOwner = GetModuleHandle( NULL ); // owner mcs.x = hb_parni( 3 ); // x position mcs.y = hb_parni( 4 ); // y position mcs.cx = hb_parni( 5 ); // width mcs.cy = hb_parni( 6 ); // height mcs.style = Style; // window style mcs.lParam = 0; // lparam hwndChild = ( HWND ) SendMessage( ( HWND ) hb_parnl(1), WM_MDICREATE, 0, ( LPARAM ) ( LPMDICREATESTRUCT ) &mcs ); if( hwndChild != NULL ) ShowWindow( hwndChild, SW_SHOW ); hb_retnl( ( LONG ) hwndChild ); } [/pre2]

gfilatov2002: Dr. Oldwarez пишет: Залипание последней строки и периодическое исчезновение FOOTERа так никуда и не делось Вы правы, но появился пример, как обойти этот баг (см. в папке samples\Advanced\Tsb_LASTROW)

gfilatov2002: SergKis пишет: При инициализации дочернего окна MDI в c_windowMDI.c неточность Спасибо! Вы правы, но это должно быть исправлено по-другому (я уже сделал поправку для следующей сборки)

Dr. Oldwarez: gfilatov2002 пишет: Вы правы, но появился пример, как обойти этот баг (см. в папке samples\Advanced\Tsb_LASTROW) ДА! [pre2]procedure CorrectionFirstLast(oBrw) *--------------------------------------------------------------------------------* IF oBrw:nRowCount() == oBrw:nRowPos() oBrw:Refresh( .F. ) ENDIF IF oBrw:nLogicPos() > 0 .and. oBrw:nRowPos() == 1 oBrw:Refresh( .F. ) ENDIF RETURN[/pre2] И ведь работает! Огромное Вам спасибо!

sashaBG: Как предотвратиь срабатывание ONLOST или VALID при BTNTEXTBOX или GETBOX когда нажимая на бутон вызывем например свой 'поисковик' . Я раньше создавал флаг lDisableOnLost и поднимал его по нажатии кнопки. а сейчас не могу добится етого. Поетому так и остался на версии 2.0.5 ТЕСТ соберите с 2.0.5 потом с 2.0.8 и посмотрите на разницу при нажатии кнопок

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 Благодарю за помощь! Обязательно поправлю эту строку для следующей сборки.

SergKis: Для gfilatov2002. При работе с двумя и более browse на ChildMDI потребовалась доработка _BrowseUp, _BrowseDown в h_browse.prg [pre2] *-----------------------------------------------------------------------------* Procedure _BrowseUp ( ControlName , ParentForm , z ) *-----------------------------------------------------------------------------* Local i , s , _Alias , _RecNo , _BrowseArea , _BrowseRecMap , _DeltaScroll LOCAL hBrowse, nLine i := Iif( pcount() == 2 , GetControlIndex ( ControlName , ParentForm ) , z ) hBrowse := _HMG_aControlhandles _DeltaScroll := ListView_GetSubItemRect ( hBrowse, 0 , 0 ) _BrowseRecMap := _HMG_aControlRangeMax nLine := ListView_GetFirstItem( hBrowse ) If nLine == 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( hBrowse, _DeltaScroll[2] * (-1) , 0 ) ENDIF Go _RecNo if Select( _Alias ) != 0 Select &_Alias Else Select 0 Endif ListView_SetCursel ( hBrowse, 1 ) _BrowseOnChange (i) Return ENDIF // BAA 15-Апр-2012 18:42:48 IF _HMG_ActiveDlgProcHandle == 0 .AND. _HMG_ActiveMDIChildIndex < 1 ListView_SetCursel( hBrowse, nLine - 1 ) _BrowseOnChange (i) Return ENDIF IF _HMG_ActiveMDIChildIndex > 0 ListView_SetCursel ( hBrowse, nLine - 1 ) _BrowseVscrollFastUpdate ( i , -1 ) _BrowseOnChange (i) ListView_SetCursel ( hBrowse, nLine ) ELSE _BrowseOnChange (i) ENDIF Return *-----------------------------------------------------------------------------* Procedure _BrowseDown ( ControlName , ParentForm , z ) *-----------------------------------------------------------------------------* Local i , PageLength , s , _Alias , _RecNo , _BrowseArea , _BrowseRecMap , _DeltaScroll LOCAL hBrowse, nLine i := Iif( pcount() == 2 , GetControlIndex ( ControlName , ParentForm ) , z ) hBrowse := _HMG_aControlhandles _DeltaScroll := ListView_GetSubItemRect ( hBrowse, 0 , 0 ) _BrowseRecMap := _HMG_aControlRangeMax nLine := ListView_GetFirstItem( hBrowse ) PageLength := ListViewGetCountPerPage( hBrowse ) _BrowseArea := _HMG_aControlSpacing If nLine == PageLength if _HMG_aControlContainerHandle != 0 Return EndIf _Alias := Alias() If Select (_BrowseArea) == 0 Return EndIf Select &_BrowseArea _RecNo := RecNo() Go _BrowseRecMap [1] Skip _BrowseUpdate( '', '', i ) _BrowseVscrollUpdate( i ) ListView_Scroll( hBrowse, _DeltaScroll[2] * (-1) , 0 ) Go _RecNo if Select( _Alias ) != 0 Select &_Alias Else Select 0 Endif ListView_SetCursel ( hBrowse, Len(_HMG_aControlRangeMax ) ) _BrowseOnChange (i) Return ENDIF // BAA 15-Апр-2012 18:42:48 IF _HMG_ActiveDlgProcHandle == 0 .AND. _HMG_ActiveMDIChildIndex < 1 ListView_SetCursel ( hBrowse, nLine + 1 ) _BrowseVscrollFastUpdate ( i , 1 ) _BrowseOnChange (i) Return ENDIF IF _HMG_ActiveMDIChildIndex > 0 ListView_SetCursel ( hBrowse, nLine+1 ) _BrowseVscrollFastUpdate ( i , 1 ) _BrowseOnChange (i) ListView_SetCursel ( hBrowse, nLine ) ELSE _BrowseOnChange (i) ENDIF Return [/pre2] Нам показались полезными след. модификации [pre2] h_hotkey.prg ======== ... *-----------------------------------------------------------------------------* FUNCTION _DetermineKey( cKey ) *-----------------------------------------------------------------------------* ... IF valtype(cKey) == "N" // BAA 16-Apr-2012 Return iif(cKey > 0 .and. cKey <= len(aKeyTables), aKeyTables[cKey], "") ENDIF aKey := { 0, 0 } ... h_windowsMDI.prg ============ ... Function _DefineChildMDIWindow (...) ... _SetWindowProperty( Formhandle, "PROP_CFILE", if(Title=="","No Title",Title) ) _SetWindowProperty( Formhandle, "PROP_FORMNAME", FormName ) _SetWindowProperty( Formhandle, "PROP_MODIFIED" , .f.) _SetWindowProperty( Formhandle, "PROP_PARENTNAME", ParentForm ) // BAA 16-Apr-2012 ... h_windows.prg ============ ... *-----------------------------------------------------------------------------* Function GetParentFormName( nControlIndex ) *-----------------------------------------------------------------------------* Local i, nParentForm, cParentForm IF valtype(nControlIndex) == "N" // BAA 16-Apr-2012 i := ascan( _HMG_aFormHandles, _HMG_aControlParentHandles [nControlIndex] ) Return iif( i > 0, _HMG_aFormNames , "" ) ENDIF // BAA 16-Apr-2012 If _HMG_BeginWindowMDIActive //JP MDI HotKey nParentForm := GetActiveMdiHandle() if nParentForm == 0 cParentForm := _HMG_MainClientMDIName else cParentForm := _GetWindowProperty ( nParentForm, "PROP_FORMNAME" ) endif //End JP ElseIf _HMG_BeginWindowActive cParentForm := _HMG_ActiveFormName EndIf If ValType ( cParentForm ) != 'U' If ! _IsWindowDefined( cParentForm ); cParentForm := "" Endif EndIf RETURN cParentForm [/pre2]

gfilatov2002: SergKis Благодарю за предложенные изменения! Использовал только доработки в h_browse.prg Замечания по другим модификациям: h_hotkey.prg - лучше использовать собственную функцию nDetermineKey( nKey ) вида [pre]FUNCTION nDetermineKey( nKey ) ... IF valtype(nKey) == "N" .and. nKey > 0 .and. nKey <= len(aKeyTables) Return aKeyTables[nKey] ENDIF RETURN "" [/pre] h_windowsMDI.prg - имя родительского окна уже хранится в переменной _HMG_MainClientMDIName h_windows.prg - снова лучше использовать собственную функцию ИМХО

SergKis: gfilatov2002 пишет: h_hotkey.prg - лучше использовать собственную функцию nDetermineKey( nKey ) ... h_windows.prg - снова лучше использовать собственную функцию ИМХО Да так и делал. Только размножается ... с похожими именами ... в разных местах ... А с _HMG_MainClientMDIName у меня неувязочка была (наверно был где-то не прав) потому и перешел на функцию.

gfilatov2002: АНОНС * АНОНС * АНОНС * АНОНС * АНОНС Завершена подготовка к опубликованию новой версии 2.1.0, которая выйдет послезавтра. Кратко, что нового: - исправление обнаруженных ошибок и неточностей кода (увы, увы ); - мелкие оптимизации ядра библиотеки с целью уменьшения числа используемых функций и ускорения работы; - обновлена WINANSI-сборка Харбора версии 3.1.0dev, а также библиотека TsBrowse; - пересобрана HMGS-IDE с текущей версией библиотеки; - добавлены новые и обновлены старые примеры (как обычно). Спасибо за внимание!

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

SergKis: Для gfilatov2002. Для работы с MDI сделаны изменения: [pre2] h_hotkey.prg ============ ... *-----------------------------------------------------------------------------* Procedure _DefineHotKey ( cParentForm , nMod , nKey , bAction ) *-----------------------------------------------------------------------------* Local nParentForm , nId , k If _HMG_BeginWindowMDIActive //JP MDI HotKey IF ! empty(_HMG_ActiveFormName) // BK 22-Apr-2012 cParentForm := _HMG_ActiveFormName // BK ELSE nParentForm := GetActiveMdiHandle() if nParentForm == 0 cParentForm := _HMG_MainClientMDIName else cParentForm := _GetWindowProperty ( nParentForm, "PROP_FORMNAME" ) endif //End JP ENDIF ElseIf _HMG_BeginWindowActive cParentForm := _HMG_ActiveFormName EndIf ... _ReleaseHotKey ( cParentForm, nMod , nKey ) if _HMG_BeginWindowMDIActive //JP MDI HotKey IF ! empty(_HMG_ActiveFormName) // BK 22-Apr-2012 cParentForm := _HMG_ActiveFormName // BK nParentForm := GetFormHandle ( cParentForm ) // BK ELSE nParentForm := GetActiveMdiHandle() If nParentForm == 0 nParentForm := GetFormHandle ( cParentForm ) EndIf //End JP ENDIF else nParentForm := GetFormHandle ( cParentForm ) endif ... h_events.prg ============ ... case WM_SETFOCUS *********************************************************************** ... For x := 1 To ControlCount //JP MDI HotKey If _HMG_aControlType [x] == 'HOTKEY' If .Not. _HMG_BeginWindowMDIActive ReleaseHotKey ( 0 , _HMG_aControlIds [x] ) // BK 22-Apr-2012 ElseIf _HMG_aControlParentHandles [x] == hWnd .Or. ; _HMG_InplaceParentHandle <> 0 // BK 22-Apr-2012 ReleaseHotKey ( 0 , _HMG_aControlIds [x] ) // BK 22-Apr-2012 Endif EndIf //End Next x For x := 1 To ControlCount If _HMG_aControlType [x] == 'HOTKEY' If _HMG_aControlParentHandles[x] == hWnd // BK 22-Apr-2012 InitHotKey ( hWnd , _HMG_aControlPageMap [x] , _HMG_aControlValue [x] , _HMG_aControlIds [x] ) EndIf EndIf Next x ... h_windows.prg ============= ... Procedure _SetActivationFocus(i) *-----------------------------------------------------------------------------* ... For x := 1 To Len (_HMG_aControlHandles) If _HMG_aControlParenthandles [x] == h .and. _HMG_aControlType[x] != "HOTKEY" // BK 25-Apr-2012 ... Next x If FocusDefined == .F. SetFocus( GetNextDlgTabItem ( h , 0 , .F. ) ) If _HMG_BeginWindowMDIActive // BK 25-Apr-2012 _HMG_aFormFocusedControl := GetFocus() // Endif // BK End EndIf ... [/pre2] Пример. Сборка hb 2.0 hmg 2.07 vc9. Для bcc сборки нет. Не могу разрешить один момент: запущены все три Child окна (последним запустить вторую кнопку [Project])), то VK_TAB не всегда реагирует, переставить фокус на др.бровсе (кнопка F7 работает - клавиши назначены). Выполнив Alt+Tab, Alt+Tab VK_TAB или после F7 работает. Что я делаю не так ? Спасибо.

gfilatov2002: SergKis пишет: Для работы с MDI сделаны изменения Изменения в файлах h_hotkey.prg и h_windows.prg принимаются, а вот то, что предложено для h_events.prg, я отверг SergKis пишет: Что я делаю не так ? Трудно сказать Видимо, еще не все косяки при обработке горячих клавиш в MDI устранены...

SergKis: Для gfilatov2002. Вроде проблему решило (на сколько правильно - вопрос): h_windowsMDI.prg ============ ... Function _ActivateMdiWindow ( FormName ) *-----------------------------------------------------------------------------* Else If _HMG_IsModalActive MsgMiniGUIError( Formname + ": Non Modal Windows can't be activated when a modal window is active." ) endif If _HMG_aFormNoShow == .F. ShowWindow( GetFormHandle(FormName) ) EndIf _SetActivationFlag(i) _ProcessInitProcedure(i) SetFocus(GetFormHandle(_HMG_MainClientMDIName)) // BK 26-Apr-2012 SetFocus(GetFormHandle(FormName)) // BK 26-Apr-2012 _RefreshDataControls(i) If _SetFocusedSplitChild(i) == .f. _SetActivationFocus(i) endif Endif ...

SergKis: Для gfilatov2002 В родном h_events.prg Edit Inplace не работает ! В измененном работает: [pre2] case WM_SETFOCUS ... For x := 1 To ControlCount If _HMG_aControlType [x] == 'HOTKEY' If _HMG_BeginWindowMDIActive // BK IF _HMG_aControlParentHandles[x] == hWnd // BK InitHotKey ( hWnd , _HMG_aControlPageMap [x] , _HMG_aControlValue [x] , _HMG_aControlIds [x] ) ENdif Else If _HMG_aControlParentHandles[x] == hWnd .Or. ( _HMG_BeginWindowMDIActive .And. _HMG_InplaceParentHandle == GetActiveMdiHandle() ) InitHotKey ( hWnd , _HMG_aControlPageMap [x] , _HMG_aControlValue [x] , _HMG_aControlIds [x] ) EndIf EndIf EndIf Next x ... [/pre2]

gfilatov2002: SergKis пишет: В измененном работает: Может, так будет сделать проще: [pre2]ююю For x := 1 To ControlCount If _HMG_aControlType [x] == 'HOTKEY' If _HMG_aControlParentHandles[x] == hWnd //.Or. ( _HMG_BeginWindowMDIActive .And. _HMG_InplaceParentHandle == GetActiveMdiHandle() ) InitHotKey ( hWnd , _HMG_aControlPageMap [x] , _HMG_aControlValue [x] , _HMG_aControlIds [x] ) EndIf EndIf Next x ... [/pre2]

SergKis: gfilatov2002 пишет:Может, так будет сделать проще: У меня это место так и было. И по форме записи ReleaseHotKey(...) форма: ReleaseHotKey ( 0 , _HMG_aControlIds [x] ) без учета hWnd, больше подходит (по моему пониманию hotkey). По поводу ActivateMdiWindow в VO ClassMate это выглядит так: [pre2] METHOD Dispatch(oEvent AS cEvent) AS LONGINT PASCAL CLASS cMDIChild LOCAL hFocusWnd AS PTR ~"ONLYEARLY+" IF oEvent:uMsg==WM_MDIACTIVATE RETURN SELF:OnMDIActivate(oEvent) ELSEIF oEvent:uMsg==WM_NCACTIVATE IF oEvent:wParam==0 .AND. !(hFocusWnd:=GetFocus())==NULL_PTR .AND. IsChild( SELF:hWnd, hFocusWnd) SELF:hLastFocusedControl:=hFocusWnd ENDIF ENDIF RETURN SUPER:Dispatch(oEvent) ~"ONLYEARLY-" METHOD OnMDIActivate(oEvent AS cEvent) AS LONGINT PASCAL CLASS cMDIChild /* This event handler is called in response to a WM_MDIACTIVATE message. This event occurs when a MDI child window is deactivated and again when a MDI child window is activated. PARAMETERS: oEvent - A cEvent object that provides additional information about the event. Within the context of this event, the cEvent export variables have the following meaning: PTR(_cast,oEvent:wParam) - Handle to the MDI child window being deactivated. PTR(_cast,oEvent:lParam) - Handle to the MDI child window being activated. RETURN VALUES: If an application processes this message, it should return zero. REMARKS: This event handler is used internally by the cMDIChild class. If an application overrides this event, it is highly recommended that the event be passed to the super class: super:OnMDIActivate(oEvent) See the WIN32 API help for more information on the WM_MDIACTIVATE message. */ LOCAL oShell AS cMDIShell LOCAL hWndClient AS PTR LOCAL oMenu AS cMenu LOCAL oLastWin AS cWindow LOCAL oTB AS cToolbar ~"ONLYEARLY+" oShell := OBJECT(_CAST, SELF:oParent) hWndClient := oShell:Handle(4) // if we are being activated IF PTR(_CAST,oEvent:lParam)==SELF:hWnd // get the menu we will be using. If we don't have one, use our parent's IF (oMenu:=SELF:oMenu)==NULL_OBJECT oMenu := oShell:Menu ENDIF // there is no menu anywhere IF oMenu==NULL_OBJECT SendMessage(hWndClient,WM_MDISETMENU,0,0) SendMessage(hWndClient,WM_MDIREFRESHMENU,0,0) // we have a menu ELSE SendMessage(hWndClient,WM_MDISETMENU,DWORD(_CAST,oMenu:hMenu),LONGINT(_CAST,oMenu:hWindowMenu)) SendMessage(hWndClient,WM_MDIREFRESHMENU,0,0) ENDIF // get the window that is deactivating... IF (oLastWin:=WindowObjectFromHandle(PTR(_CAST,oEvent:wParam)))==NULL_OBJECT // if there is no window deactivating, default to the shell window oLastWin:=oShell ENDIF // if we don't have a toolbar... IF SELF:oToolbar==NULL_OBJECT // try to show the shell toolbar IF !(oTB:=oShell:Toolbar)==NULL_OBJECT oTB:Show(SW_NORMAL) ENDIF // hide the currently displayed toolbar IF !oLastWin==oShell .and. !(oTB:=oLastWin:Toolbar)==NULL_OBJECT oTB:Hide() ENDIF // we do have a toolbar...show it ELSE SELF:oToolbar:Show(SW_NORMAL) // hide the toolbar from the deactivating window IF !(oTB:=oLastWin:Toolbar)==NULL_OBJECT .and. oTB:IsVisible() oTB:Hide() ENDIF ENDIF // if we do not currently have an inplace active object... IF SELF:oIOleInPlaceActiveObject==NULL_OBJECT oShell:DrawMenuBar() oShell:AlignControls() ELSE SELF:oIOleInPlaceActiveObject:OnDocWindowActivate(TRUE) ENDIF // we are being deactivated ELSEIF PTR(_CAST,oEvent:wParam)==SELF:hWnd // if we have an inplace active object IF !SELF:oIOLEInplaceActiveObject==NULL_OBJECT SELF:oIOLEInplaceActiveObject:OnDocWindowActivate(FALSE) oShell:OnIOleInPlaceUIWindow_SetBorderSpace(NULL_PTR) ENDIF // no one else is being activated IF oEvent:lParam==0 oMenu:=oShell:Menu // no menu IF oMenu==NULL_OBJECT SendMessage(hWndClient,WM_MDISETMENU,0,0) SendMessage(hWndClient,WM_MDIREFRESHMENU,0,0) // there is a menu ELSE SendMessage(hWndClient,WM_MDISETMENU,DWORD(_CAST,oMenu:hMenu),LONGINT(_CAST,oMenu:hWindowMenu)) SendMessage(hWndClient,WM_MDIREFRESHMENU,0,0) ENDIF IF !(oTB:=oShell:Toolbar)==NULL_OBJECT oTB:Show(SW_NORMAL) ENDIF IF !SELF:oToolBar==NULL_OBJECT SELF:oToolBar:Hide() ENDIF // refresh and repaint the menu oShell:DrawMenuBar() // this is required because AlignControls won't work here because we are still the current MDI child oShell:PostMessage(WM_SIZE,0,0) ENDIF ENDIF RETURN SELF:_Default(oEvent) ~"ONLYEARLY-" [/pre2] Обрабатывается еще WM_NCACTIVATE .

Петр: SergKis пишет: У меня это место так и было. Где? SergKis пишет: case WM_SETFOCUS ... For x := 1 To ControlCount If _HMG_aControlType [x] == 'HOTKEY' If _HMG_BeginWindowMDIActive // BK IF _HMG_aControlParentHandles[x] == hWnd // BK InitHotKey ( hWnd , _HMG_aControlPageMap [x] , _HMG_aControlValue [x] , _HMG_aControlIds [x] ) ENdif Else If _HMG_aControlParentHandles[x] == hWnd .Or. ( _HMG_BeginWindowMDIActive .And. _HMG_InplaceParentHandle == GetActiveMdiHandle() ) InitHotKey ( hWnd , _HMG_aControlPageMap [x] , _HMG_aControlValue [x] , _HMG_aControlIds [x] ) EndIf EndIf EndIf Next x жесть вообще

SergKis: Петр пишет: Где? ... жесть вообще Думаю это не ко мне. В посте от 25.04.2012 14:31 это было. Григорий написал: Изменения в файлах h_hotkey.prg и h_windows.prg принимаются, а вот то, что предложено для h_events.prg, я отверг Отрывок повторяю. [pre2] h_events.prg ============ ... case WM_SETFOCUS *********************************************************************** ... For x := 1 To ControlCount //JP MDI HotKey If _HMG_aControlType [x] == 'HOTKEY' If .Not. _HMG_BeginWindowMDIActive ReleaseHotKey ( 0 , _HMG_aControlIds [x] ) // BK 22-Apr-2012 ElseIf _HMG_aControlParentHandles [x] == hWnd .Or. ; _HMG_InplaceParentHandle <> 0 // BK 22-Apr-2012 ReleaseHotKey ( 0 , _HMG_aControlIds [x] ) // BK 22-Apr-2012 Endif EndIf //End Next x !!! For x := 1 To ControlCount !!! If _HMG_aControlType [x] == 'HOTKEY' !!! If _HMG_aControlParentHandles[x] == hWnd // BK 22-Apr-2012 !!! InitHotKey ( hWnd , _HMG_aControlPageMap [x] , _HMG_aControlValue [x] , _HMG_aControlIds [x] ) !!! EndIf !!! EndIf !!! Next x ... [/pre2] Думаю с Григорием мы друг друга поняли. А текст от Сегодня 12:08 В родном h_events.prg ... Специально оставил родной текст и минимальные изменения, чтобы обозначить ситуацию.

Петр: Я объясню, почему жесть [pre2] If _HMG_BeginWindowMDIActive // --------- вот здесь _HMG_BeginWindowMDIActive == .T., правильно? IF _HMG_aControlParentHandles[x] == hWnd // BK InitHotKey ( hWnd , _HMG_aControlPageMap [x] , _HMG_aControlValue [x] , _HMG_aControlIds [x] ) ENdif Else // ------------------------------------------------------- здесь _HMG_BeginWindowMDIActive == .F. If _HMG_aControlParentHandles[x] == hWnd .Or. ( _HMG_BeginWindowMDIActive .And. _HMG_InplaceParentHandle == GetActiveMdiHandle() ) InitHotKey ( hWnd , _HMG_aControlPageMap [x] , _HMG_aControlValue [x] , _HMG_aControlIds [x] ) EndIf EndIf [/pre2] Т.е. вся перечеркнутая конструкция имеет смысл, если ( _HMG_aControlParentHandles[x] == hWnd ) == .T. а раз так, то все описанное выше можно воспроизвести как IF _HMG_aControlParentHandles[x] == hWnd InitHotKey ( hWnd , _HMG_aControlPageMap [x] , _HMG_aControlValue [x] , _HMG_aControlIds [x] ) ENDIF

SergKis: Петр пишет: ... вся перечеркнутая конструкция ... Это родной текст MiniGui. Я для MDI ветку направил к себе, оставив без изменения родное, т.е. другие запуски пойдут к себе, как и было.

Петр: Дело не в том, что вы сделали, а как сделали, вот и Григорий несколько был озадачен. Посмотрите, что он вас спросил - зачем так усложнять?

SergKis: Петр пишет:зачем так усложнять? Я не усложнял (и текст не был предложением для проекта), а показал, что с частично принятыми изменениями по MDI не все работает. Код, написанный Григорием, исправляет ситуацию, т.е. мы поняли друг друга. А в каком виде он внесет предложения в проект это решать только Григорию: взять как есть, подправить под концепцию MiniGUI, принять как идею или отбросить как бред. Вас Петр понимаю, увидев такое ... не вынесла душа поэта ...

Петр: Andrey пишет: Не работает пример из MiniGUI\SAMPLES\Advanced\Downloader Работает, и следующий раз, пожалуйста, пишите в правильной ветке, которую, к тому же, сами и создали - примеры, ошибки и т.д.

gfilatov2002: АНОНС * АНОНС * АНОНС * АНОНС * АНОНС Завершена подготовка к опубликованию новой версии 2.1.1, которая выйдет послезавтра. Кратко, что нового: - исправление обнаруженных ошибок в реализации MDI - благодарю за содействие SergKis ; - переработана внутренняя Си-функция loadolepicture() - благодарю за содействие Петра ; - переработаны внутренние функции управления шрифтами - благодарю за содействие Петра ; - добавлено автоматическое автоопределение и установка кодовой страницы пользователя при старте программы; - добавлена возможность изменить шрифт в команде DRAW GRAPH по запросу пользователей; - обновлена UNICODE-сборка Харбора до версии 3.2.0dev, а также библиотека HbPrinter; - пересобрана HMGS-IDE с текущей версией библиотеки; - добавлены новые и обновлены старые примеры. Спасибо за внимание!

SergKis: Для gfilatov2002. Мелочь, но в некоторых случаях удобно (перенести в MDI тестовый пример) [pre2] h_windowsMDI.prg ================ ... Function _DefineChildMDIWindow (..) ... ChildIndex := _HMG_ActiveMDIChildIndex + 1 // BK 10-Май-2012 IF AScan( _HMG_aFormNames, FormName ) > 0 FormName += '_'+alltrim(str(ChildIndex)) IF ChildIndex > 1 ChildIndex -= 1 ENDIF ENDIF // BK End i := ascan ( _HMG_aFormType , 'A' ) ... [/pre2]

SergKis: Для gfilatov2002. Виноват накрокозябил. Отвлекли. [pre2] h_windowsMDI.prg ================ ... Function _DefineChildMDIWindow (..) ... ChildIndex := _HMG_ActiveMDIChildIndex + 1 // BK 10-Май-2012 IF AScan( _HMG_aFormNames, FormName ) > 0 FormName += '_'+alltrim(str(ChildIndex)) ELSEIF ChildIndex > 1 ChildIndex -= 1 ENDIF // BK End i := ascan ( _HMG_aFormType , 'A' ) ... [/pre2]

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

gfilatov2002: АНОНС * АНОНС * АНОНС * АНОНС * АНОНС Завершена подготовка к опубликованию новой версии 2.1.2, которая выйдет завтра. Кратко, что нового: - исправление обнаруженных ошибок в реализации MDI ; - устранена утечка памяти во внутренней Си-функции TextDraw() ; - добавлен класс BREAKMENU [ SEPARATOR ] для пунктов меню ; - добавлен класс FONT для POPUP меню ; - важные исправления в библиотеке TSBrowse ; - обновлена UNICODE-сборка Харбора до версии 3.2.0dev, а также библиотека HbZipArc ; - пересобрана HMGS-IDE с текущей версией библиотеки; - добавлены новые и обновлены старые примеры (как обычно ). Благодарю за внимание! P.S. Эта сборка, сделанная украино-польской командой, посвящается, естественно, Евро 2012 (и выходит в День России )!

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

Andrey: Петр пишет: осталось только по просьбе Андрея Верченко вывод PNG для систем поддерживающих gdiplus (XP и выше) прикрутить. Это с соседней ветки форума. В новой сборке есть такой пример ? И как папка называется ?

alex_II: При переходе на релиз 2.1.2 получил: Error: Unresolved external '_HB_FUN_HB_REGEXMATCH' referenced from E:\SOU.MAY\XMATE\ZARAC3V\OBJ\ZARAC.OBJ

gfilatov2002: alex_II пишет: Error: Unresolved external '_HB_FUN_HB_REGEXMATCH' Посмотри в файле Changelog Харбора: * HB_REGEXMATCH() marked as HB_LEGACY_LEVEL4. (this leaves quite some headstart to change it) * include/hbextern.ch - Deleted HB_REGEXMATCH(). Users are recommended to use HB_REGEXHAS() and HB_REGEXLIKE() functions as unambiguous alternatives, which work equally well on all Harbour versions. HB_REGEXMATCH() is now deprecated

alex_II: Спасибо Григорий! Всё заработало

alex_II: Григорий! Можно сделать, чтобы семейство MSG-функций учитывало установку: SET CENTERWINDOW RELATIVE PARENT?

gfilatov2002: alex_II пишет: Можно сделать, чтобы семейство MSG-функций учитывало установку Нет, поскольку в семействе Msg* используются общесистемные функции. Но эта установка будет работать, если Вы замените эти системные функции своими аналогичными пользовательскими функциями по типу того, как это сделано в примере из папки samples\Basic\MsgEdit

alex_II: Спасибо за информацию, буду пробовать

gfilatov2002: АНОНС * АНОНС * АНОНС * АНОНС * АНОНС Завершается подготовка к опубликованию новой версии 2.1.3, которая выйдет на следующей неделе. Кратко, что нового: - добавлены файлы заголовков hmg.ch и i_hmgcompat.ch для совместимости с .FMG от IDE официального релиза; - в элементе управления Tab добавлен параметр с номером страницы в кодовый блок события On Change; - важные исправления в библиотеке TSBrowse ; - обновлена UNICODE-сборка Харбора до версии 3.2.0dev, а также библиотеки HBPrinter и PropGrid ; - пересобрана HMGS-IDE с текущей версией библиотеки; - добавлены новые и обновлены старые примеры (как обычно ). Благодарю за внимание!

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

i3t4j6: krutoff пишет: ... после ввода новых записей при заполнении окна TSBROWSE - ввода последней записи внизу окна - происходит очищение всего окна и даже тек. запись не показывает - остается только текущая ячейка. Я раньше на это не обратил внимание, принял к сведению. А после версии 2.1.2 попробовал добавить запись - и у меня такая беда - только текущая ячейка. Это все можно наблюдать на примере Sample2 - только запись добавляется не стрелкой "вниз", а после прохождения Enter по полям последней записи

Andrey: Установил новую версию. Пример \MiniGUI\SAMPLES\Applications\WBT - не работает. Date: 07/10/12 Time: 21:53:46 Error BASE/1132 Bound error: array access Called from OWNTABPAINT(813) Called from EVENTS(116) Called from UPDATEWINDOW(0) Called from EVENTS(618) Called from SHOWWINDOW(0) Called from _ACTIVATEWINDOW(1215) Called from MAIN(103) Тестировал на Windows XP SP3

gfilatov2002: Andrey пишет: Пример \MiniGUI\SAMPLES\Applications\WBT - не работает. Спасибо за сообщение об ошибке! Исправленный вариант этой сборки выложил по адресу http://minigui.mylivepage.ru/file/?fileid=8709 Благодарю за внимание!

Dr. Oldwarez: i3t4j6 пишет: krutoff пишет: цитата: ... после ввода новых записей при заполнении окна TSBROWSE - ввода последней записи внизу окна - происходит очищение всего окна и даже тек. запись не показывает - остается только текущая ячейка. Я раньше на это не обратил внимание, принял к сведению. А после версии 2.1.2 попробовал добавить запись - и у меня такая беда - только текущая ячейка. Это все можно наблюдать на примере Sample2 - только запись добавляется не стрелкой "вниз", а после прохождения Enter по полям последней записи И у меня такая же проблема, причём и в этой версии не исправлена. Остаюсь на 2.11

gfilatov2002: i3t4j6 пишет: Я раньше на это не обратил внимание, принял к сведению. А после версии 2.1.2 попробовал добавить запись - и у меня такая беда - только текущая ячейка. Это все можно наблюдать на примере Sample2 - только запись добавляется не стрелкой "вниз", а после прохождения Enter по полям последней записи Эта беда лечится добавлением вызова функции SysRefresh() в конце метода GoNext() [pre2] // ============================================================================ // METHOD TSBrowse:GoNext() Version 9.0 Nov/30/2009 // Post-edition cursor movement. Cursor goes to next editable cell, right // or first-down according to the position of the last edited cell. // This method is activated when the MOVE clause of ADD COLUMN command is // set to 5 ( DT_MOVE_NEXT ) // ============================================================================ METHOD GoNext() CLASS TSBrowse Local nEle, ; nFirst := 0 ... ::nOldCell := ::nCell ::lHitBottom := ( ::nAt == ::nLen ) //V90 If ::lHitBottom // добавлено SysRefresh() // здесь EndIf ::GoDown() Return Self [/pre2]

krutoff: По состоянию на 11.07.2012 в h_tbrowse.prg Закомментировал строчку 4049 //# _HMG_InteractiveCloseStarted := .F. и проблема вроде бы исправлена( пока исправлена...) Пожалуйста, проверьте и мой вариант. (Григорий, Ваш вариант у меня не прошёл...)

gfilatov2002: krutoff пишет: проверьте и мой вариант У меня этот вариант не работает (и не должен ), но если Вам помогает, то - в добрый час!

i3t4j6: gfilatov2002 пишет: Эта беда лечится добавлением вызова функции SysRefresh() в конце метода GoNext() Это сработало, но только при добавлении одной записи. Дальше вообще идет сбой и ничего не хочет вводится !!! krutoff пишет: Закомментировал строчку 4049 //# _HMG_InteractiveCloseStarted := .F. Этот вариант у меня пошел и все заработало как и прежде. Спасибо огромное !!!

gfilatov2002: i3t4j6 пишет: Этот вариант у меня пошел и все заработало как и прежде Благодарю за отклик! Разобрался в этой проблеме и поправил код для новой сборки

Andrey: Собирал программу на MiniGUI EE 2.1.0 - 2012.04.25 Система WinXP Prof SP3 При переходе на новую: 2.1.3 - 2012.07.10 сборка задачи проходит нормально. Однако при запуске задачи стал получать ошибку: Date: 07/14/12 Time: 18:16:47 Error BASE/1302 Argument error: HB_SETCODEPAGE Called from HB_SETCODEPAGE(0) Called from MAIN(119) Мой код: 118: REQUEST HB_CODEPAGE_RU1251 119: HB_SetCodePage( "1251" ) - Что тут неправильно ? 120: REQUEST HB_LANG_RUWIN 121: HB_LangSelect( "RU1251" )

Dima: Andrey пишет: "1251" может так RU1251

Andrey: Dima пишет: может так RU1251 Да, прошло нормально. Теперь на другом вылетает: HB_LangSelect( "RU1251" ) ? Может и не нужен этот оператор ? Взял за комментировал его. Дальше хуже пошло... Date: 14.07.2012 Time: 18:41:22 Error BASE/1132 Переполнение массива: Неверное количество аргументов Called from OWNTABPAINT(813) Called from EVENTS(116) Called from UPDATEWINDOW(0) Called from EVENTS(618) Called from MESSAGEBOXINDIRECT(0) Called from _MSGBOX(215) Called from MSGSTOP(172) Called from SHOWERROR(181) Called from DEFERROR(125) Called from (b)ERRORSYS(58) Called from OWNTABPAINT(813) Called from EVENTS(116) Called from UPDATEWINDOW(0) Called from EVENTS(618) Called from SHOWWINDOW(0) Called from _SHOWWINDOW(2179) Called from DOMETHOD(4667) Called from CHOICE_THEMS(1325) Called from MAIN(579) 1325: Form_1.Show() DOMETHOD(4667) - не нашел ! Полтергейст. Откатил версию назад, все работает ! Что в НОВОЙ ВЕРСИИ нового ???

Dima: Andrey пишет: HB_LangSelect( "RU1251" ) RUWIN видимо. А вообще смотри файлик hblang.hbx

Andrey: Dima пишет: RUWIN видимо. Да не в этом дело. Почему в предыдущих версиях работало, а сейчас нет ? И хуже всего, что дальше не работает. Ошибка идет не из-за языка ! Date: 14.07.2012 Time: 18:41:22 Error BASE/1132 Переполнение массива: Неверное количество аргументов Called from OWNTABPAINT(813) Called from EVENTS(116) Called from UPDATEWINDOW(0) Called from EVENTS(618) Called from MESSAGEBOXINDIRECT(0) Called from _MSGBOX(215) Called from MSGSTOP(172) Called from SHOWERROR(181) Called from DEFERROR(125) Called from (b)ERRORSYS(58) Called from OWNTABPAINT(813) Called from EVENTS(116) Called from UPDATEWINDOW(0) Called from EVENTS(618) Called from SHOWWINDOW(0) Called from _SHOWWINDOW(2179) Called from DOMETHOD(4667) Called from CHOICE_THEMS(1325) Called from MAIN(579) 1325: Form_1.Show() DOMETHOD(4667) - не нашел ! Полтергейст. Откатил версию назад, все работает ! Что в НОВОЙ ВЕРСИИ нового ???

Dima: Andrey пишет: DOMETHOD В сырцах h_controlmisc.prg

gfilatov2002: Andrey пишет: Почему в предыдущих версиях работало, а сейчас нет ? Потому что Пржемек добавил следуюшую проверку в Харбор: 2012-06-14 00:55 UTC+0200 Przemyslaw Czerpak (druzus/at/poczta.onet.pl) * harbour/include/hbset.h * harbour/src/vm/set.c % removed HB_SET_OSCODEPAGE % replaced HB_SET_DBCODEPAGE with hb_set_dbcp * generate RTE when wrong parameter type (not string or NIL) is passed to HB_SET_LANGUAGE, HB_SET_CODEPAGE, HB_SET_OSCODEPAGE, HB_SET_DBCODEPAGE Andrey пишет: И хуже всего, что дальше не работает. Рекомендую скачать обновленную версию этой сборки, в которой эта ошибка исправлена, по адресу: http://minigui.mylivepage.ru/file/?fileid=8709

Andrey: gfilatov2002 пишет: Рекомендую скачать обновленную версию этой сборки, в которой эта ошибка исправлена Спасибо, заработало на этой сборке. Единственно выдает ошибку на HB_LangSelect( "RU1251" ) Как сейчас надо определять в программе кодовую страницу и язык для "RU1251" ?

gfilatov2002: Andrey пишет: Как сейчас надо определять в программе кодовую страницу и язык для "RU1251" ? SET LANGUAGE TO RUSSIAN // язык SET CODEPAGE TO RUSSIAN // кодовая страница

Vlad04: А OEM (866) ?

PSP: Vlad04 пишет: А OEM (866) ? В GUI?

Vlad04: Не понял удивления. да. Речь идет о таблицах. Развитие консольной программы

PSP: Понятно. Я думал про интерфейс.

alex_II: Хотя проблема и преодолена при обсуждении в теме LetoDB, сообщаю её для информации и тут Суть: В одном из дочерних окон открываю в TSBrowse таблицу с CDX-индексом. В индексе 4 тега, между которыми могу переключаться и TSBrowse все прекрасно показывает, но стоит окну с таблицей потерять фокус то при возвращении обратно вне зависимости от того какой тег был активным всегда устанавливается активным ПЕРВЫЙ по порядку тег. Решаеться помещением в событие ON GOTFOCUS TSBrowse строки вида: oB:bTagOrder := {|| ordNumber()}

Pasha: alex_II пишет: oB:bTagOrder := {|| ordNumber()} Я смотрю, этот блок кода принимает параметр. Так что лучше задать его немного по-другому: oB:bTagOrder := {|n| if(n==nil, ordNumber(), ordSetFocus(n))}

i3t4j6: gfilatov2002 пишет: Благодарю за отклик! Разобрался в этой проблеме и поправил код для новой сборки Возникла еще одна проблема - выскочила ошибка </BODY></HTML><p class="updated">Date: 25.07.2012 Time: 12:31:40<BR> Error BASE/1132 Переповнення масиву: Помилкова кiлькiсть аргументiв</p><BR> Called from OWNTABPAINT(813) <BR> Called from EVENTS(116) <BR> Called from UPDATEWINDOW(0) <BR> Called from EVENTS(618) <BR> Called from SHOWWINDOW(0) <BR> Called from _ACTIVATEWINDOW(1292) <BR> Called from INF_OB(1905) <BR> Called from (b)MAIN(385) <BR> Called from _DOCONTROLEVENTPROCEDURE(1585) <BR> Called from EVENTS(1365) <BR> Called from _DOMESSAGELOOP(0) <BR> Called from _ACTIVATEWINDOW(1312) <BR> Called from MAIN(853) <BR> <HR> Я сравнил версии 2.13 и 2.12 - в файле h_tab.prg появилась строчка 783: nItemId := Min( ++nItemId, Len( _HMG_aControlPicture ) ) и соответствующие изменения для переменной nItemId .

gfilatov2002: i3t4j6 Могу повторить то, что уже писал выше: Рекомендую скачать обновленную версию этой сборки, в которой эта ошибка исправлена, по адресу: http://minigui.mylivepage.ru/file/?fileid=8709

gfilatov2002: АНОНС * АНОНС * АНОНС * АНОНС * АНОНС Завершается подготовка к опубликованию новой версии 2.1.4, которая выйдет на следующей неделе. Кратко, что нового: - исправлена проблема с утечкой памяти при закрытии модальной формы; - изменено определение установленого для программы языка в ядре библиотеки из-за переработанного языкового кода в Харборе; - важные исправления в библиотеке TSBrowse и HBPrinter; - обновлена UNICODE-сборка Харбора версии 3.2.0dev; - пересобрана HMGS-IDE с текущей версией библиотеки; - добавлены новые интересные примеры. Благодарю за внимание!

Andrey: gfilatov2002 пишет: - добавлены новые интересные примеры. Список отдельно по папкам написать можно ? А то опять все примеры смотреть долго.

gfilatov2002: Andrey пишет: Список отдельно по папкам Да, конечно [pre2] * New: 'MOUSEDRAG event' sample. Contributed by Andrey Sermyagin <super@freemail.hu> (see in folder \samples\Basic\ON_MOUSEDRAG) * New: 'MsSql Database Driver' sample. Contributed by Alen Uzelac <alen@bbm.hr> (see in folder \samples\Advanced\MSSQL) * New: 'SuperChef Pizzaria System' sample. Contributed by Marcelo Neves <msdn_001@yahoo.com.br> (see in folder \samples\Applications\Super) [/pre2]

gfilatov2002: Новый релиз библиотеки для компилятора BCC выложил, как и обещал, по адресу: http://minigui.mylivepage.ru/file/?fileid=8710 а также, как обычно, на сервере http://hmgextended.com по адресу: http://hmgextended.com/files/CONTRIB/hmg-2.1.4-setup.zip Также доступна облегченная сборка для компилятора MinGW по адресу: http://hmgextended.com/files/CONTRIB/hmg214-mingw.zip Ваши комментарии, как всегда, приветствуются...

Andrey: Примеры классные. Нашел вот тут ошибку случайно... Система WinXP Prof SP3

Vlad04: А у меня нормально , Система такая же - WinXP Prof SP3

alex_II: Прочитав про глюк при добавлении новых записей по "стрелка вниз" порадовался что я не использую этот механизм. Однако радость была недолгой, я пропустил похожий глюк, который появился как я выяснил с версии 2.1.1 и благополучно дожил до версии 2.1.4. Наблюдается при скроллинге вниз(колесом мыши или клавиатурой). Предпоследняя строка в окне начинает повторяться, обновляеться только последняя. При скроллинге вверх все ОК. Лечение нашел случайно копаясь в примерах с TSBrowse, я обнаружил что глюк появляеться только тогда, когда есть многострочные заголовки ADD COLUMN TO Br_ul ; HEADER 'Населеный'+CRLF+'пункт' ; DATA RTrim(f_np(ul->kod_np)) ; ALIGN DT_CENTER, DT_CENTER ; SIZE w_kod_np Если HEADER будет в одну строку - глюк исчезает, но это полумера. Копаясь дальше в примерах я наткнулся на строку: Brw_4:nHeightHead += 3 И хотя смысла увеличивать шапку таблици я не видел, взял и попробовал увеличить только на 1 и о чудо - всё заработало!!!

gfilatov2002: АНОНС * АНОНС * АНОНС * АНОНС * АНОНС Завершена подготовка к опубликованию новой версии 2.1.5, которая выйдет завтра. Кратко, что нового: - исправление обнаруженных ошибок/опечаток в коде ; - добавлена обработка события NotifyBalloonClick для иконки в трее ; - изменен порядок вызова кодового блока для события ON PAINT, что может приводить к несовместимости со старым кодом. Поэтому для решения вероятных проблем оставлена возможность использования этого события по-старому - просто в начале программы надо добавить вызов команды SET PROGRAMMATICCHANGE OFF, и тогда все будет работать, как и раньше ; - обновлена UNICODE-сборка Харбора версии 3.2.0dev, а также библиотека MiniPrint для совместимости с изменением в обработке события On Paint; - добавлены новые и обновлены старые примеры (как обычно ). Благодарю за внимание!

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

Andrey: gfilatov2002 пишет: овый релиз библиотеки выложил Спасибо за релиз ! Будем тестировать....

alex_II: gfilatov2002 пишет: Новый релиз Переход прошел нормально, всё работает! Нужна Ваша помощь, Григорий Давным-давно, когда текущий релиз был где-то 79-80, написал следующую программу: на главной форме имеется объект TSBrowse который настроен на работу с массивом. После старта приложения можно было выбрать требуемый dbf-файл и TSBrowse перенастраивался на работу уже с файлами. Некоторое время назад возникла необходимость кое-что изменить в программе и я попытался собрать её на последнем релизе, но обнаружил что мой код больше не работает. Отсюда вопрос: можно ли теперь динамически перенастраивать работу с массива на файл и обратно?

Vladimir: Пересобирал MiniGUI, по библиотеке TSBrowse получил несколько предупреждений: h_tbrowse.prg(13425) Warning W0034 STATIC Function 'BRWGOTO' defined but never used h_tbrowse.prg(13425) Warning W0034 STATIC Function 'FIELDSETGETBLOCK' defined but never used h_tbrowse.prg(13425) Warning W0034 STATIC Function 'GENDATA' defined but never used h_tbrowse.prg(13425) Warning W0034 STATIC Function 'GENFOOT' defined but never used h_tbrowse.prg(13425) Warning W0034 STATIC Function 'GENHEAD' defined but never used Для исправления функцию BrwGoto() следует поместить внутрь условия компиляции #ifdef _TSBFILTER7_ #endif, а функции FiedlSetGetBlock(), GenData(), GenFoot(), GenHead() закомментировать или вообще удалить. Похоже, они остались бесхозными от предыдущих изменений. И ещё попался один какой-то мелкий глюк. Код примера взят из справки TSBrowse, добавлена строка сообщений, при перемещении по таблице в неё выводится значение из 1-й колонки. [pre] #include "minigui.ch" #include "tsbrowse.ch" Function SBArray() Local oDlg, bData, bcolor, bAlign, bDelete, aBmp[ 2 ], Arr1, ; nTot2, nTot3, oFont, nGood, nBad, nPreVal, aColor[ 2 ] Arr1 := {} Private oLbx AADD( Arr1, {"Ena ", 100, 200} ) AADD( Arr1, {"Dyo ", 125, 200} ) AADD( Arr1, {"Dekaepta ", 100, 300} ) AADD( Arr1, {"Dekaokto ", 100, 200} ) nTot2 := nTot3 := nGood := nBad := nPreVal := 0 // footers values at start AEval( Arr1, { | e | nTot2 += e[ 2 ], nTot3 += e[ 3 ], ; If( ( e[ 2 ] + e[ 3 ] ) < 325, ++nGood, ++nBad ) } ) aBmp:= { LoadIcon( "Level1.bmp" ), ; LoadIcon( "Level2.bmp" )} DEFINE WINDOW Form_3 ; AT 100,50 ; WIDTH 500 HEIGHT 400 ; TITLE "MiniGUI TsBrowse ( Browsing an array ) " ; FONT "MS Sans Serif" SIZE 8 ; MAIN @ 320, 20 Label Label_1 Value "" Width 100 Define Statusbar StatusItem "" End statusbar DEFINE TBROWSE oLbx AT 10,15 ; OF Form_3 WIDTH 470 HEIGHT 290 CELLED; COLORS {CLR_BLACK, CLR_CYAN} ; On Change Show( oLbx ) oLbx:SetArray( Arr1 ) // this is necessary to work with arrays // let's define the block for background color bColor := { || If( oLbx:nAt % 2 == 0, CLR_YELLOW, CLR_CYAN ) } ADD COLUMN TO TBROWSE oLbx DATA ARRAY ELEMENT 1; TITLE "Col 1" ; SIZE 120 EDITABLE; // this column is editable COLORS CLR_BLACK, bColor; // background color from a Code Block 3DLOOK TRUE, TRUE, TRUE; // cells, titles, footers MOVE DT_MOVE_NEXT; // cursor goes to next editable column VALID { | uVar | ! Empty( uVar ) }; // don't want empty rows ALIGN DT_LEFT, DT_CENTER, DT_RIGHT; // cells, title, footer FOOTER "Totals->" ADD COLUMN TO TBROWSE oLbx DATA ARRAY ELEMENT 2; TITLE "Col 2" ; ALIGN DT_RIGHT, DT_CENTER; // let's align cells to right and center title SIZE 80 EDITABLE; // this column is editable COLORS CLR_BLACK, bColor; // background color from a Code Block 3DLOOK TRUE, TRUE, TRUE; // cells, titles, footers MOVE DT_MOVE_NEXT; // cursor goes to next editable column FOOTER { || Transform( nTot2, "##,###" ) }; // must be a code block PREEDIT { | uVar | nPreVal := uVar }; // updating footer value POSTEDIT { | uVar | nTot2 += ( uVar - nPreval ), ; If( Eval( oLbx:aColumns[ 4 ]:bData ) < 325, ; If( oLbx:lChanged, ( ++nGood, --nBad ), Nil ), ; If( oLbx:lChanged, ( ++nBad, --nGood ), Nil ) ), ; oLbx:DrawFooters() } ADD COLUMN TO TBROWSE oLbx DATA ARRAY ELEMENT 3; TITLE "Col 3" ; ALIGN DT_RIGHT, DT_CENTER; // let's align cells to right and center title SIZE 80 EDITABLE; // this column is editable COLORS CLR_BLACK, bColor; // background color from a Code Block 3DLOOK TRUE, TRUE, TRUE; // cells, titles, footers MOVE DT_MOVE_NEXT; // cursor goes to next editable column FOOTER { || Transform( nTot3, "##,###" ) }; // must be a code block PREEDIT { | uVar | nPreVal := uVar }; // updating footer value POSTEDIT { | uVar | nTot3 += ( uVar - nPreval ), ; If( Eval( oLbx:aColumns[ 4 ]:bData ) < 325, ; If( oLbx:lChanged, ( ++nGood, --nBad ), Nil ), ; If( oLbx:lChanged, ( ++nBad, --nGood ), Nil ) ), ; oLbx:DrawFooters() } // next column is not part of the array, then bData must be defined apart bData := { || If( ! oLbx:lAppendMode, ; oLbx:aArray[ oLbx:nAt, 2 ] + ; oLbx:aArray[ oLbx:nAt, 3 ], 0 ) } // dynamic setting of background color for next column depending on cell's value bColor := { || If( Eval( oLbx:aColumns[ 4 ]:bData ) < 325, CLR_RED, CLR_CYAN ) } ADD COLUMN TO TBROWSE oLbx DATA bData; TITLE "Col 4" ; ALIGN DT_RIGHT, DT_CENTER; // let's align cells to right and center title SIZE 80; // this column is NOT editable COLORS CLR_WHITE, bColor; // background color from a Code Block 3DLOOK TRUE, TRUE, TRUE; // cells, titles, footers FOOTER { || Transform( nTot2 + nTot3, "##,###" ) } // with next column let's try BitMaps on cells with dynamic alignment bData := { || If( Eval( oLbx:aColumns[ 4 ]:bData ) < 325, ; aBmp[ 1 ], aBmp[ 2 ] ) } // new V.7.0 merging data and bitmaps at specific cell position // a value greater than 4 in HiWord, means specific pixel location from column left bAlign := { || nMakeLong( DT_LEFT, ; // LoWord = data alignment If( Eval( oLbx:aColumns[ 4 ]:bData ) < 325, ; 10, 50 ) ) } // HiWord = bitmap alignment ADD COLUMN TO TBROWSE oLbx DATA bData ; BITMAP; // tells TSBrowse that data is a BitMap TITLE "Result" + CRLF + "Good Bad"; // Multi-Line heading ALIGN bAlign, DT_CENTER, DT_CENTER; // cell, title, footer SIZE 71; // this column is NOT editable 3DLOOK TRUE, TRUE, TRUE; // cells, titles, footers FOOTER { || Str( nGood, 4 ) + " Good" + CRLF + ; Str( nBad, 4 ) + " Bad" } // Multi-Line footer // activating Auto Append Mode oLbx:SetAppendMode( .T. ) // activating Auto Delete Mode // I'll use bDelete code block to update footers bDelete := { | nAt, oBrw | nTot2 -= oBrw:aArray[ nAt, 2 ], ; nTot3 -= oBrw:aArray[ nAt, 3 ], ; If( ( oBrw:aArray[ nAt, 2 ] + ; oBrw:aArray[ nAt, 3 ] ) < 325, ; --nGood, --nBad ), oBrw:DrawFooters() } oLbx:SetDeleteMode( .T., .T., bDelete ) // ( lOnOff, lConfirm, bDelete ) // Assigning default values to new elements created with Auto Append. // For last column (5), I'm using a code block to update footers without // assigning any value to that column, since code block returns Nil oLbx:aDefault := { Nil, 50, 50, Nil, ; { || nTot2 += 50, nTot3 += 50, ++nGood, ; oLbx:DrawFooters(), Nil } } // using Super Titles ADD SUPER HEADER TO oLbx FROM COLUMN 2 TO COLUMN 3 ; TITLE "Col2 and Col 3" 3DLOOK // increasing cell and super header height oLbx:nHeightCell += 2 oLbx:nHeightSuper += 7 END TBROWSE END WINDOW ACTIVATE WINDOW Form_3 Return Nil Static Procedure Show Memvar oLbx Local cVal := oLbx:aArray[ oLbx:nAt , 1 ] Form_3.StatusBar.Item(1) := cVal Form_3.Label_1.Value := cVal Return [/pre] При перемещении по таблице клавишами всё нормально - значение в строке показывается, но если делать это мышкой - появляется и пропадает. Если мышиный курсор неподвижен, двигаться клавишами - нормально, стоит пошевелить мышку - пропадает. А вот дублирование вывода на метку не изменяется. С чем бы это связано ?

gfilatov2002: Vladimir пишет: Для исправления функцию BrwGoto() следует поместить внутрь условия компиляции #ifdef _TSBFILTER7_ #endif, а функции FiedlSetGetBlock(), GenData(), GenFoot(), GenHead() закомментировать или вообще удалить. Большое спасибо за сообщение! Уже поправил для следующей сборки Vladimir пишет: попался один какой-то мелкий глюк Да, это известная неприятность, связанная с обработкой сообщения WM_MOUSEMOVE, но пока не нашел для нее решения

Dr. Oldwarez: В BROWSE (не путать с TBROWSE) по умолчанию все поля, независимо от типа, выравниваются налево. Хотя принято текстовые поля выравнивать налево, а числовые - направо. Поэтому приходится выставлять выравнивание с помощью JUSTIFY {BROWSE_JTFY_LEFT, BROWSE_JTFY_CENTER,BROWSE_JTFY_RIGHT,...}ю Нельзя ли сделать, чтобы по умолчанию BROWSE выравнивало текстовые поля налево, а числовые, соответственно - направо?

gfilatov2002: АНОНС * АНОНС * АНОНС * АНОНС * АНОНС Завершается подготовка к опубликованию новой сборки версии 2.1.6, которая выйдет на следующей неделе. Кратко, что нового: - исправление обнаруженных ошибок/опечаток в коде, а также GDI-утечек; - выполнены изменения С-кода для совместимости со старыми версиями xHarbour; - обновлена UNICODE-сборка Харбора версии 3.2.0dev, а также библиотека TSBrowse при активном участии Чумаченко Владимира; - добавлены новые (HPDF Print) и обновлены старые примеры (как обычно ). Благодарю за внимание!

Andrey: gfilatov2002 пишет: обновлены старые примеры (как обычно ). А :\MiniGUI\SAMPLES\Advanced\WinVersion для новых ОС обновился ?

gfilatov2002: Andrey пишет: А :\MiniGUI\SAMPLES\Advanced\WinVersion для новых ОС обновился ? Да, уже сделал

Andrey: gfilatov2002 пишет: Да, уже сделал БОЛЬШОЕ спасибо !

Andrey: В marinas-ide есть возможность вывода PNG картинок. CREATE IMAGE Image_1 ROW 110 COL 120 WIDTH 300 HEIGHT 300 BACKCOLOR {155,0,0} ALIGN Qt_AlignCenter PICTURE "../resource/argentina_in_motorcycle.png" ONCLICK {|| mg_Log( "IMAGE Clicked !!!" )} А можно взять код оттуда и прикрутить показ PNG картинок в МиниГуи ?

gfilatov2002: Новый релиз библиотеки для компилятора BCC выложил, как и обещал, по адресу: http://hmgextended.com/files/CONTRIB/hmg-2.1.6-setup.zip Также доступна облегченная сборка для компилятора MinGW по адресу: http://hmgextended.com/files/CONTRIB/hmg216-mingw.zip и облегченная сборка для компилятора xHarbour 1.2.3 (rev.7933) на английском форуме minigui в папке CONTRIB

gustow: Спасибо, Григорий! Будем посмотреть :)

gfilatov2002: gustow пишет: Будем посмотреть Дополнительно выложил документацию на текущую версию HMG HPDF по адресу: http://gfilatov.front.ru/HMG_HPDF_Doc.pdf Замечание: скачать можно по правому клику мыши



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