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

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

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

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

Dima: Andrey пишет: Выслал членский взнос на развитие библиотеки Координаты укажи. [pre2] https://www.youtube.com/watch?v=VVcSagzqa-g [/pre2]

gfilatov2002: Andrey пишет: Выслал членский взнос на развитие библиотеки Благодарю за поддержку Просто к сведению. Выпустил сегодня первую бету для следующей сборки. Кратко, что нового: - функции WinAPI, создающие визуальные эффекты, перенесены из примеров в ядро библиотеки. Соответственно, добавлены следующие команды: - SET WINDOW cFormName TRANSPARENT TO nAlphaBlend - SET WINDOW cFormName [ TRANSPARENT ] TO OPAQUE - SET WINDOW cFormName TRANSPARENT TO COLOR aColor - FLASH WINDOW cFormName CAPTION COUNT nTimes INTERVAL nMilliseconds - FLASH WINDOW cFormName TASKBAR COUNT nTimes INTERVAL nMilliseconds - FLASH WINDOW cFormName [ ALL ] COUNT nTimes INTERVAL nMilliseconds - ANIMATE WINDOW cFormName MODE nFlags INTERVAL nMilliseconds - ANIMATE WINDOW cFormName MODE nFlags - обновлена сборка Харбора: Пржемек добавил оптимизацию создания массивов, которая существенно уменьшает генерируемый код. - выполнена проверка работы библиотеки с компилятором MinGW свежей версии 4.9.2, который будет использован в следующей сборке вместо текущей версии 4.6.1; - добавлен пример простой телефонной книги с сортировкой по группе или по имени абонента; - обновлены два примера: Framework и утилита Sqlite browser Пока все

Softlog86: каким образом можно отблагодарить (в денежной форме) ?


gfilatov2002: Softlog86 пишет: каким образом можно отблагодарить Мои персональные данные (для перевода) есть у Андрея. Также принимаю пожертвования через систему PayPal на почтовый адрес: buran1985@gmail.com P.S. Курс гривны к доллару на черном рынке уже 20,50 Слов нет...

Andrey: Dima пишет: Координаты укажи. Не знаю как у вас, а у нас в России это (перевод) просто сделать. Идешь в любой салон сотовой связи "Связной", говоришь что нужно перевести деньги на Украину. Говоришь ФИО кому переводишь, отдаешь деньги и получаешь чек. Перевод идет через систему "Золотая Корона". Отправляешь смс-ку с кодом перевода из чека и получатель может получить деньги. Как и где получают, я не знаю, еще ни разу не получал...

marrinass: gfilatov2002 пишет: Мои персональные данные (для перевода) есть у Андрея. А зачем Андрею лишние телодвижения? Тут, что то не чисто - мужики ...

Softlog86: Да не ..... PayPal для меня проще ...... Лет пять уже всё покупаю через Ebay/Paypal .....

gfilatov2002: Просто к сведению. Выпустил RC 3 для следующей сборки. Финальный релиз запланирован через неделю, на день, когда Microsoft представит новую сборку Windows 10, которая станет «новой главой Windows 10».

gfilatov2002: Новый релиз библиотеки для компилятора BCC выложил, как и обещал, на официальном сайте библиотеки по адресу: http://hmgextended.com/files/CONTRIB/hmg-2.4.3-setup.zip Также доступна полная сборка для компилятора MinGW по адресу: http://hmgextended.com/files/CONTRIB/hmg243-mingw.exe и компактный архив для свежей версии компилятора xHarbour http://hmgextended.com/files/CONTRIB/xhmg243_xhb10087.zip Благодарю за внимание

Softlog86: Если можно вкратце - что новенького ? :)

Haz: gfilatov2002 пишет: Новый релиз библиотеки для компилятора BCC выложил, как и обещал, на официальном сайте библиотеки по адресу: Григорий , СПАСИБО ! Softlog86 пишет: Если можно вкратце - что новенького ? :) 2015/01/21: HMG Extended Edition 2.4.3 Published. * Fixed: Windows problem of overlap between ToolBar with 'Bottom' clause and StatusBar. This correction was moved to MiniGUI core from a sample (introduced in the build 2.3.6). * Modified: A default font size was changed to 9pt for WinVista or upper. It is Microsoft default value of Dialog font size for above systems. - New: Added C-function GetSystemFont() for accurately detect of the system default font name and font size. Added also the separate pseudo-functions GetDefaultFontName() and GetDefaultFontSize() for convenient access to these parameters. Note: This setting may be override with using of SET FONT TO command. * Updated: Synchronized Extended HMG for compatibility with Official HMG: - New: Added Visual Effects on Windows - SET WINDOW cFormName TRANSPARENT TO nAlphaBlend where nAlphaBlend is from 0 to 255 (completely transparent = 0, opaque = 255) - SET WINDOW cFormName [ TRANSPARENT ] TO OPAQUE - SET WINDOW cFormName TRANSPARENT TO COLOR aColor (see demos in folder \samples\Advanced\Transparency) - FLASH WINDOW cFormName CAPTION COUNT nTimes INTERVAL nMilliseconds - FLASH WINDOW cFormName TASKBAR COUNT nTimes INTERVAL nMilliseconds - FLASH WINDOW cFormName [ ALL ] COUNT nTimes INTERVAL nMilliseconds (see demo in folder \samples\Advanced\FlashWindow) - ANIMATE WINDOW cFormName MODE nFlags INTERVAL nMilliseconds - ANIMATE WINDOW cFormName MODE nFlags (see demo in folder \samples\Basic\AnimateWindow) * Updated: Header file i_hmgcompat.ch for compatibility with Official HMG: - added pseudo-functions DoEvents() and SetCursorSystem(). * Updated: Harbour function HB_SETCODEPAGE() guarded as HMG_LEGACY_OFF in Minigui core. This obsolete function was removed in Harbour 3.0 and superseded by hb_cdpSelect(). * Updated: Added codepages setting for Dutch, Turkish and Swedish languages at minigui initialization. It's needed for proper file system actions with national symbols. * Updated: Minigui EXTERN list was generated automatically with using hbmk2 utility. * Updated: HbSQLite3 library: - update for using SQLITE3 version 3.8.8 (from 3.8.8dev). * Updated: Harbour Compiler 3.2.0dev (SVN 2015-01-19 13:24). * New: 'Simple Phone Book' sample. Based upon a contribution of Dragan Cizmarevic <dragancesu(at)gmail.com> * Updated: 'Internet Explorer ActiveX' sample: - silent script errors at loading of the internet pages. * Updated: 'Framework for SDI application' sample. * Updated: 'Clipbrd Clear' sample: added an internal Clipboard Viewer. * Updated: 'Resize It' sample. * Updated: 'Uninstall Editor' sample. * Updated: 'Sqlite browser' utility: minor correction.

gfilatov2002: Softlog86 пишет: что новенького ? 1) исправление конфликта местоположения ToolBar с классом Bottom и статусной строки перенесено из примера в ядро библиотеки; 2) модифицировано определение имени и размера шрифта по умолчанию в зависимости от используемой OS на основе новой функции GetSystemFont(); 3) добавлены команды для создания визуальных эффектов для окон и управления их "прозрачностью"; 4) добавлена установка коловой страницы при старте программы для голландского, турецкого и шведского языка в дополнение к уже имеющимся языкам. Это требуется Харбору для правильной работы с файловой системой, использующей национальные символы; 5) обновлена сборка Харбора и библиотека SQLITE3 до актуальных свежих версий; 6) добавлен один новый и обновлены некоторые старые примеры; 7) другие мелкие изменения в коде ядра. Также для MinGW-сборки использована свежая версия С-компилятора 4.9.2, датированная декабрем 2014, которая взята на сайте http://tdm-gcc.tdragon.net

sashaBG: Обычный BROWSE "Сильно Моргает" , наверное исполняются слишком много REFRESH ? даже и при такой команде. FORM_1.BROWSE_1.VALUE := FILE1->( RECNO() ) И в примерах тоже замечается при передвижении в верх и в низ курсора . Если есть способ подавить етот еффект , поделитесь пожалуйста !

gfilatov2002: sashaBG пишет: Если есть способ подавить етот еффект Да, это возможно за счет замедления перерисовки Listview путем добавления стиля LVS_EX_DOUBLEBUFFER. #define LVS_EX_DOUBLEBUFFER 0x10000 ListView_ChangeExtendedStyle ( GetControlHandle('GridName','FormName'), LVS_EX_DOUBLEBUFFER, NIL ) где используется новая С-функция // ListView_ChangeExtendedStyle ( hWnd, [ nAddStyle ], [ nRemoveStyle ] ) HB_FUNC( LISTVIEW_CHANGEEXTENDEDSTYLE ) { HWND hWnd = (HWND) hb_parnl (1); DWORD Add = (DWORD) hb_parnl (2); DWORD Remove = (DWORD) hb_parnl (3); DWORD OldStyle, NewStyle, Style; OldStyle = ListView_GetExtendedListViewStyle (hWnd); NewStyle = (OldStyle | Add) & ( ~Remove ); Style = ListView_SetExtendedListViewStyle ( hWnd, NewStyle ); hb_retnl ((LONG) Style); } Предупреждение. При использовании этого стиля наблюдается общее замедление работы Browse Благодарю за Вашу поддержку

sashaBG: Компилятор не находит последних двух функции ListView_GetExtendedListViewStyle ListView_SetExtendedListViewStyle Я чегото не добавляю в проект наверно !

gfilatov2002: sashaBG пишет: ListView_GetExtendedListViewStyle ListView_SetExtendedListViewStyle Это макросы, которые д.б. определены в файле bcc55\include\commctrl.h следующим образом #define ListView_SetExtendedListViewStyle(w,s) (DWORD)SNDMSG((w),LVM_SETEXTENDEDLISTVIEWSTYLE,0,(s)) #define ListView_GetExtendedListViewStyle(w) (DWORD)SNDMSG((w),LVM_GETEXTENDEDLISTVIEWSTYLE,0,0) sashaBG пишет: Я чегото не добавляю в проект #include <commctrl.h>

sashaBG: Спасибо Григорий ! Так гораздо лучше , но только BORLAND-ом через MINGW не компилируется ccw.prg:1210:1: warning: implicit declaration of function 'ListView_GetExtendedListViewStyle' [-Wimplicit-function-declaration] ccw.prg:1212:1: warning: implicit declaration of function 'ListView_SetExtendedListViewStyle' [-Wimplicit-function-declaration] hbmk2: Linking... ccw.exe .hbmk/win/mingw/ccw.o:ccw.c:(.text+0x40d): undefined reference to `ListView_GetExtendedListViewStyle' .hbmk/win/mingw/ccw.o:ccw.c:(.text+0x41f): undefined reference to `ListView_SetExtendedListViewStyle' Я заметил что такое моргание в более старых версий не наблюдалось например 2.3.4 , 2.3.5

Dima: sashaBG в Mingw тоже есть commctrl.h gfilatov2002 пишет: #define ListView_SetExtendedListViewStyle(w,s) (DWORD)SNDMSG((w),LVM_SETEXTENDEDLISTVIEWSTYLE,0,(s)) #define ListView_GetExtendedListViewStyle(w) (DWORD)SNDMSG((w),LVM_GETEXTENDEDLISTVIEWSTYLE,0,0) там это один в один

gfilatov2002: sashaBG пишет: Так гораздо лучше Ниже рабочий пример, построенный на тестовой базе с 32 полями из поставки минигуи [pre]#include "minigui.ch" #define LVS_EX_DOUBLEBUFFER 0x10000 Function Main SET MULTIPLE OFF WARNING SET PROGRAMMATICCHANGE OFF SET NAVIGATION EXTENDED SET BROWSESYNC ON DEFINE WINDOW Form_1 ; AT 0,0 ; WIDTH 640 HEIGHT 480 ; TITLE 'MiniGUI Browse Demo' ; MAIN NOMAXIMIZE ; ON INIT OpenTables() ; ON RELEASE CloseTables() DEFINE MAIN MENU POPUP 'File' ITEM 'Set Browse Value' ACTION Form_1.Browse_1.Value := 10 ITEM 'Get Browse Value' ACTION MsgInfo ( Form_1.Browse_1.Value ) ITEM 'Refresh Browse' ACTION Form_1.Browse_1.Refresh() SEPARATOR ITEM 'Exit' ACTION Form_1.Release() END POPUP POPUP 'Help' ITEM 'About' ACTION MsgInfo ("MiniGUI Browse Demo") END POPUP END MENU DEFINE STATUSBAR STATUSITEM 'HMG Power Ready' STATUSITEM '<Enter> / Double Click To Edit' WIDTH 200 STATUSITEM 'Alt+A: Append' WIDTH 120 END STATUSBAR DEFINE BROWSE Browse_1 ROW 10 COL 10 WIDTH 610 HEIGHT 390 HEADERS { 'Field 1' , 'Field 2' , 'Field 3', 'Field 4', 'Field 5' , 'Field 6' , 'Field 7', 'Field 8' , 'Field 9' , 'Field 10' , 'Field 11' , 'Field 12' , 'Field 13' , 'Field 14' , 'Field 15' , 'Field 16' , 'Field 17' , 'Field 18' , 'Field 19' , 'Field 20' , 'Field 21' , 'Field 22' , 'Field 23' , 'Field 24' , 'Field 25' , 'Field 26' , 'Field 27' , 'Field 28' , 'Field 29' , 'Field 30' , 'Field 31' , 'Field 32' } WIDTHS { 100 ,100 ,100 ,100 ,100 ,100 ,100 ,100 ,100 ,100 ,100 ,100 ,100 ,100 ,100 ,100 ,100 ,100 ,100 ,100 ,100 ,100 ,100 ,100 ,100 ,100 ,100 ,100 ,100 ,100 ,100 ,100 } WORKAREA MuchFields FIELDS { 'c1','c2','c3','c4','c5','c6','c7','c8','c9','c10','c11','c12','c13','c14','c15','c16','c17','c18','c19','c20','c21','c22','c23','c24','c25','c26','c27','c28','c29','c30','c31','c32' } VALUE 1 LOCK .T. ALLOWEDIT .T. ALLOWAPPEND .T. INPLACEEDIT .T. END BROWSE END WINDOW ListView_ChangeExtendedStyle ( GetControlHandle('Browse_1','Form_1'), LVS_EX_DOUBLEBUFFER, NIL ) CENTER WINDOW Form_1 ACTIVATE WINDOW Form_1 Return Nil Procedure OpenTables() Use MuchFields Shared Return Procedure CloseTables() Use Return #pragma BEGINDUMP #include <windows.h> #include <commctrl.h> #include "hbapi.h" // ListView_ChangeExtendedStyle ( hWnd, [ nAddStyle ], [ nRemoveStyle ] ) HB_FUNC( LISTVIEW_CHANGEEXTENDEDSTYLE ) { HWND hWnd = (HWND) hb_parnl( 1 ); DWORD Add = (DWORD) hb_parnl( 2 ); DWORD Remove = (DWORD) hb_parnl( 3 ); DWORD OldStyle, NewStyle, Style; OldStyle = ListView_GetExtendedListViewStyle( hWnd ); NewStyle = ( OldStyle | Add) & ( ~Remove ); Style = ListView_SetExtendedListViewStyle( hWnd, NewStyle ); hb_retnl ((LONG) Style); } #pragma ENDDUMP[/pre] Как говорится, почувствуйте разницу. Ваши комментарии приветствуются...

SergKis: gfilatov2002 пишет:Как говорится, почувствуйте разницу Так очень даже хорошо. А так даже Header убирать можно: #define LVS_EX_DOUBLEBUFFER 0x10000 #define LVS_NOCOLUMNHEADER 0x00004000 ... ListView_ChangeExtendedStyle ( GetControlHandle('Browse_1','Form_1'), LVS_EX_DOUBLEBUFFER, NIL ) SetWindowStyle ( GetControlHandle('Browse_1','Form_1'), LVS_NOCOLUMNHEADER, .T. ) ... gfilatov2002

sashaBG: Не справился с MINGW опять ! Пример компилируется хорошо в MiniGUI с Borland для MINGW я использую build.bat из поставки что то видимо надо гдето прописать пробовал добавить в строчке HBMK2 i f:\hmg\mingw\include - результат тот же

sashaBG: Получилось и под MINGW ! Перенес функцию ListView_ChangeExtendedStyle в c_browse.c , перекомпилировал библиотеку и все заработало не знаю почему в секцию #pragma BEGINDUMP .... #pragma ENDDUMP компилятор не понимал наличие #include <commctrl.h>

gfilatov2002: sashaBG Добавил следующую запись в текуший changelog: * Enhanced: The Browse control supports the optional 'PaintDoubleBuffer' clause. The ListView will be painted via double-buffering, which reduces flicker considerably but a bit slows output. Requested by Sasha Savov <savovs/at/gmail.com>. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see browse6.prg in folder \samples\Basic\BROWSE_3) и проверил работу Browse под BCC и MINGW. Так что эта фича будет доступна в следующей сборке опционально.

Andrey: gfilatov2002 пишет: optional 'PaintDoubleBuffer' А для TBROWSE тоже хотелось бы убрать мерцание при изменение размеров.... Попробуй менять размеры в примере MiniGUI\SAMPLES\Advanced\Tsb_config - сразу видно это мерцание.....

Dima: MiniGui работает в потоках (в MT режиме) ?

Haz: Работает

Dima: Haz OK. Понял.

Haz: #include "minigui.ch" #include "common.ch" #include "fileio.ch" #include "hbthread.ch" Func Main() DEFINE WINDOW Form_0 ; AT 0,0 ; WIDTH 400 ; HEIGHT 200 ; TITLE 'Hello World!' ; MAIN ; ON INIT {|| hb_threadDetach( hb_threadStart( HB_THREAD_INHERIT_PUBLIC, @P1() ) )} END WINDOW CENTER WINDOW Form_0 ACTIVATE WINDOW Form_0 return nil Func P1() DEFINE WINDOW Form_1 ; AT 100,100 ; WIDTH 400 ; HEIGHT 200 ; TITLE 'Hello World! ThRead' ; CHILD END WINDOW ACTIVATE WINDOW Form_1 Return nil

Dima: Haz Спасибо за примерчик. Я наверное когда созрею , темку то отдельную создам. У меня там 5 потоков и вывод только в одном окне , но это так , детали.

gfilatov2002: Просто к сведению. Выпустил RC 3 для следующей сборки 2.4.4. Финальный релиз запланирован на следующей неделе [pre2] * Fixed: Splitboxed ToolBar with 'Bottom' clause and StatusBar reposition problem (introduced in the build 2.4.3). Reported by Pierpaolo Martinello <pier.martinello[at]alice.it>. Contributed by Grigory Filatov <gfilatov@inbox.ru> * Enhanced: The Browse control supports the optional 'PaintDoubleBuffer' clause. The ListView will be painted via double-buffering, which reduces flicker considerably but a bit slows output. Requested by Sasha Savov <savovs/at/gmail.com>. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see browse6.prg in folder \samples\Basic\BROWSE_3) * Enhanced: The GRID control supports the optional ON CHECKBOXCLICKED event when the CHECKBOXES clause was used. Contributed by Dr. Claudio Soto <srvet@adinet.com.uy>. Adapted for Minigui Extended by Grigory Filatov <gfilatov@inbox.ru> (see demo2.prg in folder \samples\Basic\CheckBox_Grid) * Enhanced: Added 'Increment' property for interior SPINNER at GRID control with the COLUMNCONTROLS clause. It accepts a fourth parameter, like this: { 'SPINNER', 1, 20, 5 }, where 1 is low value, 20 is high value and 5 is increment (default value is 1). Requested by Pablo Cesar at official HMG forum. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo.prg in folder \samples\Basic\Grid_3) * Modified: Added automatic calculation of buffer size in the C-function GetPrivateProfileString(). It is important for the proper loading of the long strings (f.e. arrays) from an ini file. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo in folder \samples\Basic\Grid_9) * Updated: DRAW GRAPH (no pie types) correction of a default title height and X-axes label's width for maximum DataMask "9,999,999.99". Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo in folder \samples\Basic\Charts) * Updated: HbSQLite3 library: - update for using SQLITE3 version 3.8.8.2 (from 3.8.8.1). Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo in folder \samples\Advanced\SQLITE_2) * Updated: Harbour Compiler 3.2.0dev (SVN 2015-02-11 18:48). Contributed by Grigory Filatov <gfilatov@inbox.ru> (look at ReadMe.txt in folder \harbour) * New: 'Using of a colored Grid as Achoice' sample. Contributed by Verchenko Andrey <verchenkoag@gmail.com> (see demo3.prg in folder \samples\Basic\Grid_4) * New: 'Add a control on the specified Tab page at runtime' sample. Based upon a contribution of S.Rathinagiri <srgiri@dataone.in> (see demo2.prg in folder \samples\Basic\Tab_3) * Updated: 'AdoRDD' sample: added 'Append' test. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Basic\ADORDD) * Updated: 'JPG Viewer' sample: minor change. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Advanced\JpgViewer) * Updated: 'Run Dialog Box' sample. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Applications\RunCmd)[/pre2]

Dima: gfilatov2002 А можно сделать что б в StatusBar можно цвет и цвет фона менять ?

Andrey: Dima пишет: А можно сделать что б в StatusBar можно цвет и цвет фона менять ? Присоединяюсь к пожеланию. Давно уже об этом писали....

gfilatov2002: Dima пишет: можно сделать что б в StatusBar можно цвет и цвет фона менять ? С помощью WinAPI надо переопределить statusbar item как самописный (ownerdraw), послав ему собщение SendMessage( hwndSb, SB_SETTEXT, hb_BitOr( IDS_STATUSBAR, SBT_OWNERDRAW ), IDS_STATUSBAR ). В первом приближении это может выглядеть как в примере ниже [pre] #include "i_winuser.ch" #include "minigui.ch" #define APP_TITLE "Hello World!" #define SB_SETTEXT (WM_USER+1) #define SBT_OWNERDRAW 0x1000 #define IDS_STATUSBAR 0 /* */ Function Main SET EVENTS FUNCTION TO MYEVENTS DEFINE WINDOW Win_1 ; AT 0,0 ; WIDTH 400 ; HEIGHT 400 ; TITLE APP_TITLE ; MAIN DEFINE STATUSBAR FONT "Arial" SIZE 12 hwndSb := GetControlHandle ( _HMG_ActiveMessageBarname, _HMG_ActiveFormName ) STATUSITEM "New Value" STATUSITEM "Dummy" END STATUSBAR END WINDOW SendMessage( hwndSb, SB_SETTEXT, hb_BitOr( IDS_STATUSBAR, SBT_OWNERDRAW ), IDS_STATUSBAR ) CENTER WINDOW Win_1 ACTIVATE WINDOW Win_1 Return Nil *----------------------------------------------------------* Function MyEvents ( hWnd, nMsg, wParam, lParam ) *----------------------------------------------------------* do case **************************************************** case nMsg == WM_DRAWITEM **************************************************** a := GETDRAWITEMRC(lParam) TextOut( a[1], a[2]+1, "New Value", GETDRAWITEMDC(lParam) ) otherwise Events( hWnd, nMsg, wParam, lParam ) endcase Return (0) *-----------------------------------------------------------------------------* #pragma BEGINDUMP #include "hbapi.h" #include "windows.h" #ifdef __XHARBOUR__ #define HB_STORNL( n, x, y ) hb_stornl( n, x, y ) #else #define HB_STORNL( n, x, y ) hb_storvnl( n, x, y ) #endif HB_FUNC( GETDRAWITEMDC ) { hb_retnl( ( LONG ) ( ( ( DRAWITEMSTRUCT FAR * ) hb_parnl( 1 ) )->hDC ) ); } HB_FUNC( GETDRAWITEMRC ) { RECT rcItem = ( ( DRAWITEMSTRUCT FAR * ) hb_parnl( 1 ) )->rcItem; hb_reta( 2 ); HB_STORNL( (LONG) rcItem.left, -1, 1 ); HB_STORNL( (LONG) rcItem.top, -1, 2 ); } HB_FUNC ( TEXTOUT ) { HDC hdc = (HDC) hb_parnl( 4 ); SetTextColor( hdc, RGB ( 0, 0, 255 ) ); SetBkMode( hdc, TRANSPARENT ); TextOut( hdc, hb_parni(1), hb_parni(2), hb_parc(3), strlen(hb_parc(3)) ) ; SetBkMode( hdc, OPAQUE ); DeleteDC( hdc ) ; } #pragma ENDDUMP[/pre]

Dima: gfilatov2002 В принципе ожидаемый ответ ;) Спасибо ! Просто хотелось что бы эта фича работала опционально

gfilatov2002: Новый релиз библиотеки для компилятора BCC выложил, как и обещал, на официальном сайте библиотеки по адресу: http://hmgextended.com/files/CONTRIB/hmg-2.4.4-setup.zip Также доступна полная сборка для компилятора MinGW по адресу: http://hmgextended.com/files/CONTRIB/hmg244-mingw.exe и компактный архив для свежей версии компилятора xHarbour http://hmgextended.com/files/CONTRIB/xhmg244_xhb10099.zip Что нового: - исправление обнаруженных ошибок и неточностей кода; - новый класс PaintDoubleBuffer для Browse; - новое событие ON CHECKBOXCLICKED для GRID с классом CHECKBOXES; - добавлено свойство Increment при редактировании ячейки SPINNER для GRID; - добавлена установка индивидуальных свойств BackColor и FontColor для каждого участка StatusBar; - обновлена библиотека SQLITE3 до финальной версии 3.8.8.2; - обновлен компилятор Harbour 3.2.0dev; - пересобрана Hmgs-IDE с текущей версией библиотеки; - добавлены новые и обновлены некоторые старые примеры Благодарю за внимание

krutoff: У меня перестала работать на xHarbour команда COPY FILE - на выходе получаю файл с нулевым объемом. Вместо этого попробовал функцию FileCopy - все проходит Ок.

Dima: krutoff пишет: У меня перестала работать на xHarbour команда COPY FILE А если эту команду юзануть в консоли то работает ? Мне кажется Минигуи не при чем.

gfilatov2002: krutoff пишет: перестала работать на xHarbour команда COPY FILE Эту проблему в xHarbour уже исправили, начиная со сборки 10110 2015-02-22 11:00 UTC-0300 Luiz Rafael Culik <luiz@xharbour.com.br> * source/rtl/copyfile.c ! minor fix for 0 byte file created

sashaBG: Возможно ли MiniGUI 64bit ? на примере Оригинальной HMG

gfilatov2002: Просто к сведению. Выпустил pre-release для следующей сборки 2.4.5. Финальный релиз запланирован на следующей неделе [pre2] * Modified: Added the extended style INFOTIP at Browse and Grid definition by default. When a listview displays an item that is too wide for its column the text gets truncated to fit. The Browse and Grid controls with above style will display a hint containing the full text when you hover the mouse over the item. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo in folder \samples\Advanced\ListViewEx) * Enhanced: The Grid control supports the optional 'NoSortHeaders' clause. This clause specifies that column headers do not work like buttons. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo in folder \samples\Advanced\ListViewEx) * Enhanced: The Grid control supports the optional 'PaintDoubleBuffer' clause. Requested by Alen Uzelac <alen@bbm.hr>. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo in folder \samples\Advanced\ListViewEx) * Enhanced: The CheckBox control supports an optional ON ENTER clause now. Sample code: @ 10,10 CHECKBOX CheckBox_1 CAPTION "CheckBox_1" ; ON ENTER This.Value := !(This.Value) allows to use the <Enter> key similar to the <Space> key for switching of a checkbox value. Contributed by Grigory Filatov <gfilatov@inbox.ru> * Updated: Revised the colored status item's handling: - Changed: using of the public _HMG_SYSDATA array was removed. Contributed by Grigory Filatov <gfilatov@inbox.ru> * Updated: Adaptation FiveWin Class TSBrowse 9.0 in HMG: - New: Added TIMESTAMP type support (first attempt). Contributed by Janusz Pora <januszpora@onet.eu> - Changed: Minor correction in a handling of the GetBox 'Picture' property at an editing. Contributed by Igor Nazarov. * Updated: HbSQLite3 library: - update for using SQLITE3 version 3.8.8.3 (from 3.8.8.2). Upgrading from the previous release is optional. Contributed by Grigory Filatov <gfilatov@inbox.ru> * Updated: MPM utility: - update for compatibility with a recent change in a handling of harbour.exe command line. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see in folder \Utils\MPM) * Updated: Harbour Compiler 3.2.0dev (SVN 2015-03-11 16:23): * Updated: HbSqlDD library source code (see in folder \Source\HbSqlDD); * Updated: HbODBC library source code (see in folder \Source\HbODBC). Contributed by Grigory Filatov <gfilatov@inbox.ru> (look at ReadMe.txt in folder \harbour) * New: 'Charts SQLITE3' sample is based on 'Charts ADO' sample. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Basic\Charts_2) * New: 'ListView with Extended styles' sample. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Advanced\ListViewEx) * Updated: 'Show of icons from the system library shell32.dll': - added saving of the icon resources to disk. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo2.prg in folder \samples\Basic\ExtractIcon) * Updated: 'Simple Phone Book' sample: misc bugfix. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Applications\PHONE_BOOK) * Updated: 'Data Base Assistant' utility: minor changes. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see in folder \Utils\DBA) [/pre2] sashaBG пишет: Возможно ли MiniGUI 64bit ? В настоящий момент - нет, поскольку это требует переработки Си-кода на использование указателей вместо 32-разрядных чисел и, следовательно, длмтельного тестирования после таких серьезных изменений. Вторая причина заключается в том, что фирма Микрософт пока обеспечивает выполнение 32-разрядных приложений в среде 64-bit, т.к. не может игнорировать наличие сотен миллионов 32-разрядных систем в мире. Попросту говоря, 32-разрядных код будет выполняться в 64-разрядной среде, а вот наоборот - нет. Наконец, третья причина - в том, что переход на 64-bit рельсы однозначно потребует смены Си-компилятора на бесплатный MinGW со всей его громоздкостью и уменьшением скорости сборки приложений, что бывает критично на этапе отладки, когда требуетя после небольших изменений кода быстро посмотреть результат. В этом случае по скорости сборки приложений BCC далеко впереди...

gfilatov2002: Новый релиз библиотеки для компилятора BCC выложил, как и обещал, на официальном сайте библиотеки по адресу: http://hmgextended.com/files/CONTRIB/hmg-2.4.5-setup.zip Также доступна полная сборка для компилятора MinGW по адресу: http://hmgextended.com/files/CONTRIB/hmg245-mingw.exe и компактный архив для свежей версии компилятора xHarbour http://hmgextended.com/files/CONTRIB/xhmg245_xhb10116.zip Благодарю за внимание

Andrey: Спасибо ! * Updated: 'Show of icons from the system library shell32.dll': - added saving of the icon resources to disk. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo2.prg in folder \samples\Basic\ExtractIcon) А можно сделать запись иконок других форматов, кроме 16х16 и 32х32 ?

gfilatov2002: Andrey пишет: А можно сделать запись иконок других форматов Да, думаю, что это возможно, если до этого извлечь эти иконки с помощью WinApi-функции PrivateExtractIcons() См. описание https://msdn.microsoft.com/en-us/library/windows/desktop/ms648075(v=vs.85).aspx

Andrey: gfilatov2002 пишет: См. описание Неа, я не осилю... и не сделаю...

alexandr11: Скажите пожалуйста - как в MiniGUI обстоят дела с UNICODE? каковы перспективы?

SergKis: gfilatov2002 правильно, ли я понял, что используемые в меню image, подвисают в воздухе (утечка памяти), т.к. на них не делаются DeleteObject(...). c_menu.c (line 337): HB_FUNC( MENUITEM_SETBITMAPS ) хендлеры image: HBITMAP himage1; HBITMAP himage2; после LoadImage(...) не запоминаются в массивах MiniGui, чтобы освободится при разрушении окна. т.е. использовать main\context menu надо (лучше) без image ? или я что то не увидел\не так понял ?

gfilatov2002: SergKis Вы абсолютно правы. Видимо, оригинальный автор библиотеки посчитал, что главное меню приложения существует все время работы, и будет разрушаться автоматически, когда приложение закрывается. SergKis пишет: использовать main\context menu надо (лучше) без image ? Насколько я знаю, такой проблемы не существует при использовании MENUSTYLE EXTENDED При использовании стандартного меню надо учитывать следующее: Значки выбора и сброса отметки должны быть одноцветными. Система использует Булев оператор И (AND), чтобы комбинировать значки меню так, чтобы белая часть стала прозрачной, а черная часть становилась цветом пункта меню. Если Вы используете цветные точечные рисунки (значки), результаты могут быть непредсказуемые.

SergKis: gfilatov2002 пишет:... что главное меню приложения ... с главным меню, действительно, неважно, основная утечка возникает на контексном меню по правому клику мыши. Спасибо за развернутый ответ. Пойду дальше ...

krutoff: После установки версии 2.4.5 xHarbour у меня появилась ошибка в h_tbrowse.prg. При компиляции примера из ..\miniGui\SAMPLES\Advanced\TsBrowse\Compile.bat: Error: Unresolved external '_HB_FUN_HB_HOUR' referenced from D:\MINIGUI\XLIB\TSBROWSE.LIB|h_tbrowse Error: Unresolved external '_HB_FUN_HB_MINUTE' referenced from D:\MINIGUI\XLIB\TSBROWSE.LIB|h_tbrowse Error: Unresolved external '_HB_FUN_HB_SEC' referenced from D:\MINIGUI\XLIB\TSBROWSE.LIB|h_tbrowse

gfilatov2002: krutoff пишет: появилась ошибка в h_tbrowse.prg Вы правы! Эта ошибка уже исправлена в новой сборке, которая выйдет на следующей неделе А пока рекомендую использовать библиотеку tsbrowse из предыдущей сборки (отличия минимальные).

SergKis: SergKis пишет:правильно, ли я понял, что используемые в меню image, подвисают в воздухе (утечка памяти), т.к. на них не делаются DeleteObject(...). gfilatov2002 пишет:Вы абсолютно правы для исправления ситуации предлагаю: [pre2] c_menu.c HB_FUNC( MENUITEM_SETBITMAPS ) { HBITMAP himage1=0; HBITMAP himage2=0; himage1 = ( HBITMAP ) LoadImage( GetModuleHandle(NULL), hb_parc_t(3), IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR ); if( himage1 == NULL ) himage1 = ( HBITMAP ) LoadImage( 0, hb_parc_t(3), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_DEFAULTCOLOR ); if( !newStyle ) { // BAA 04.04.2015 HBITMAP himage2; himage2 = ( HBITMAP ) LoadImage( GetModuleHandle(NULL), hb_parc_t(4), IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR ); if( himage2 == NULL ) himage2 = ( HBITMAP ) LoadImage( 0, hb_parc_t(4), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_DEFAULTCOLOR ); SetMenuItemBitmaps( ( HMENU ) hb_parnl(1), hb_parni(2), MF_BYCOMMAND, himage1, himage2 ); } else { MENUITEMINFO MenuItemInfo; MYMENUITEM *pmyMenuItem; MenuItemInfo.cbSize = sizeof( MENUITEMINFO ); MenuItemInfo.fMask = MIIM_DATA; GetMenuItemInfo( ( HMENU ) hb_parnl(1), hb_parni(2), FALSE, &MenuItemInfo ); pmyMenuItem = ( MYMENUITEM * ) MenuItemInfo.dwItemData; if( pmyMenuItem->hBitmap != NULL ) DeleteObject( pmyMenuItem->hBitmap ); pmyMenuItem->hBitmap = himage1; } hb_reta( 2 ); HB_STORNL( ( LONG ) himage1, -1, 1 ); HB_STORNL( ( LONG ) himage2, -1, 2 ); } h_menu.prg ... *-----------------------------------------------------------------------------* Procedure _DefineMenuItem ( caption , action , name , Image , checked , disabled , cMessage, font, check_image ) *-----------------------------------------------------------------------------* Local Controlhandle , mVar , k , id , ContextMenuHandle, ahImage:={0,0} ... If Valtype ( image ) != 'U' ahImage := MenuItem_SetBitMaps ( _HMG_xMenuPopuphandle [_HMG_xMenuPopupLevel ] , id , image , '' ) EndIf ... _HMG_aControlPicture [k] := "" _HMG_aControlContainerHandle [k] := ahImage _HMG_aControlFontName [k] := '' ... h_controlmisc.prg ... *-----------------------------------------------------------------------------* FUNCTION _EraseControl ( i, p ) *-----------------------------------------------------------------------------* ... в DO CASE добавить обработку CASE t == 'MENU' IF hb_IsArray( _HMG_aControlContainerHandle [ i ] ) .and. len( _HMG_aControlContainerHandle [ i ] ) == 2 IF ! empty( _HMG_aControlContainerHandle [ i ][ 1 ] ) DeleteObject ( _HMG_aControlContainerHandle [ i ][ 1 ] ) ENDIF IF ! empty( _HMG_aControlContainerHandle [ i ][ 2 ] ) DeleteObject ( _HMG_aControlContainerHandle [ i ][ 2 ] ) ENDIF ENDIF ... [/pre2]

gfilatov2002: SergKis пишет: для исправления ситуации предлагаю Благодарю за Ваше предложение! Я уже сделал подобные исправления для новой сборки (хотя немного упростил код с учетом того, что в качестве image2 передается пустая строка). Текущий changelog для справки можно посмотреть ниже [pre2] * Fixed: Possible memory leak in the main/context/notify menu with 'Image' clause. Problem was reported by Russian user SergKis. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see menudemo.prg in folder \samples\Basic\Menu) * Enhanced: The ReadOnly property is supported in the function SetProperty() for the Spinner control. You can set/get this property at runtime: - function syntax: SetProperty ( Form, Control, 'ReadOnly', lState ) GetProperty ( Form, Control, 'ReadOnly' ) - pseudo-OOP syntax: Form.Spinner.ReadOnly := lState Form.Spinner.ReadOnly --> lState Contributed by Grigory Filatov <gfilatov@inbox.ru> * Enhanced: The ComboBox control with DisplayEdit clause supports a changing of the ReadOnly property at runtime: - function syntax: SetProperty ( Form, Control, 'ReadOnly', lState ) - pseudo-OOP syntax: Form.ComboBox.ReadOnly := lState Requested by Vianei Moreira de Lemos <vianeimoreira@gmail.com>. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo2.prg in folder \samples\Basic\COMBO_4) * Updated: DRAW GRAPH: correction of the default height of title and labels for the font's size more than 10. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo in folder \samples\Basic\Histogram) * Updated: Changed DEFAULT TO command in MiniGUI core to the functions hb_default()/__defaultNIL() and hb_defaultValue() for Harbour requiring compatibility. It will set the value to the default one even when the variable has any other type, not only NIL. Contributed by Grigory Filatov <gfilatov@inbox.ru> * Updated: Adaptation FiveWin Class TSBrowse 9.0 in HMG: - updated for xHarbour compatibility after a recent change. Based upon a contribution of Ivanil Marcelino. * Updated: HbSQLite3 library: - update for using SQLITE3 version 3.8.9 (from 3.8.8.3). Contributed by Grigory Filatov <gfilatov@inbox.ru> * Updated: Harbour Compiler 3.2.0dev (SVN 2015-04-09 00:20). Contributed by Grigory Filatov <gfilatov@inbox.ru> (look at ReadMe.txt in folder \harbour) * New: 'Anchored Child window' sample. Based upon a contribution of Pablo Cesar. Adapted for Minigui Extended by Grigory Filatov <gfilatov@inbox.ru> (see demo2.prg in folder \samples\Basic\MoveWindow) * New: 'Read a text from an another application' sample. Contributed by Verchenko Andrey <verchenkoag@gmail.com>. Revised by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Advanced\ExternalApp_3) * Updated: 'Get DIR List' sample: pacified the warnings at prg level. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Basic\DirList) * Updated: 'Histogram' sample: added a print graph routine. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Basic\Histogram) * Updated: 'Simple DBU' sample: minor changes. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Applications\MiDBU) * Updated: 'Process Killer' sample: minor changes. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Applications\PROCESS_KILLER) * Updated: 'Sqlite browser' utility: added column's metadata handling. Contributed by Janusz Pora <januszpora@onet.eu> (see in folder \Utils\SqlDBU) [/pre2]

gfilatov2002: Новый релиз библиотеки для компилятора BCC выложил, как и обещал, на официальном сайте библиотеки по адресу: http://hmgextended.com/files/CONTRIB/hmg-2.4.6-setup.zip Также доступна полная сборка для компилятора MinGW по адресу: http://hmgextended.com/files/CONTRIB/hmg246-mingw.exe и компактный архив для свежей версии компилятора xHarbour http://hmgextended.com/files/CONTRIB/xhmg246_xhb10120.zip Благодарю за внимание P.S. Отдельная благодарность Андрею Верченко за постоянную финансовую поддержку

Andrey: Пере собрал несколько программ. Полёт - нормальный...

Softlog86: Аналогично . Только шрифт стал мельче ..... тот который по умолчанию (в GUI)

gfilatov2002: Просто к сведению. Выпустил beta 3 для следующей сборки 2.4.7. Финальный релиз запланирован на конец мая [pre2] * Fixed: Old bug at the closing of Edit or Append splitboxed dialog in a Browse control with <Alt+F4> hotkey pressing. Problem was reported by Attila Kovacs <k1attila12@yahoo.com>. Contributed by Grigory Filatov <gfilatov@inbox.ru> * Fixed: Program crash at the modification of a column's header after adding a new column in the Grid control. Problem was reported by Gilbert Vaillancourt. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo in folder \samples\Advanced\ReadXLS) * Fixed: Problem with assigning of the RichEditBox 'FontColor' property. You can establish this propery at definition and modify at runtime: - function syntax: SetProperty ( Form, Control, 'FontColor', BLUE ) - pseudo-OOP syntax: Form.RichEditBox.FontColor := BLUE Bug was reported by Gilbert Vaillancourt. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo in folder \samples\Basic\Richedit) * Changed: The HMG_HPDF library was moved from samples to folder Source\HMG_HPDF. Based upon a contribution of S.Rathinagiri <srgiri@dataone.in>. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo in folder \samples\Advanced\PDF_PRINT) * Updated: HbSQLite3 library: - update for using SQLITE3 version 3.8.10dev (from 3.8.9). Contributed by Grigory Filatov <gfilatov@inbox.ru> * Updated: Harbour Compiler 3.2.0dev (SVN 2015-04-27 17:21). Contributed by Grigory Filatov <gfilatov@inbox.ru> (look at ReadMe.txt in folder \harbour) * New: 'Check User Login in the transparent form' sample. Based upon a contribution of Bicahi Esgici <esgici@gmail.com>. Adapted for Minigui Extended by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Basic\Login_2) * New: 'Test a mouse click on the one picture which is divided into 3 parts' sample. Based upon a contribution of Verchenko Andrey <verchenkoag@gmail.com> (see in folder \samples\Basic\Picture_Coords) * New: 'ShellExecuteEx() function using' sample. Based upon a contribution of Verchenko Andrey <verchenkoag@gmail.com> (see in folder \samples\Advanced\ShellExec) * Updated: 'InterNet State Checker' sample: - using of a macro definition for calling of the DLL functions. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Advanced\INET_CHECKER) [/pre2] Поздравляю всех с наступающими праздниками!

Andrey: gfilatov2002 пишет: Поздравляю всех с наступающими праздниками! Присоединяюсь ! С прошедшими праздниками и наступающим 9-мая !!! Вопрос по ходу за одно (мож кто ответит...): у объекта LABEL после показа можно как то поменять TOOLTIP ?

gfilatov2002: Andrey пишет: у объекта LABEL после показа можно как то поменять TOOLTIP ? Попробуй Form_1.Label_1.Tooltip := "New tip !"

Andrey: gfilatov2002 пишет: Form_1.Label_1.Tooltip := "New tip !" Не работает ! Form_1.Label_1.Tooltip := "New tip !" + CRLF + "stroka 2!" Или в подсказке не работает CRLF ? Определяю вначале формы, выполняется функция расчёта, пытаюсь заменить, что то меняется, но потом сообщение всё равно первоначальное !

Dima: Andrey пишет: Или в подсказке не работает CRLF ? А без него пашет ?

Andrey: Dima пишет: А без него пашет ? Да, сейчас проверил, пашет без него... Я сразу делал с CRLF, из-за этого и подумал что не работает...

Softlog86: После обновления MiniGUI обнаружил бяку : организовываю рамку (FRAME ) а размер шрифта для CAPTION - как не меняй - всё-равно мелкий - точек примерное 3-5 в высоту . PS: оказывается при инициализации указание высоты шрифта никак не учитывается , необходимо уже после инициализации принудительно задать : WIN1.FRAME_1.FONTSIZE:=10 ....

SergKis: gfilatov2002 Можно ли добавить в TsBrowse ? h_tbrowse.prg: ... METHOD LButtonDown( nRowPix, nColPix, nKeyFlags ) CLASS TSBrowse // line 6485 ... [pre2] ElseIf lFooter lMChange := ::lMChange ::lMChange := .F. If ::aColumns[ nAtCol ]:bFLClicked != Nil Eval( ::aColumns[ nAtCol ]:bFLClicked, uPar1, uPar2, ::nAt , Self ) // добавить If ::oWnd:hCtlFocus != Nil .and. ::oWnd:hCtlFocus != ::hWnd Return 0 EndIf EndIf ::lMChange := lMChange ::DrawFooters() ElseIf lSpecHd .and. ::lEditableHd lMChange := ::lMChange ::lMChange := .F. If ::aColumns[ nAtCol ]:bSLClicked != Nil Eval( ::aColumns[ nAtCol ]:bSLClicked, uPar1, uPar2, ::nAt , Self ) // добавить ... [/pre2] при lHeader есть Eval( ::aActions[ nAtCol ], Self, uPar1, uPar2 ) а в этих местах нет.

gfilatov2002: SergKis пишет: Можно ли добавить в TsBrowse ? Благодарю за подсказку. Уже добавил эти изменения

Andrey: Григорий ! А почему при использовании функции \MiniGUI\SAMPLES\Advanced\INET_CHECKER нужно обязательно указывать библиотеку calldll ? Если забудешь указать, программа всё равно собирается и функция IsConnected() всегда выдает F

gfilatov2002: Andrey пишет: функции \MiniGUI\SAMPLES\Advanced\INET_CHECKER Этот пример уже исправлен в новой сборке и больше не требует использования библиотеки calldll Новая сборка запланирована к выходу на следующей неделе...

gfilatov2002: Новый релиз библиотеки для компилятора BCC выложил, как и обещал, на официальном сайте библиотеки по адресу: http://hmgextended.com/files/CONTRIB/hmg-2.4.7-setup.zip Также доступна полная сборка для компилятора MinGW по адресу: http://hmgextended.com/files/CONTRIB/hmg247-mingw.exe и компактный архив для свежей версии компилятора xHarbour http://hmgextended.com/files/CONTRIB/xhmg247_xhb10127.zip Благодарю за внимание Замечание. Поскольку замутил большой проект с амерами, выход новых сборок в ближайшем будущем НЕ планируется...

santy: Поздравляю Григорий, а Вы переживали Всё что делается, делается к лучшему. Удачи в новом проэкте.

Andrey: santy пишет: Удачи в новом проэкте. Присоединяюсь !

Andrey: gfilatov2002 пишет: Этот пример уже исправлен в новой сборке и больше не требует использования библиотеки calldll Не работает ! Собрал свой пример без calldll и пишет что инет не доступен. Подсоединил опять calldll - заработало. Григорий, посмотрите пожалуйста ещё MODAL окно, не работают ограничивающие размеры... Пост N: 4233 http://clipper.borda.ru/?1-1-0-00000427-000-220-0-1433857394

gfilatov2002: Andrey пишет: посмотрите пожалуйста ещё MODAL окно, не работают ограничивающие размеры Посмлтрел пример в папке samples\Basic\MinMaxSize для MODAL окна - все работает нормально

gfilatov2002: Andrey пишет: Собрал свой пример Речь шла о переработанном примере в папке INET_CHECKER, который сейчас не использует библиотеку calldll

Andrey: gfilatov2002 пишет: Речь шла о переработанном примере в папке INET_CHECKER, который сейчас не использует библиотеку calldll Понял. Спасибо !

Andrey: gfilatov2002 пишет: Посмлтрел пример в папке samples\Basic\MinMaxSize для MODAL окна - все работает нормально Пример работает. Я его модифицировал немножко... ... он перестал работать ... https://cloud.mail.ru/public/7oL2/QXYYUuyyu Что не так делаю ?

gfilatov2002: Andrey пишет: он перестал работать Благодарю за пример - уже исправил старую опечатку при обработке модальных окон До выхода новой сборки с исправлением используйте присвоение, как это сделано в примере samples\Basic\MinMaxSize

gfilatov2002: Просто к сведению. Выпустил сегодня beta 3 для следующей сборки 2.4.8. Финальный релиз запланирован на следующей неделе [pre2] * Fixed: Bug at changing of a position of a Panel Window at runtime. Contributed by Grigory Filatov <gfilatov@inbox.ru> * Fixed: Bug at changing of the font attributes of a Label control with 'Transparent' property at runtime. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo in folder \samples\Basic\Label) * Fixed: Old typo at the assigning of the MaxWidth and MaxHeight properties in a Modal window at his definition. Problem was reported by Verchenko Andrey <verchenkoag@gmail.com>. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo in folder \samples\Basic\MinMaxSize) * Changed: The function ProcessMessages() is defined as pseudo-function. This function is wrapper for the new C-function DoEvents(). Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo in folder \samples\Basic\NoWait) * Changed: The C-functions GetComputerName() and GetUserName() are defined as pseudo-functions now. They are the wrappers for the corresponding [x]Harbour functions. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo in folder \samples\Basic\GetUserName) * Updated: Adaptation FiveWin Class TSBrowse 9.0 in HMG: - the C-functions SysRefresh() and nMakeLong() are defined as pseudo-functions. They are the wrappers for the corresponding MiniGUI functions. Contributed by Grigory Filatov <gfilatov@inbox.ru> * Updated: HbSQLite3 library: - update for using SQLITE3 version 3.8.11dev (from 3.8.10.2). Contributed by Grigory Filatov <gfilatov@inbox.ru> * Updated: Harbour Compiler 3.2.0dev (SVN 2015-06-02 13:31). Contributed by Grigory Filatov <gfilatov@inbox.ru> (look at ReadMe.txt in folder \harbour) * Updated: HMGS-IDE v.1.3.0. Project Manager and Two-Way Visual Form Designer. This version is considered as Beta release. Contributed by Walter Formigoni <walter.formigoni@uol.com.br> (look for what's new at changelog.txt in folder \Ide) * Updated: 'Print Pie Graph' sample: - added a context menu for the pie graph. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo.prg in folder \samples\Basic\GraphPrint) [/pre2]

Andrey: Григорий, подскажи пожалуйста решение для Пост N: 4257 http://clipper.borda.ru/?1-1-0-00000427-000-220-0 У меня не получается понять и примеров по нему нет, кроме 2х...

gfilatov2002: Andrey пишет: А как изменить цвета для него ? Для этого элемента управления используются только системные цвета, которые назначаются внутри Си-кода SetTextColor( pdis->hDC, GetSysColor( COLOR_WINDOWTEXT ) ); SetBkColor( pdis->hDC, GetSysColor( COLOR_WINDOW ) ); Использование пользовательских цветов не предусмотрено

Andrey: gfilatov2002 пишет: Использование пользовательских цветов не предусмотрено Спасибо ! Хоть легче стало...

Dima: gfilatov2002 В упор не вижу библы BosTaurus под MINGW , что делать ? PS Прикрутил сам.

gfilatov2002: Dima пишет: не вижу библы BosTaurus под MINGW , что делать ? Все верно. Эту библиотеку под MINGW можно взять в этом форке минигуи http://sourceforge.net/projects/hbpidew/

Dima: gfilatov2002 Понял , не понял пока одного , для чего выкладывать обрезанную версию под MINGW если есть полная ?

gfilatov2002: Dima пишет: для чего выкладывать обрезанную версию под MINGW Библиотека BosTaurus является сопутствующей (не основной) для минигуи, поэтому для уменьшения установочного файла она не была включена в поставку для компилятора MINGW Добавление этой либы самостоятельно - довольно простая задача Но если есть потребность, я могу добавить ее в поставку на постоянной основе. Пишите...

Dima: gfilatov2002 пишет: Но если есть потребность, я могу добавить ее в поставку на постоянной основе. Вопрос не в этом Я просто ожидал что сборка под BCC и MINGW будет одинакова , по меньшей мере в плане библиотек. PS Xharbour сборку не копал но судя по тому что она "компактная" в ней тоже нет всего того что есть в сборке под BCC , о либах я. С примерами все ясно.

gfilatov2002: Новый релиз библиотеки для компилятора BCC выложил, как и обещал, на официальном сайте библиотеки по адресу: http://hmgextended.com/files/CONTRIB/hmg-2.4.8-setup.zip Также доступна полная сборка для компилятора MinGW по адресу: http://hmgextended.com/files/CONTRIB/hmg248-mingw.exe и компактный архив для свежей версии компилятора xHarbour http://hmgextended.com/files/CONTRIB/xhmg248_xhb10128.zip Благодарю за внимание

Andrey: Пересобрал несколько проектов. Полёт нормальный !

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

Dima: gfilatov2002 METHOD ReSize Для правильной установки автоширины было [pre2] AEval( ::aColSizes, {|n| nTotPix += n } ) [/pre2] стало [pre2] AEval( ::aColumns, {|n| IF( n:lVisible, nTotPix += n:nWidth, nil ) } ) do events [/pre2] ******************************************* Что бы курсор не мигал при достижении верхней/нижней видимой границы бровса. METHOD GoUp было [pre2] If ! ::lHitTop If ! ::lAppendMode ::DrawLine() EndIf [/pre2] стало [pre2] If ! ::lHitTop If ! ::lAppendMode .and. ::nRowPos > 1 ::DrawLine() EndIf [/pre2] METHOD GoDown было [pre2] If ! ::lHitBottom If ! ::lAppendMode .and. ! ::lIsTxt ::DrawLine() EndIf [/pre2] стало [pre2] If ! ::lHitBottom If ! ::lAppendMode .and. ! ::lIsTxt .and. ::nRowPos < nLines ::DrawLine() EndIf [/pre2] Сырец c_TBrowse.c HARBOUR HB_FUN_TSBRWSCROLL () было [pre2] rct.bottom -= ( ( rct.bottom - rct.top ) % nHeightCell ); [/pre2] стало [pre2] rct.bottom -= ( ( rct.bottom - rct.top ) % nHeightCell ); if( iRows > 0 ) rct.bottom -= nHeightCell; else rct.top += nHeightCell; [/pre2] ************************************************************ Тот же сырец. void DrawBitmap Что бы BMP был прозрачным в бровсе было [pre2] dwRaster = SRCCOPY; [/pre2] стало [pre2] dwRaster = SRCAND; [/pre2] ********************************************************** Теперь глюк , METHOD PageUp Поймать его сложно. Но если (кол-во записей-1) делится на цело на кол-во строк что помещаются на экран , то его видно. Пролистываем несколько страниц вниз а затем жмем и держим PageUP , глюк на лицо. было [pre2] If nSkipped == 0 ::lHitTop := .T. Else If -nSkipped < nLines nRecNo := If( ::lIsDbf, ( ::cAlias )->( RecNo() ), ::nAt ) [/pre2] стало [pre2] If nSkipped == 0 ::lHitTop := .T. Else If -nSkipped < nLines .or. ::nAt == 1 nRecNo := If( ::lIsDbf, ( ::cAlias )->( RecNo() ), ::nAt ) [/pre2] ********************************************************** правки от SergKis добавление символьного имени колонки для возможности обращения по нему [pre2] TSCOLUMN DATA cName INIT "" // Имя колонки изменение метода GetColumn() TSBROWSE для поддержки символьного имени METHOD GetColumn( nCol ) CLASS TSBrowse Default nCol := 1 IF hb_IsString( nCol ) nCol := Max( AScan( ::aColumns, {|oCol| Upper(oCol:cName)==Upper(nCol) } ), 1) RETURN ::aColumns[ nCol ] // returns a Column object ENDIF If nCol < 1 nCol := 1 ElseIf nCol > Len( ::aColumns ) nCol := Len( ::aColumns ) EndIf Return ::aColumns[ nCol ] // returns a Column object изменение метода LoadFilds() TSBROWSE для автоматического назначения имен колонок по имени поля добавить в метод строку ATail( ::aColumns ):cName := FieldName( nE ) изменение метода SetColSize() - для понимания символьного имени METHOD SetColSize( nCol, nWidth ) CLASS TSBrowse Local nI, nSize If ValType( nCol ) == "A" For nI := 1 To Len( nCol ) nSize := If( ValType( nWidth ) == "A", nWidth[ nI ], nWidth ) ::aColumns[ nCol[ nI ] ]:nWidth := nSize ::aColSizes[ nCol[ nI ] ] := IF(::aColumns[ nCol[ nI ] ]:lVisible, ::aColumns[ nCol[ nI ] ]:nWidth, 0) Next Elseif ValType( nCol ) == "C" nI := ASCAN( ::aColumns, { |oCol| UPPER( oCol:cName ) == Upper(nCol) }) ::aColumns[ nI ]:nWidth := nWidth ::aColSizes[ nI ] := IF(::aColumns[ nI ]:lVisible, ::aColumns[ Ni ]:nWidth, 0) Else ::aColumns[ nCol ]:nWidth := nWidth ::aColSizes[ nCol ] := IF(::aColumns[ nCol ]:lVisible, ::aColumns[ nCol ]:nWidth, 0) EndIf If ::lPainted ::Refresh( .T. ) EndIf Return Self ************************************************************************************************* изменение метода KeyDown() добавиnm код перед Otherwise в основной do case чтобы по ENTER и SPACE вызывался код дабл клика мышкой Case !::lCellbrw .And. (nKey == 13 .Or. nKey == 32 ) If ::bLDblClick != Nil Eval( ::bLDblClick ) EndIf Otherwise [/pre2] -------------------------------------------------------------- PS С уважением Has ,SergKis , Dima

gfilatov2002: Has ,SergKis , Dima Благодарю за эти изменения Попробую включить эти правки в следующую сборку (под Вашу ответственность )

Dima: gfilatov2002 пишет: Попробую включить эти правки в следующую сборку хуже чем было не станет , плотно тестили )))

gfilatov2002: Просто к сведению. Выпустил сегодня RC 3 для следующей сборки 2.4.9. Финальный релиз запланирован на следующей неделе Dima Не все изменения в TSBrowse были одобрены и вошли в новую сборку [pre2] * Fixed: The wrong text color of a Label control which is placed on a Tab when 'FontColor' property of this Label is redefined at runtime. This happened in the themed OS only. Problem was reported by Henry Herrera <herrera.henry@gmail.com>. Contributed by Grigory Filatov <gfilatov@inbox.ru> * Fixed: The wrong StatusBar item's width handling in the function _SetStatusWidth(). Problem was reported by russian user. Contributed by Grigory Filatov <gfilatov@inbox.ru> * Changed: The function GetProgramFilesFolder() is defined as pseudo- function. The definition is guarded by constant __WIN98__. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see i_pseudofunc.ch in folder \include) * Changed: ActiveX User Component was moved from the samples to MiniGUI core. A new property called 'Object' was added to manipulate the control. Syntax: @ <nRow>,<nCol> ACTIVEX <ControlName> [ OF | PARENT <ParentWindowName> ] WIDTH <nWidth> HEIGHT <nWidth> PROGID <cProgId> Or DEFINE ACTIVEX <ControlName> <PropertyName> <PropertyValue> <...> END ACTIVEX Based upon a contribution of Roberto Lopez <mail.box.hmg@gmail.com> (see demos in folder \samples\Basic\ActiveX) * Enhanced: Added possibility to modify a FontColor, BackColor and Align for the owner-draw colored status items at runtime. Requested by user on Russian HMG forum. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo4.prg in folder \samples\Basic\Status) * Enhanced: The OwnerDraw Horizontal top-level POPUP menu supports now an optional FONT clause. You can set/change the font of POPUP menu at runtime by function: _SetMenuItemFont( PopupName , FormName , GetFontHandle(FontName) ) Requested by Joe Fanucchi <drjoe@meditrax.com>. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo in folder \samples\Advanced\MenuEx) * Updated: Further replacing of 'DEFAULT TO' command in MiniGUI core with the functions hb_default()/__defaultNIL() and hb_defaultValue(). Contributed by Grigory Filatov <gfilatov@inbox.ru> * Updated: Adaptation FiveWin Class TSBrowse 9.0 in HMG: - correction of calculation of total column width in the Method ReSize; - minor correction in the Method GoUp; - correction of a rare bug in the Method PageUp; - used SRCAND raster in the C-function DrawBitmap(); - added handling of <Enter>/<Space> keys similar to LDblClick action; - added the new TSColumn variable cName for optional column name. Contributed by users from the Russian HMG forum. * Updated: HbSQLite3 library: - update for using SQLITE3 version 3.8.11dev. Contributed by Grigory Filatov <gfilatov@inbox.ru> * Updated: Harbour Compiler 3.2.0dev (SVN 2015-06-26 14:50). Contributed by Grigory Filatov <gfilatov@inbox.ru> (look at ReadMe.txt in folder \harbour) * New: 'Console to GUI data exchange usage' sample. Contributed by Verchenko Andrey <verchenkoag@gmail.com>. (see in folder \samples\Basic\COMM_2) * New: 'WAIT WINDOW with an expectation' sample. Contributed by Verchenko Andrey <verchenkoag@gmail.com>. (see in folder \samples\Basic\WAIT_WINDOW_2) * New: 'NetIO Server and Client: usage of server's stored procedure' sample. Based upon a contribution of Roberto Lopez <mail.box.hmg@gmail.com> (see in folder \samples\Basic\NETIO) [/pre2]

Dima: gfilatov2002 Понял. По поводу починки C модуля. Смотрю этого нет. Обратите внимание https://cloud.mail.ru/public/HtfA/HnzaTizqW в собранном EXE курсор при достижении верхней/нижней границы , когда ездим клавишами вверх/вниз то есть зажали и держим. В моем EXE мерцания курсора нет. В актуальной есть. А если колонок сделать больше то курсор будет мигать как мигалка у Гаи (© Has)

Andrey: Григорий, при больших разрешениях экрана 1680x900 ..... 1920x1080 Фонт на кнопках и еще кое где - очень мелкий. А в меню нормальный. Можно по умолчанию увеличить фонт на большое разрешение экрана ? Если нельзя, то и фиг с ним... Вот так выглядит форма:

gfilatov2002: Andrey пишет: Можно по умолчанию увеличить фонт на большое разрешение экрана ? Попробуй менять размер шрифта при старте программы в зависимости от разрешения экрана с помощью команды SET FONT TO <имя шрифта> , <размер шрифта>

Andrey: gfilatov2002 пишет: Попробуй менять размер шрифта при старте программы Это понятно. Просто меню само подстраивается под разрешение, его нормально видно. А кнопки и остальные объекты нет.

Dima: Andrey пишет: Просто меню само подстраивается под разрешение Меню подстраивает сама Винда (о горизонтальном я) а не Minigui. Нет разве ? Ты же размер шрифта в горизонтальном меню средствами Минигуи не сменишь ;)

gfilatov2002: Dima пишет: Ты же размер шрифта в горизонтальном меню средствами Минигуи не сменишь В следующей сборке такая возможность появится См. Пост N: 771 выше на этой странице

Dima: gfilatov2002 Ну наконец то Давно пора.

Dima: Dima пишет: Сырец c_TBrowse.c HARBOUR HB_FUN_TSBRWSCROLL () было rct.bottom -= ( ( rct.bottom - rct.top ) % nHeightCell ); стало rct.bottom -= ( ( rct.bottom - rct.top ) % nHeightCell ); if( iRows > 0 ) rct.bottom -= nHeightCell; else rct.top += nHeightCell; Григорий я не хочу быть назойливым , просто сделайте ну скажем 100-200 колонок (не шибко широких) и курсор на всю строку и увидите мерцание как на елочной гирлянде :) Исключительно о езде вниз / вверх говорю (GoUP/ GoDown) при достижении видимых границ бровса нижнего или верхнего. Уже пол форума это увидело , что мерцать будет и после сборки RC3))) Там лишнее скролится в окне , отсюда и мерцание.

gfilatov2002: Dima пишет: Исключительно о езде вниз / вверх говорю (GoUP/ GoDown) при достижении видимых границ бровса Да, мерцание становится меньше, но обрати внимание после этого изменения на отображение восьмой колонки "без доставки" в твоем примере ниже [pre]#include "minigui.ch" //#include "common.ch" #include "TSBrowse.ch" //REQUEST HB_CODEPAGE_RU1251, HB_CODEPAGE_RU866, HB_LANG_RUWIN //REQUEST HB_LANG_RUWIN //REQUEST HB_LANG_RU866 //SET CODEPAGE TO RUSSIAN //HB_LANGSELECT( "RU" ) Proc main Public HighWindow_MyApl:=GETDESKTOPREALHEIGHT() Public WidthWindow_MyApl:=GETDESKTOPREALWIDTH() Public aFont := {} set date to german DEFINE FONT Font_1 FONTNAME "Times New Roman" SIZE 14 DEFINE FONT Font_2 FONTNAME "Times New Roman" SIZE 11 AADD( aFont, GetFontHandle( "Font_1" ) ) AADD( aFont, GetFontHandle( "Font_2" ) ) DEFINE WINDOW MAGAZIN AT GetDesktopRealTop(),GetDesktopRealLeft() ; WIDTH WidthWindow_MyApl ; HEIGHT HighWindow_MyApl ; TITLE "TEST" ; MAIN ; NOMAXIMIZE NOSIZE DEFINE STATUSBAR OF MAGAZIN STATUSITEM "1" WIDTH 0 FONTCOLOR BLACK STATUSITEM "2" WIDTH 230 FONTCOLOR BLACK STATUSITEM "3" WIDTH 230 FONTCOLOR BLACK STATUSITEM "4" WIDTH 230 FONTCOLOR BLACK DATE WIDTH 80 CLOCK WIDTH 75 KEYBOARD WIDTH 80 END STATUSBAR //ON KEY ESCAPE OF MAGAZIN ACTION DoMethod("MAGAZIN","Release") Magaz_po("MAGAZIN") //ON KEY ESCAPE OF MAGAZIN ACTION DoMethod("MAGAZIN","Release") END WINDOW DoMethod("MAGAZIN","Activate") return ************************ Func Magaz_po(cforma) local i := 0 local aDatos := {} for i := 1 to 1000 AADD( aDatos, {" ", ntoc(i), ntoc(i) + "_123", dtoc(date()),dtoc(date()),"Поставщик - " + ntoc(i), (10000-i) * i/3,str(random(100)),"0.12","123.00","Иванов",dtoc(date()),time() } ) end public oBrw DEFINE TBROWSE oBrw AT 17,0 ; OF MAGAZIN WIDTH MAGAZIN.WIDTH-2*GetBorderWidth() ; HEIGHT MAGAZIN.HEIGHT-GetTitleHeight()-GetTitleHeight() -; GetProperty("MAGAZIN", "StatusBar", "Height") -2*GetBorderHeight(); ; //ENUMERATOR нумерация колонок в header GRID ; FONT "Lucida Console" SIZE 12 END TBROWSE oBrw:SetArray( aDatos,.t. ) oBrw:nWheelLines := 1 oBrw:nClrLine := COLOR_GRID oBrw:lNoChangeOrd := TRUE oBrw:lCellBrw := TRUE // oBrw:lNoVScroll:= TRUE // oBrw:lNoHScroll:= TRUE for i := 1 To oBrw:nColCount() oBrw:aColumns:lFixLite := TRUE oBrw:aColumns:lEdit := TRUE end oBrw:nHeightCell += 6 oBrw:nHeightHead += 12 oBrw:HideColumns( 11, .T. ) oBrw:HideColumns( 12, .T. ) oBrw:HideColumns( 13, .T. ) oBrw:aColumns[ 1 ]:cHeading :="*" oBrw:aColumns[ 1 ]:nWidth :=15 oBrw:aColumns[ 2 ]:cHeading :="№"+CRLF+"склада" oBrw:aColumns[ 3 ]:cHeading :="№"+CRLF+"накладной" oBrw:SetColSize( 3, 80 ) oBrw:aColumns[ 4 ]:cHeading :="накладной" oBrw:aColumns[ 5 ]:cHeading :="оплаты" oBrw:AddSuperHead( 4, 5, "Дата") oBrw:aColumns[ 4 ]:nAlign :=DT_CENTER oBrw:aColumns[ 5 ]:nAlign :=DT_CENTER oBrw:SetColSize( 4, 80 ) oBrw:SetColSize( 5, 80 ) oBrw:aColumns[ 6 ]:cHeading :="Поставщик" oBrw:SetColSize( 6, 200 ) oBrw:aColumns[ 7 ]:cHeading :="с доставкой" oBrw:aColumns[ 8 ]:cHeading :="без"+CRLF+"доставки" oBrw:aColumns[ 9 ]:cHeading :="доставки" oBrw:aColumns[ 10 ]:cHeading :="продажная" oBrw:SetColSize( 7, 90 ) oBrw:SetColSize( 8, 90 ) oBrw:SetColSize( 9, 90 ) oBrw:SetColSize( 10, 90 ) oBrw:aColumns[ 7 ]:nAlign :=DT_RIGHT oBrw:aColumns[ 8 ]:nAlign :=DT_RIGHT oBrw:aColumns[ 9 ]:nAlign :=DT_RIGHT oBrw:aColumns[ 10 ]:nAlign :=DT_RIGHT oBrw:AddSuperHead( 7, 10, "Сумма") oBrw:nAdjColumn := 6 oBrw:aColumns[ 11 ]:cHeading :="пользователь" oBrw:aColumns[ 12 ]:cHeading :="дата" oBrw:aColumns[ 13 ]:cHeading :="время" oBrw:AddSuperHead( 11, 13, "Создана") oBrw:SetColor( { 1 }, { { || CLR_BLACK } },1 ) // цвет курсора obrw:lCanSelect:=.t. oBrw:SetColor( { 6 }, { { |a,b,c| IF( c:nCell == b, { Rgb( 66, 255, 236 ), Rgb( 111, 183, 155 ) } , { Rgb( 220, 220, 220 ), Rgb( 220, 220, 220 ) }) } } ) // фон курсора //oBrw:ChangeFont( { |a,b,c| IF(c:nAt == c:nLogicPos(), aFont[1], aFont[2]) } ,, ) oBrw:bOnDraw := {|| MAGAZIN.Title := "Дырка: "+ntoc(GetHole())+" nRowCount():"+ntoc(obrw:nRowCount()) , oBrw:DrawFooters() } //oBrw:nHeightHead +=Gethole() //sTBrwHeight( oBrw ) obrw:display() return nil ***************************** FUNCTION sTBrwHeight( oBrw ) // уст. реальный размер TBrowse LOCAL nHeightCell := oBrw:nHeightCell LOCAL nHeightHead := oBrw:nHeightHead LOCAL nHeightFoot := oBrw:nHeightFoot LOCAL nHeightSpecHd := oBrw:nHeightSpecHd LOCAL nHeightSuper := oBrw:nHeightSuper LOCAL nLineStyle := oBrw:nLineStyle LOCAL nRowHeight := oBrw:nRowCount() * nHeightCell LOCAL nBrwH := GetwindowHeight(oBrw:hWnd) LOCAL nDelta nHeight := nHeightSuper + ; nHeightHead + ; nHeightSpecHd + ; nRowHeight + ; nHeightFoot +1 IF ! oBrw:lNoHScroll nDelta := nBrwH - nHeight IF nDelta > 0 .and. nHeightCell > nDelta nHeight += nHeightCell - nDelta - 2 ENDIF ENDIF SetProperty(oBrw:cParentWnd, oBrw:cControlName, 'Height', nHeight) RETURN nHeight ***************** Func GetHole() local WorkHeight := oBrw:nHeight-oBrw:nHeightHead-oBrw:nHeightSuper-; oBrw:nHeightFoot-oBrw:nHeightSpecHd-if(!oBrw:lNoHScroll,16,0) RETURN WorkHeight-Int(WorkHeight/oBrw:nHeightCell)*oBrw:nHeightCell *************** #pragma BEGINDUMP #define HB_OS_WIN_32_USED #define _WIN32_WINNT 0x0400 #include <windows.h> #include "hbapi.h" HB_FUNC (GETDESKTOPREALTOP) { RECT rect; SystemParametersInfo( SPI_GETWORKAREA, 1, &rect, 0 ); hb_retni(rect.top); } HB_FUNC (GETDESKTOPREALLEFT) { RECT rect; SystemParametersInfo( SPI_GETWORKAREA, 1, &rect, 0 ); hb_retni(rect.left); } HB_FUNC (GETDESKTOPREALWIDTH) { RECT rect; SystemParametersInfo( SPI_GETWORKAREA, 1, &rect, 0 ); hb_retni(rect.right - rect.left); } HB_FUNC (GETDESKTOPREALHEIGHT) { RECT rect; SystemParametersInfo( SPI_GETWORKAREA, 1, &rect, 0 ); hb_retni(rect.bottom - rect.top); } HB_FUNC ( FINDWINDOW ) { hb_retnl( ( LONG ) FindWindow( 0, hb_parc( 1 ) ) ); } #pragma ENDDUMP [/pre]

Dima: Но там не только это название не влезло по ширине в хидер , что без правки что с ней. Ширину колонки можно и нужную задать. В примере это не было целью. Но мысль я думаю Вы уже поняли. gfilatov2002 пишет: но обрати внимание после этого изменения на отображение восьмой колонки "без доставки" Все нормально с ней. Хидер на месте да и данные в таблице. Нет ?

gfilatov2002: Dima пишет: данные в таблице Нажми стрелку вниз и следи за данными в этой колонке. Во всех строках выше нижней будет дублирование данных одной и той же ячейки. Для устранения этой проблемы и требуется дополнительная перерисовка в текущем коде...

Dima: gfilatov2002 Собрал этот пример. Проблемы не увидел. Ездил долго. Можете выложить свой EXE (этого примера) , хочу его пощупать !? В колонке 8 стоит str(random(100)) , так что да, данные могут и дублироваться в строках. Стоит его заменить на что то не рандомное и проблемы нет. И все же жду EXE , если не сложно.

Haz: мерцание как на елочной гирлянде :) Дополню, причина мерцания в логике алгоритма - строка с курсором постоянно перекрашивается : Как стандартно отрабатывается :GoDown() когда курсор в последней строке. 1. Курсор в последней строке , она раскрашена в соответствии с :SetColor( {5,6} … ) 2. К позиции курсора ( в последней строке ) применяется метод :DrawLine() в результате чего вся строка перекрашивается установленными цветами :SetColor( {1,2} … ) Т.е. строка курсора сменила цвет. 3. Производится вызов скрола ВСЕГО окна бровса вверх на высоту одной строки. В этот момент строка курсора по прежнему соответствует :SetColor( {1,2} … ) 4. К позиции курсора ( в последней строке ) применяется метод :DrawSelect() в результате чего вся строка перекрашивается установленными цветами :SetColor( {5,6} … ) Видим, что между 1 и 4 строка курсора МЕНЯЕТ цвет , отсюда и мигания Как предлагается отрабатываеть :GoDown() когда курсор в последней строке. 1. Курсор в последней строке , она раскрашена в соответствии с :SetColor( {5,6} … ) 2. Производится вызов скрола окна бровса БЕЗ последней строки вверх на высоту одной строки. В этот момент строка курсора по прежнему остается :SetColor( {5,6} … ) 3. К строке ::nRowPos – 1 применяется метод :DrawLine() для обновления данных 4. К позиции курсора ( в последней строке ) применяется метод :DrawSelect() для обновления данных Видим, что между 1 и 4 строка курсора НЕ МЕНЯЕТ цвет PS при :GoUp() все зеркально

Dima: Дополню , так как забыл о правке еще одной в методе GoDown() было [pre2] If lTranspar //V90 ::Paint() //V90 Else //V90 ::nRowPos := nLines ::TSBrwScroll( 1 ) EndIf //V90 [/pre2] Стало [pre2] If lTranspar //V90 ::Paint() //V90 Else //V90 ::nRowPos := nLines ::TSBrwScroll( 1 ) ::Skip(-1) ::DrawLine( ::nRowPos -1 ) // добавил 10.07.2015 ::Skip(+1) EndIf //V90 [/pre2]

gfilatov2002: Dima пишет: забыл о правке еще одной Эта правка решает проблему с дублированием данных в 8-й колонке при движении вниз по таблице. Принимается с благодарностью за настойчивость

Dima: gfilatov2002 Cишник тоже надо поправить , Has выше написал для чего. Сорри что дергаю

gfilatov2002: Dima пишет: Cишник тоже надо поправить Да, уже сделал (я рассматривал эти правки а одном пакете) Теперь все изменения выглядят в changelog так: * Updated: Adaptation FiveWin Class TSBrowse 9.0 in HMG: - correction of calculation of total column width in the Method ReSize; - minor correction in the Method GoUp; - conspicuous reducing of cursor blinking in the Method GoDown; - correction of a rare bug in the Method PageUp; - used SRCAND raster in the C-function DrawBitmap(); - added handling of <Enter>/<Space> keys similar to LDblClick action; - added the new TSColumn variable cName for optional column name. Contributed by users from the Russian HMG forum. Если есть замечания к этому тексту - пишите...

Dima: gfilatov2002 пишет: Если есть замечания к этому тексту - пишите... Все в порядке ! Ждем RC3 (Bcc и MinGW). ЗЫ Будут еще полезняхи от users from the Russian HMG forum , работаем над этим ;)

SergKis: gfilatov2002 пишет:... - added the new TSColumn variable cName for optional column name. Может стоит добавить метод для получения номера колонки по имени cName в TsBrowse, типа METHOD nColumn( cName ) ... а то получается cName есть, а добыть по нему номер колонки нет, надо городить что то дополнительно

Haz: SergKis пишет: Может стоит добавить метод для получения номера колонки по имени Согласен правда там весь огород в одну строку получился METHOD nColumn( cName ) INLINE MAX( AScan( ::aColumns, {|oCol| UPPER(oCol:cName) == UPPER( cName ) } ), 1 )

SergKis: Haz пишет:правда там весь огород в одну строку получился METHOD nColumn( cName ) INLINE MAX( AScan( ::aColumns, {|oCol| UPPER(oCol:cName) == UPPER( cName ) } ), 1 ) Огород - это когда в каждый проект сувать FUNCTION nColumn( oBrw, cName ) RETURN MAX( AScan( oBrw:aColumns, {|oCol| UPPER(oCol:cName) == UPPER( cName ) } ), 1 )

Dima: Haz пишет: + SergKis пишет: :) правда там весь огород в одну строку получился Действительно почему бы не добавить , мелочь а приятно да и полезно. Вроде даже в Xbrowse FW такого нет (могу ошибаться , так как слез с него...).

Haz: SergKis пишет: Огород - это когда в каждый проект сувать Да я за не хочу в каждый проект

gfilatov2002: Dima пишет: почему бы не добавить Добавил метод METHOD nColumn( cName ), и теперь требуется небольшой пример для проверки/демонстрации этих изменений

Haz: gfilatov2002 пишет: теперь требуется небольшой пример для проверки/демонстрации этих изменени когда нужно ? сделаем !

gfilatov2002: Haz пишет: когда нужно ? До понедельника терпит...

Haz: gfilatov2002 пишет: Добавил метод METHOD nColumn( cName ), У меня как INLINE его добавить не вышло , описал обычным вызовом Григорий , еще дополнение CLASS TSBROWSE добавить переменную ( позволит ловить строку в которой курсор ) DATA lDrawSelect AS LOGICAL INIT .F. в методе DrawSelect() ее переключать перед lSelected := ::lCanSelect .and. ( AScan( ::aSelected, If( ::lIsDbf, ( ::cAlias )->( RecNo() ), ::nAt ) ) ) > 0 добавить ::lDrawSelect := TRUE перед return Self добавить ::lDrawSelect := FALSE ***************************************************** Пример использование будет в примере ) oBrw:ChangeFont( { || IF(oBrw:lDrawSelect, aFont[2], aFont[1]) } ,, ) - меняем шрифт в строке курсора на жирный

gfilatov2002: Haz пишет: добавить переменную Принимается Haz пишет: использование будет в примере Уже интересно

Haz: gfilatov2002 пишет: Уже интересно тут лежит http://files.icq.net/get/u5MzLxXRzQVfYBkIbGxT9M55a8f0ac1be PS Пример собран на библиотеке с учетом всех предложенных изменений

gfilatov2002: Haz пишет: Пример собран на библиотеке Благодарю за пример - работает отлично! Я его уже отформатировал и включил в новую сборку

Andrey: Haz пишет: Пример собран на библиотеке с учетом всех предложенных изменений Пример КЛАССНЫЙ !

Andrey: gfilatov2002 пишет: Я его уже отформатировал и включил в новую сборку Наверно ОЧЕНЬ нужно бы поставить комментарии для: oBrw:SetArray( aDatos,.t. ) oBrw:nWheelLines := 1 oBrw:nClrLine := COLOR_GRID oBrw:lNoChangeOrd := TRUE oBrw:lCellBrw := TRUE oBrw:lNoVScroll := TRUE oBrw:hBrush := CreateSolidBrush( 242, 245, 204 ) Не все же разбираются ...

Dima: Andrey пишет: Наверно ОЧЕНЬ нужно бы поставить комментарии для: А ты похоже не понял , про себя же написал ? Мне понятно , хотя я на Минигуи без году неделя. Has на моей памяти раз 5 указывал тебе , смотри сырец Раз тебе лень , сделаю за тебя....... [pre2] DATA l2007 AS LOGICAL INIT .F. //V90 // new look 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 DATA lFilterMode AS LOGICAL INIT .F. READONLY // index based filters with NTX RDD 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 INIT .T. //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 lPopupUser AS LOGICAL INIT .F. //New // activates user defined popup menu 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 [/pre2] Это только по логическим данным , остальное там же ... в сырце и нет смысла дублировать сюда.

Andrey: Dima пишет: Раз тебе лень , сделаю за тебя Дима, я понял. Просто другие новички не поймут. В своих примерах я стараюсь комментировать что мне было непонятно. Так как Григорий уже добавил этот пример к себе, то мои комментарии к этому примеру уже не пойдут.

Haz: gfilatov2002 пишет: Я его уже отформатировал и включил в новую сборку Григорий если не поздно/ не сложно , то еще два места дополнить которые ссылаются на номер колонки 1 Первой строкой в метод SetData() CLASS TSBROWSE добавить nColumn := IF( Valtype( nColumn) == "C", ::nColumn( nColumn ), nColumn ) 2 Первой строкой в функцию ComboWBlock CLASS TSCOLUMN добавить nCol := IF( Valtype( nCol) == "C", oBrw:nColumn( nCol ), nCol ) и далее по коду после else условия if oBrw:lIsDbf перед If aData == Nil вставить Else // editing an array uField is the array element number uField := IF( Valtype( uField ) == "C", oBrw:nColumn( uField ), uField ) If aData == Nil ЗЫ: можно конечно и не править , но при обращении по имени код получается громоздкий oBrw:SetData( oBrw:nColumn("TEXT") , ComboWBlock( oBrw, oBrw:nColumn("TEXT") , oBrw:nColumn("TEXT") , aCombo ) ) вместо oBrw:SetData( "TEXT" , ComboWBlock( oBrw, "TEXT" , "TEXT" , aCombo ) ) если чего еще выловлю - позже скину

gfilatov2002: Haz пишет: если не поздно/ не сложно , то еще два места дополнить Сделаю, конечно

SergKis: Haz пишет:uField := IF( Valtype( uField ) == "C", oBrw:nColumn( uField ), uField ) что бы везде не писать проверку на valtype == C, может ее спрятать в саму nColumn и добавить METHOD nColumn(xName, nDefCol) DEFAULT nDefCol := 1 IF valtype(xName) == 'N' RETURN iif( xName > 0 .and. xName <= Len( ::aColumns ), xName, nDefCol) ENDIF RETURN MAX( AScan( oBrw:aColumns, {|oCol| UPPER(oCol:cName) == UPPER( cName ) } ), nDefCol )

SergKis: PS. правильней RETURN MAX( AScan( oBrw:aColumns, {|oCol| UPPER(oCol:cName) == UPPER( xName ) } ), nDefCol )

Haz: gfilatov2002 пишет: Сделаю, конечно Григорий, еще поправочки Метод ::HideColumn - аналогично первой строкой nColumn := IF( Valtype( nColumn) == "C", ::nColumn( nColumn ), nColumn ) или как предлагает Сергей - саму проверку == "С" спрятать в метод ::nColumn() т.к. таких проверок становится больше Ранее предлагалось вот это изменение метода LoadFilds() TSBROWSE для автоматического назначения имен колонок по имени поля добавить в метод строку ATail( ::aColumns ):cName := FieldName( nE ) Погонял поплотнее - работает только если находимся в текущем алиасе. Правильно будет так ATail( ::aColumns ):cName := (::cAlias) -> ( FieldName( nE )) в коде метода ::LoadFields место этой правки логично сразу после похожего кода который там уже есть ATail( ::aColumns ):cData := ::cAlias + "->" + FieldName( nE ) PS: сижу не спеша старый проект переписываю под символьные имена колонок , визуально код становится значительно читабильнее

SergKis: SergKis пишет:добавить METHOD nColumn(xName, nDefCol) Добавка для таких действий IF oBrw:nColumn("NAME1", 0) > 0 // есть группа колонок ELSE // нет группы колонок, добавим ... ENDIF вместо проверок через ascan

gfilatov2002: Haz пишет: Правильно будет так ATail( ::aColumns ):cName := (::cAlias) -> ( FieldName( nE )) Благодарю за поправку! Haz пишет: Метод ::HideColumn - аналогично Сделал

gfilatov2002: Новый релиз библиотеки для компилятора BCC выложил, как и обещал, на официальном сайте библиотеки по адресу: http://hmgextended.com/files/CONTRIB/hmg-2.4.9-setup.zip Также доступна полная сборка для компилятора MinGW по адресу: http://hmgextended.com/files/CONTRIB/hmg249-mingw.exe и компактный архив для свежей версии компилятора xHarbour http://hmgextended.com/files/CONTRIB/xhmg249_xhb10129.zip Прошу отписаиться тех, кто скачает И ИСПОЛЬЗУЕТ в работе данную сборку Благодарю за внимание

Dima: gfilatov2002 пишет: Прошу отписаиться тех, кто скачает И ИСПОЛЬЗУЕТ в работе данную сборку Использую в своих тестах. Все нормально ! Спасибо за работу

SergKis: gfilatov2002 [pre2] Начал переносить в свой проект и обратил внимание: В добавленном куске KeyDown Case !::lCellbrw .and. ( nKey == VK_RETURN .or. nKey == VK_SPACE ) .and. ::bLDblClick != Nil // 14.07.2015 Eval( ::bLDblClick ) в вызове хртелось бы уточнения, чем вызывали VK_RETURN или VK_SPACE В METHOD LDblClick( nRowPix, nColPix, nKeyFlags ) имеем выполнение ... ElseIf ::bLDblClick != Nil Eval( ::bLDblClick, uPar1, uPar2, nKeyFlags ) EndIf ... If ::bLDblClick != Nil .and. ::aActions == Nil Eval( ::bLDblClick, uPar1, uPar2, nKeyFlags ) Else имеем рассогласование вызова по параметрам Просканировал h_tbrowse.prg CLASS TSBrowse на Eval( оказалось в некоторых местах Self передается в блок кода, во многих нет. Может есть смысл скорректировать Eval-ы, добавив self. [/pre2]

gfilatov2002: SergKis пишет: в вызове хртелось бы уточнения, чем вызывали Добавил Eval( ::bLDblClick, Nil, nKey, nFlags ) SergKis пишет: имеем рассогласование вызова по параметрам Да, верно. Но мы же смешали здесь мышку с клавиатурой Вообще, хочу этот кусок заключить в #ifdef __EXT_SELECTION__ ... #endif т.е. код используется теми, кому он реально нужен...

SergKis: gfilatov2002 пишет:Добавил Но мы же смешали здесь мышку с клавиатурой мыша вызывает ::LDblClick(...), здесь клава и добавки Eval( ::bLDblClick, Nil, nKey, nFlags ) на мой взгляд достаточно. А различить, что вызывало, надо в случае, если на DblClick и Return повешен вызов, а на space снять\поставить галочку или ничего. А как насчет Self в eval(...) последним параметром к существующим ? Eval( ::bLDblClick, Nil, nKey, nFlags, Self ) if nValue > 0 .AND. nValue <= Eval(::bLogicLen, Self) // JP 1.59 Eval(::bGoToPos, nValue, Self) endif и так далее

SergKis: gfilatov2002 пишет:Вообще, хочу этот кусок заключить в #ifdef __EXT_SELECTION__ ... #endif т.е. код используется теми, кому он реально нужен... на мой взгляд это лишнее. Можно поступить проще для Tsb: 1- завести DATA массив назначения клавиш 2- метод установки клавиш и блока кода в массив (аналогия set key в clipper) 3- метод добычи блока из массива установки 4- дефаультный метод (ф-ия) устанавливаемый в п. 1 в bUserKeyDown при использовании данной методики пример (на функциях) кидал Dime (перенес из своего проекта Tsb) и где то у меня есть. Если это интересно ? эта метода не затрагивает нынешнюю технологию работы с KeyDown

Andrey: gfilatov2002 пишет: Прошу отписаиться тех, кто скачает И ИСПОЛЬЗУЕТ в работе данную сборку Перешёл, и облом... С цветами белиберда получается - пока нашёл у LABEL и TAB и DRAW LINE. Подробности отправил в письме.

Haz: gfilatov2002 пишет: Прошу отписаиться тех, кто скачает И ИСПОЛЬЗУЕТ в работе данную сборку Григорий, пересобрал крупный проект, глюков не заметил

gfilatov2002: Haz пишет: глюков не заметил Благодарю за Ваш отзыв Начал работу над следующей сборкой 2.5.0

Haz: gfilatov2002 пишет: Начал работу над следующей сборкой Григорий , тогда в метод DelColumn(nPos) можно добавить такую же проверка на тип переменной nPos как и в HedeColumn() ? ЗЫ Есть в tsb глюк , причину которого не могу выловить давно - если в ON CHANGe вставить вызов метода Refresh() то при скроле длинной таблицы стрелками вниз -вверх не отпуская кнопки , бровс виснет так что только через процессы задача рубится . Если периодически клавиши вверх-низ отпускать - то не виснет. Похоже на переполнение какого нить стека комманд , но пока так и не понял куда копать

gfilatov2002: Haz пишет: в метод DelColumn(nPos) можно добавить такую же проверка на тип переменной nPos Сделал

Dima: Andrey пишет: С цветами белиберда получается - пока нашёл у LABEL Синтаксис вроде ж не менялся.... Всегда можно посмотреть i_label.ch

gfilatov2002: Dima пишет: Синтаксис вроде ж не менялся В этой сборке действительно есть ошибка при отображении LABEL на цветном TABе. Исправленный бинарник библиотеки я выложил для тестирования по адресу http://hmgextended.com/files/MISC/minigui-lib.zip Жду Ваших комментариев...

Andrey: gfilatov2002 пишет: Жду Ваших комментариев... Цвета пришли в норму !

gfilatov2002: Andrey пишет: Цвета пришли в норму Сделал "тихий" апдейт сборки 2.4.9 с этим исправлением

sashaBG: В TSBROWSE есть еще проблема с селектором ! У меня в бровсе добавляется лишняя колонка Можно проверить ! Вот интересно в примерах например один и тот же код в TSBTEST.PRG работает правильно (строка 547 ) DEFINE TBROWSE Brw_7 AT 0,0 CELLED ALIAS "Employee" Transparent Selector "Bitmaps\Arrow.bmp" ; WIDTH nBrwWidth HEIGHT nBrwHeight ; COLORS {CLR_BLACK, CLR_PINK} ; MESSAGE "oBrw:bPrevEdit and oBrw:bPostEdit, can control the footer's value." а в TSB_MDI.PRG (строка 692) если добавить такой селектор не работает и получается етот ефект с добавлением лишней колонки лишняя колонка не позволяет правильно работать в режиме добавления данных (стрелкой в низ) Все остальное при переходе на етой сборки и меня без проблем ! СПАСИБО ГРИГОРИЙ !!!

Haz: sashaBG пишет: В TSBROWSE есть еще проблема с селектором ! есть, но раз строка курсора теперь ловится легко через lDrawSelet можно прикрутить и свой селектор через дублирование первой колонки , изменения блока выборки и показа картинки в виде треугольника Согласен это не выход, но хоть что то ))

gfilatov2002: Выпустил внеочередной релиз библиотеки с последними исправлениями обнаруженных ошибок Сборка для компилятора BCC лежит на официальном сайте библиотеки по адресу: http://hmgextended.com/files/CONTRIB/hmg-2.5.0-setup.zip Также доступна сборка для компилятора MinGW по адресу: http://hmgextended.com/files/CONTRIB/hmg250-mingw.exe и компактный архив для свежей версии компилятора xHarbour http://hmgextended.com/files/CONTRIB/xhmg250_xhb10130.zip Благодарю за внимание

Andrey: Привет ! Опять с новой версией беда - с ходу вылезла старая ошибка цветов. Только теперь серый цвет:

Andrey: Григорий, так как насчёт цветов в новой версии ?

gfilatov2002: Andrey пишет: как насчёт цветов Нужен тестовый пример, демонстрирующий проблему. Вот мой тестовый пример ниже [pre2]/* * MINIGUI - Harbour Win32 GUI library Demo * */ #include "minigui.ch" #include "TSBrowse.ch" #translate dbcreate(<file>, <struct>) => hb_dbcreatetemp(<file>, <struct>) Function Main dbcreate('test',{{'nazwa','C',30,0},; {'ilosc','N',12,2},; {'cena','N',14,2}}) if select('test') == 0 dbusearea(.t.,,'test') endif for i := 1 to 100 test->(dbappend()) test->nazwa := "Item " + hb_ntos(i) test->ilosc := test->(recno()) test->cena := (test->ilosc * HB_Random(100)) next test->(dbgotop()) define window tabsample at 0,0 width 400 height 300 title 'Add control test' main backcolor AQUA DEFINE TBROWSE Brw_1 AT 10, 10 OF o_dlu ALIAS "test" WIDTH 330 HEIGHT 120 ADD COLUMN TO Brw_1 DATA {|| test->nazwa } ALIGN DT_LEFT, DT_CENTER, DT_CENTER ; TITLE 'Nazwa' SIZE 100 ADD COLUMN TO Brw_1 DATA {|| test->ilosc } ALIGN DT_RIGHT, DT_CENTER,DT_CENTER TITLE 'Ilosc' SIZE 70 ADD COLUMN TO Brw_1 DATA {|| test->cena } ALIGN DT_RIGHT, DT_CENTER, DT_CENTER TITLE 'Cena' SIZE 70 Brw_1:SetColor( { 2 }, { { | | IIf( test->(OrdKeyNo()) % 2 == 0, RGB(255,255,255), RGB(200, 200, 200) ) }}) Brw_1:nHeightCell += 6 Brw_1:nHeightFoot += 4 Brw_1:nWheelLines := 1 Brw_1:nHeightHead := 14 END TBROWSE tabsample.Brw_1.Hide define tab tab1 at 10,10 width 370 height 220 backcolor AQUA define page 'Page1' define button b1 row 30 col 10 caption 'Press here to add a control' width 180 action addnewcontrols({'lbl1','text1'}) end button end page define page 'Page2' define button b2 row 30 col 10 caption 'Press here to add a control' width 180 action addnewcontrol2('Brw_1') end button end page end tab on key escape action thiswindow.release() end window tabsample.center tabsample.activate Return nil function addnewcontrols(actrl) local c1, c2 c1 := actrl[1] c2 := actrl[2] if iscontroldefined(&c1,tabsample) tabsample.&(c1).release endif define label &c1 parent tabsample row 50 col 10 width 40 value 'label' backcolor AQUA end label if iscontroldefined(&c2,tabsample) tabsample.&(c2).release endif define textbox &c2 parent tabsample row 50 col 50 width 100 end textbox tabsample.tab1.addcontrol(c1,1,84,10) tabsample.tab1.addcontrol(c2,1,80,50) return nil function addnewcontrol2(ctrl) if iscontroldefined(&ctrl,tabsample) tabsample.&(ctrl).Show endif tabsample.tab1.addcontrol(ctrl,2,80,10) return nil[/pre2]

Andrey: gfilatov2002 пишет: Нужен тестовый пример, демонстрирующий проблему. Я его уже посылал почтой - Tab_transfer6.prg ! Если потерялся, то могу заново выслать.

gfilatov2002: Andrey пишет: Tab_transfer6.prg Этот пример нашел - вечером пробну

gfilatov2002: Andrey пишет: как насчёт цветов в новой версии ? Исправленный бинарник библиотеки я выложил для тестирования по адресу http://hmgextended.com/files/MISC/minigui-lib.zip

Andrey: gfilatov2002 пишет: Исправленный бинарник библиотеки я выложил для тестирования по адресу Цвета заработали ! Спасибо БОЛЬШОЕ !

Andrey: Вот еще нашёл одну непонятку:

Andrey: sashaBG пишет: В TSBROWSE есть еще проблема с селектором ! У меня в бровсе добавляется лишняя колонка Тоже наткнулся на такую бяку: Вот пример из \MiniGUI\SAMPLES\Advanced\Tsb_config - то же два селектора: Как править то ?

Dima: Andrey пишет: Тоже наткнулся на такую бяку: Haz пишет: есть, но раз строка курсора теперь ловится легко через lDrawSelet можно прикрутить и свой селектор через дублирование первой колонки , изменения блока выборки и показа картинки в виде треугольника Согласен это не выход, но хоть что то ))

SergKis: gfilatov2002 Григорий, можно добавить в TSColumn парамметер cName в Method New(..., cName) Default cName := "" и в соответствующие #command для колонок задание cName

gfilatov2002: SergKis пишет: можно добавить в TSColumn парамметер cName Ваша идея понятна Присылайте готовую реализацию для проверки и включения в следующую сборку

SergKis: gfilatov2002 пишет:Присылайте готовую реализацию [pre2] TSColumn.prg ~~~~~~~~~~~~ ... METHOD New( cHeading, bData, cPicture, aColors, aAlign, nWidth, ; lBitMap, lEdit, bValid, lNoLite, cOrder, cFooting, ; bPrevEdit, bPostEdit, nEditMove, lFixLite, a3DLook, ; bWhen, oBrw, cData, cWhen, cValid, cPrevEdit, cPostEdit, cMsg, cToolTip, lTotal , ; lSpinner, bUp, bDown, bMin, bMax, cError, cSpcHeading,; cDefData, cName ) CLASS TSColumn ... Default cHeading := "" , ; bData := {|| Nil } , ; cData := "{|| Nil }" , ; ... lTotal := .F. , ; //V90 cName := "" ::cName := cName If ValType( cHeading ) == "O" ::uBmpHead := cHeading ... i_tsbrowse.ch ~~~~~~~~~~~~~ ... #command DEFINE COLUMN <oCol> ; [ <dat: DATA, SHOWBLOCK> <uData> ] ; ... [ <total: TOTAL, TOTALIZE> ] ; [ NAME <name> ] ; => ; <oCol> := TSColumn():New( ; ... [<cMsg>], [ <cToolTip> ], [ <.total.> ], [ <"name"> ]) ... #command ADD [ COLUMN ] TO [ TBROWSE ] <oBrw> ; [ <dat: DATA, SHOWBLOCK> <uData> ] ; ... [ <total: TOTAL, TOTALIZE> ] ; [ NAME <name> ] ; => ; <oBrw>:AddColumn( TSColumn():New( ; ... [<(bPostBlock)>], [<cMsg>], [ <cToolTip> ], [ <.total.> ], [ <"name"> ] ) ) ... #command ADD [ COLUMN ] TO [ TBROWSE ] <oBrw> [ DATA ] ARRAY ; [ <el: ELM, ELEMENT> <elm> ] ; ... [ <total: TOTAL, TOTALIZE> ] ; [ NAME <name> ] ; => ; <oBrw>:AddColumn( TSColumn():New( ; ... [<cMsg>], [ <cToolTip> ], [ <.total.> ], [ <"name"> ]) ) ... #command ADD [ COLUMN ] TO [ TBROWSE ] <oBrw> [ DATA ] ; <fi: oDBF, FIELD> [FIELD] <field> ; ... [ <total: TOTAL, TOTALIZE> ] ; [ NAME <name> ] ; => ; <oBrw>:AddColumn( TSColumn():New( ; ... [ <(bPrevBlock)> ], [<(bPostBlock)>], [<cMsg>], [ <cToolTip> ], [ <.total.> ], [ <"name"> ])) ... [/pre2]

gfilatov2002: SergKis Благодарю за помощь Принято с поправкой, что между [ <.total.> ] и [ <"name"> ] расположены еще 8 переменных

SergKis: gfilatov2002 пишет: между [ <.total.> ] и [ <"name"> ] расположены еще 8 переменных пока выделял <"name"> bold-ом забыл про запятые. Еще ошибочка при SpecHd, если нет Footer все хорошо, с Footer криво [pre2] METHOD DrawHeaders( lFooters ) CLASS TSBrowse ... IF ::lDrawSpecHd ... TSDrawCell( hWnd, ; // 1 hDC, ; // 2 0, ; // 3 nStartCol, ; // 4 aColSizes[nJ], ; // 5 cHeading, ; // 6 nAlign, ; // 7 nClrFore, ; // 8 nClrBackS, ; // 9 hFont, ; // 10 hBitMap, ; // 11 nHeightFoot, ; // 12 надо 0 вместо nHeightFoot l3DLook, ; // 13 1, ; // 14 nLineStyle nClrLine, ; // 15 4, ; // 16 1=Header 2=Footer 3=Super 4=Special nHeightHead, ; // 17 nHeightFoot, ; // 18 nHeightSuper, ; // 19 nHeightSpecHd, ; // 20 lAdjBmp, ; // 21 .f., ; // 22 nVAlign, ; // 23 0, ; // 24 nVertText nClrToS, ; // 25 lOpaque, ; // 26 If( lBrush, ; nClrBackS:hBrush, 0 ), ; // 27 l3DText, ; // 28 3D text nClr3dL, ; // 29 3D text light color nClr3dS ) // 30 3D text shadow color [/pre2] элемент // 12 надо 0 вместо nHeightFoot, тогда с прорисовкой SpecHd все Ok с Footer и без

gfilatov2002: SergKis пишет: элемент // 12 надо 0 вместо nHeightFoot Благодарю, уже поправил для новой сборки

SergKis: gfilatov2002 А можно еще немного изменений ? [pre2] TSColumn.prg ~~~~~~~~~~~~ ... CLASS TSColumn ... DATA lOnGotFocusSelect AS LOGICAL INIT .F. // .T. - SendMessage( GetBoxHandle, EM_SETSEL, 0, -1 ) ... ENDCLASS h_tbrowse.prg ~~~~~~~~~~~~~ ... #define EM_SETSEL 177 ... Function LoadFields( ControlName, ParentForm, lEdit, aFieldNames) Local ix, oBrw Default lEdit := .f. ix := GetControlIndex (ControlName,ParentForm) oBrw := _HMG_aControlIds [ix] if ISARRAY(aFieldNames) oBrw:aColSel := aFieldNames endif oBrw:LoadFields(lEdit) Return oBrw // было Nil Function SetArray( ControlName, ParentForm, Arr, lAutoCols, aHead, aSizes ) Local ix, oBrw ix := GetControlIndex (ControlName,ParentForm) oBrw:= _HMG_aControlIds [ix] oBrw:SetArray(Arr, lAutoCols, aHead, aSizes) Return oBrw // было Nil ... METHOD Edit( uVar, nCell, nKey, nKeyFlags, cPicture, bValid, nClrFore, ; ... DO CASE CASE "TBTNBOX" $ Upper( oCol:oEdit:ClassName() ) oCol:oEdit:bLostFocus := Nil CASE "TGETBOX" $ Upper( oCol:oEdit:ClassName() ) ix := GetControlIndex ( ::cChildControl, ::cParentWnd ) _HMG_InteractiveCloseStarted := .T. if ix > 0 If oCol:lOnGotFocusSelect If ValType(uValue) == "C" _HMG_aControlGotFocusProcedure [ix] := {|| SendMessage( _HMG_aControlHandles [ix], EM_SETSEL, 0, If(empty(uValue), -1, Len(Trim(uValue))) ) } ElseIf ValType(uValue) $ "ND" _HMG_aControlGotFocusProcedure [ix] := {|| SendMessage( _HMG_aControlHandles [ix], EM_SETSEL, 0, -1 ) } EndIf EndIf _HMG_aControlLostFocusProcedure [ix] := { | nKey | ::EditExit( nCell, nKey, uValue, bValid, .F. ) } endif if Empty( ::bLostFocus ) ::bLostFocus := { || iif( _HMG_InteractiveCloseStarted, _HMG_InteractiveCloseStarted := .F., ) } endif ENDCASE ... [/pre2] выделенным изменения

gfilatov2002: SergKis пишет: еще немного изменений Добавлено с благодарностью

gfilatov2002: Просто к сведению. Выпустил сегодня предварительный релиз для следующей сборки 2.5.1. Финальный релиз запланирован на следующей неделе [pre2] * Enhanced: Added a third parameter nFlags (defined in the header file i_misc.ch) and fourth parameter lNewFolderButton to the function GetFolder() and the 3rd and 4th parameters cTitle, cInitPath to the function BrowseForFolder(). These parameters are an optional. If an initial path or BIF flag were not specified then a new UI with an editbox and validation will be used by default in the above functions. Syntax: GetFolder( [ Title ], [ InitPath ], [ BIF Flag ], ; [ New Folder Button ] ) -> Folder Name BrowseForFolder( [Folder Type], [ BIF Flag ], [ Title ], ; [ InitPath ] ) -> Folder Name Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo in folder \samples\Basic\GetFolder) * Enhanced: Tuning of a back color of the Slider, transparent CheckBox and RadioGroup controls at an owner-draw colored TAB. If the back color of above controls was not specified then it will be defined automatically as Tab's back color. Contributed by Grigory Filatov <gfilatov@inbox.ru> * Changed: Removed a silent assigning of 'Transparent' property to the Label and CheckBox controls when a such control was placed into a Tab control (introduced in the build 18). Contributed by Grigory Filatov <gfilatov@inbox.ru> * Updated: DO REPORT command: cleanup of using of the private variables. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo in folder \samples\Basic\DO_REPORT) * Updated: The header file i_winuser.ch used to resolve WinAPI constants. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see i_winuser.ch in folder \include) * Updated: Adaptation FiveWin Class TSBrowse 9.0 in HMG: - New: added handling of the var cName in TSColumn class; - New: added handling of a new Column var lOnGotFocusSelect; - Updated: minor correction in the function cValToChar(). Contributed by SergKis. * Updated: HbSQLite3 library: - update for using SQLITE3 version 3.8.11.1 (from 3.8.11). Contributed by Grigory Filatov <gfilatov@inbox.ru> * Updated: Harbour Compiler 3.2.0dev (SVN 2015-08-01 13:14): - added a new code for the function ASort(). Contributed by Przemyslaw Czerpak. Contributed by Grigory Filatov <gfilatov@inbox.ru> (look at ReadMe.txt in folder \harbour) * Updated: 'WAIT WINDOW with an expectation in a thread' sample. Contributed by Verchenko Andrey <verchenkoag@gmail.com>. (see demo2.prg in folder \samples\Basic\WAIT_WINDOW_2) * Updated: 'Paths' sample (demo functions for show system paths). Contributed by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Basic\Paths) * Updated: 'Process Information' sample is based on the ProcInfo library: - added a hung detection for the applications (based upon the undocumented WinAPI function IsHungAppWindow()); - added a test hunging application. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Advanced\ProcInfo) [/pre2]

SergKis: gfilatov2002 Еще предложение для TSBrowse Method SetArray2(...) [pre2] h_tbrowse.prg ~~~~~~~~~~~~~ ... Function SetArray2( ControlName, ParentForm, Arr, uFontHF, aHead, aSizes, uFooter, aPicture, aAlign, aName ) Local ix, oBrw ix := GetControlIndex (ControlName,ParentForm) oBrw:= _HMG_aControlIds [ix] oBrw:SetArray2(Arr, uFontHF, aHead, aSizes, uFooter, aPicture, aAlign, aName) Return oBrw ... CLASS TSBrowse FROM TControl ... METHOD SetArray( aArray, lAutoCols, aHead, aSizes ) //V90 METHOD SetArray2( aArray, uFontHF , aHead, aSize, uFooter, aPicture, aAlign, cName ) ENDCLASS ... METHOD SetArray2( aArray, uFontHF, aHead, aSizes, uFooter, aPicture, aAlign, aName ) CLASS TSBrowse Local nColumns, nI, cType, nMax, bData, cHead Local nN, cData, aDefMaxVal, aDefMaxLen, aDefType, aDefAlign, aDefFooter, oCol, ; nAlign, aAligns, lFooter := .F., cFooter, nFooter, cTemp, cPict, ; hFont := If( ::hFont != Nil, ::hFont, 0 ), aFont, lSelected, ; lFont := hFont != 0, hFontHead := hFont, hFontFoot := hFont If empty(aArray) .or. ValType(aArray) != "A" nN := 1000 aArray := Array(nN) For nI := 1 To nN aArray[ nI ] := { nI, PadR("Line - "+StrZero(nI, 5), 20), ; Date()+(nI-1), ; Round(nN / nI, 3), ; nI % 2 == 0 } Next EndIf Default aHead := AClone(::aHeaders), ; aSizes := AClone(::aColSizes), ; aPicture := AClone(::aFormatPic), ; aAlign := If( ISARRAY(::aJustify), AClone(::aJustify), {} ), ; aName := {} If empty(uFontHF) uFontHF := { hFontHead, hFontFoot } ElseIf ValType(uFontHF) == "N" .and. uFontHF != 0 uFontHF := { uFontHF, uFontHF } ElseIf ValType(uFontHF) == "A" If Len(uFontHF) < 2 ASize(uFontHF, 2) EndIf If ValType(uFontHF[1]) != "N" .or. empty(uFontHF[1]) uFontHF[1] := hFontHead EndIf If ValType(uFontHF[2]) != "N" .or. empty(uFontHF[2]) uFontHF[2] := hFontFoot EndIf Else uFontHF := { hFontHead, hFontFoot } EndIf hFontHead := uFontHF[1] hFontFoot := uFontHF[2] ::aArray := aArray ::lPickerMode := .F. nColumns := If( ! Empty( aHead ), Len( aHead ), If( ! Empty( ::aArray ), Len( ::aArray[ 1 ] ), 0 ) ) //V90 ::aDefValue := Array( Len( aArray[ 1 ] ) ) //V90 aDefMaxVal := Array(nColumns) aDefType := Array(nColumns) aDefAlign := Array(nColumns) aDefMaxLen := Array(nColumns) If Len(aPicture) != nColumns ASize(aPicture, nColumns) EndIf If Len(aAlign) != nColumns ASize(aAlign, nColumns) EndIf If Len(aName) != nColumns ASize(aName, nColumns) EndIf For nI := 1 To nColumns cType := ValType( ::aArray[ 1, nI ] ) aDefType[ nI ] := cType If cType $ "CM" ::aDefValue[ nI ] := Space( Len( ::aArray[ 1, nI ] ) ) aDefMaxVal [ nI ] := ::aArray[ 1, nI ] aDefMaxLen [ nI ] := Len( aDefMaxVal [ nI ] ) aDefAlign [ nI ] := DT_LEFT ElseIf cType == "N" ::aDefValue[ nI ] := 0 aDefMaxVal [ nI ] := cValToChar( ::aArray[ 1, nI ] ) aDefMaxLen [ nI ] := Len( aDefMaxVal [ nI ] ) aDefAlign [ nI ] := DT_RIGHT ElseIf cType == "D" ::aDefValue[ nI ] := CToD( "" ) aDefMaxVal [ nI ] := cValToChar( ::aArray[ 1, nI ] ) aDefMaxLen [ nI ] := Len( aDefMaxVal [ nI ] ) aDefAlign [ nI ] := DT_CENTER ElseIf cType == "T" #ifdef __XHARBOUR__ ::aDefValue[ nI ] := CToT( "" ) #else ::aDefValue[ nI ] := HB_CTOT("") #endif aDefMaxVal [ nI ] := cValToChar( ::aArray[ 1, nI ] ) aDefMaxLen [ nI ] := Len( aDefMaxVal [ nI ] ) aDefAlign [ nI ] := DT_LEFT ElseIf cType == "L" ::aDefValue[ nI ] := .F. aDefMaxVal [ nI ] := cValToChar( ::aArray[ 1, nI ] ) aDefMaxLen [ nI ] := Len( aDefMaxVal [ nI ] ) aDefAlign [ nI ] := DT_CENTER Else // arrays, objects and codeblocks not allowed ::aDefValue[ nI ] := "???" // not user editable data type aDefMaxVal [ nI ] := "???" aDefMaxLen [ nI ] := 0 aDefAlign [ nI ] := DT_LEFT EndIf Next ::nAt := 1 ::bKeyNo := { |n| If( n == Nil, ::nAt, ::nAt := n ) } //V90 ::cAlias := "ARRAY" // don't change name, used in method Default() ::lIsArr := .T. ::lIsDbf := .F. //JP V90 ::nLen := Eval( ::bLogicLen := { || Len( ::aArray ) + If( ::lAppendMode, 1, 0 ) } ) ::lIsArr := .T. ::bGoTop := { || ::nAt := 1 } ::bGoBottom := { || ::nAt := Eval( ::bLogicLen ) } ::bSkip := { |nSkip, nOld| nOld := ::nAt, ::nAt += nSkip, ::nAt := Min( Max( ::nAt, 1 ), ::nLen ), ::nAt - nOld } //V90 ::bGoToPos := { |n| Eval( ::bKeyNo, n ) } //V90 ::bBof := { || ::nAt < 1 } //V90 ::bEof := { || ::nAt > Len( ::aArray ) } //V90 ::lHitTop := .F. ::lHitBottom := .F. ::nRowPos := 1 ::nColPos := 1 ::nCell := 1 ::HiliteCell( 1 ) aDefFooter := Array(nColumns) aFill(aDefFooter, "") If ValType(uFooter) == "L" lFooter := uFooter ElseIf ValType(uFooter) == "A" lFooter := .T. For nI := 1 To Min( nColumns, Len(uFooter) ) aDefFooter[ nI ] := cValToChar(uFooter[ nI ]) Next EndIf If Empty( aHead ) aHead := AutoHeaders( Len( ::aArray[ 1 ] ) ) EndIf If aSizes != Nil .and. ValType( aSizes ) != "A" aSizes := AFill( Array( Len( ::aArray[ 1 ] ) ), nValToNum( aSizes ) ) ElseIf ValType( aSizes ) == "A" .and. ! Empty( aSizes ) If Len( aSizes ) < nColumns nI := Len( aSizes ) + 1 ASize( aSizes, nColumns ) AFill( aSizes, aSizes[ 1 ], nI ) EndIf Else aSizes := Nil EndIf For nI := 1 To Len(::aArray) For nN := 1 To nColumns cData := cValToChar( ::aArray[ nI, nN ] ) If len(cData) > len(aDefMaxVal[ nN ]) aDefMaxVal[ nN ] := cData aDefMaxLen[ nN ] := Max( aDefMaxLen[ nN ], Len(cData) ) EndIf Next Next ::aHeaders := Array(nColumns) ::aColSizes := Array(nColumns) ::aFormatPic := Array(nColumns) ::aJustify := Array(nColumns) For nI := 1 To nColumns bData := ArrayWBlock( Self, nI ) cHead := cValToChar( aHead[ nI ] ) nAlign := aDefAlign[ nI ] cPict := Nil lSelected := .F. If aDefType[ nI ] == "C" lSelected := .T. If ValType(aPicture[ nI ]) == "C" cPict := aPicture[ nI ] cTemp := If( left(cPict, 2) == "@K", subs(cPict, 4), cPict) Else cPict := repl("X", aDefMaxLen[ nI ]) cTemp := cPict EndIf If Len(cTemp) > Len(::aDefValue[ nI ]) ::aDefValue[ nI ] := Space( Len( cTemp ) ) EndIf ElseIf aDefType[ nI ] == "N" lSelected := .T. If ValType(aPicture[ nI ]) == "C" cPict := aPicture[ nI ] Else cPict := repl("9", aDefMaxLen[ nI ]) If ( nN := At(".", aDefMaxVal[ nI ]) ) > 0 cTemp := subs(aDefMaxVal[ nI ], nN) cPict := left(cPict, Len(cPict) - Len(cTemp))+"."+repl("9", Len(cTemp)-1) EndIf EndIf ElseIf aDefType[ nI ] == "D" lSelected := .T. EndIf If ValType(aAlign[ nI ]) == "N" .and. ( aAlign[ nI ] == DT_LEFT .or. ; aAlign[ nI ] == DT_CENTER .or. ; aAlign[ nI ] == DT_RIGHT ) nAlign := aAlign[ nI ] EndIf If lFooter aAligns := { nAlign, DT_CENTER, nAlign } cFooter := aDefFooter[ nI ] If CRLF $ cFooter cTemp := "" AEval(hb_aTokens(cFooter, CRLF), {|x| cTemp := If( Len(x) > Len(cTemp), x, cTemp )}) Else cTemp := cFooter EndIf nFooter := GetTextWidth( 0, cTemp, hFontFoot ) Else aAligns := { nAlign, DT_CENTER } cFooter := Nil nFooter := 0 EndIf If CRLF $ cHead cTemp := "" AEval(hb_aTokens(cHead, CRLF), {|x| cTemp := If( Len(x) > Len(cTemp), x, cTemp )}) Else cTemp := cHead EndIf nMax := Max( GetTextWidth( 0, aDefMaxVal[ nI ]+'B', hFont ), GetTextWidth( 0, cTemp, hFontHead ) ) nMax := Max( nMax, 60 ) nMax := Max( nMax, nFooter ) If ! Empty( aSizes ) If valtype(aSizes[ nI ]) == 'N' .and. aSizes[ nI ] > 0 nMax := aSizes[ nI ] ElseIf valtype(aSizes[ nI ]) == 'C' nMax := GetTextWidth( 0, aSizes[ nI ], hFont ) EndIf EndIf ::aHeaders [ nI ] := cHead ::aColSizes [ nI ] := nMax ::aFormatPic[ nI ] := cPict ::aJustify [ nI ] := aAligns oCol := TSColumn():New( cHead, bData, cPict,, aAligns, nMax,, ::lEditable,,,,cFooter,,,,,,, ; Self, "ArrayWBlock(::oBrw," + LTrim( Str( nI ) ) + ")" ) If lFont oCol:hFontHead := hFontHead If lFooter oCol:hFontFoot := hFontFoot EndIf EndIf If ! empty(aName[ nI ]) .and. ValType(aName[ nI ]) == "C" oCol:cName := aName[ nI ] EndIf oCol:lOnGotFocusSelect := lSelected ::AddColumn( oCol ) Next ::lNoPaint := .F. ::ResetVScroll( .T. ) //V90 //V90 If ::lPainted ::GoTop() ::Refresh() EndIf //end Return Self [/pre2] Пример. Demo.prg [pre2] Demo.prg ~~~~~~~~ #include "minigui.ch" #include "common.ch" #include "TSBrowse.ch" //REQUEST HB_CODEPAGE_RU1251, HB_CODEPAGE_RU866, HB_LANG_RUWIN //REQUEST HB_LANG_RUWIN //REQUEST HB_LANG_RU866 //SET CODEPAGE TO RUSSIAN //HB_LANGSELECT( "RU" ) Proc MAIN Local oBrw, aDatos, aArray, aHead, aSize, aFoot, aPict, aAlign, aName, aFontHF Local hFontHead, hFontFoot Local cFontName := _HMG_DefaultFontName Local nFontSize := 10 Public aFont := {} SET DECIMALS TO 4 SET DATE TO GERMAN SET EPOCH TO 2000 SET CENTURY ON SET EXACT ON DEFINE FONT Font_1 FONTNAME cFontName SIZE nFontSize DEFINE FONT Font_2 FONTNAME cFontName SIZE nFontSize BOLD AADD( aFont, GetFontHandle( "Font_1" ) ) AADD( aFont, GetFontHandle( "Font_2" ) ) DEFINE WINDOW MAGAZIN AT 0, 0 ; TITLE "TEST" ; MAIN NOMAXIMIZE NOSIZE DEFINE STATUSBAR OF MAGAZIN STATUSITEM "0" // WIDTH 0 FONTCOLOR BLACK STATUSITEM "1" WIDTH 230 // FONTCOLOR BLACK STATUSITEM "2" WIDTH 230 // FONTCOLOR BLACK STATUSITEM "3" WIDTH 230 // FONTCOLOR BLACK END STATUSBAR DEFINE TBROWSE oBrw AT 0, 0 ; WIDTH MAGAZIN.WIDTH - 2 * GetBorderWidth() ; HEIGHT MAGAZIN.HEIGHT - GetTitleHeight() - GetTitleHeight() - ; GetProperty( "MAGAZIN", "StatusBar", "Height" ) - ; 2 * GetBorderHeight() ; ENUMERATOR ; FONT cFontName SIZE nFontSize ; GRID EDIT aDatos := CreateDatos() aArray := aDatos[1] aHead := aDatos[2] aSize := aDatos[3] aFoot := aDatos[4] aPict := aDatos[5] aAlign := aDatos[6] aName := aDatos[7] // hFontHead := aFont[1] // normal Header // hFontFoot := aFont[2] // bold Footer // aFontHF := { hFontHead, hFontFoot } // aFontHF := aFont[1] // normal Header, Footer aFontHF := aFont[2] // bold Header, Footer oBrw := SetArray2("oBrw", "MAGAZIN", aArray, aFontHF, aHead, aSize, aFoot, aPict, aAlign, aName) // oBrw := SetArray2("oBrw", "MAGAZIN") // Demo array oBrw:nWheelLines := 1 oBrw:nClrLine := COLOR_GRID oBrw:nHeightCell += 2 oBrw:nHeightHead += 4 If ! empty(aFoot) oBrw:nHeightFoot += 4 EndIf If oBrw:lEnum oBrw:nHeightSpecHd := oBrw:nHeightCell EndIf END TBROWSE END WINDOW DoMethod("MAGAZIN","Activate") return ************************ STATIC FUNCTION CreateDatos() Local i, k := 1000, aDatos := {}, aHead, aSize, aFoot, aPict, aAlign, aName aDatos := Array(k) for i := 1 to k aDatos[ i ] := {" ", ; // 1 i, ; // 2 ntoc(i) + "_123", ; // 3 date()+i, ; // 4 PadR("Test line - " + ntoc(i), 20), ; // 5 round((10000-i) * i/3, 2), ; // 6 100.00 * i, ; // 7 0.12, ; // 8 round(100.00 * i * 0.12, 2), ; // 9 Round(1234567.00 / i, 3), ; // 10 PadR("Line "+StrZero(i, 5), 20), ; // 11 date(), ; // 12 time(), ; // 13 i % 2 == 0 } // 14 next aHead := aClone(aDatos[1]) // AEval(aHead, {|x,n| aHead[ n ] := "Head_" + hb_ntos(n) }) AEval(aHead, {|x,n| aHead[ n ] := "Head_" + hb_ntos(n) + ; iif(n % 2 == 0, CRLF + "My_"+hb_ntos(n), "") }) aFoot := array(len(aDatos[1])) AEval(aFoot, {|x,n| aFoot[ n ] := n }) // aFoot := .T. // подножие есть с пустыми значениями aPict := array(len(aDatos[1])) // можно не задавать, формируются aPict[10] := "99999999999.999" // автоматом для C,N по мах значению aSize := array(len(aDatos[1])) // можно не задавать, формируются aSize[10] := aPict[10] // автоматом по мах значению в колонке aAlign := array(len(aDatos[1])) // тип поля C - DT_LEFT aAlign[2] := DT_CENTER // D,L - DT_CENTER // N - DT_RIGHT aName := array(len(aDatos[1])) AEval(aName, {|x,n| aName[ n ] := "MyName_"+hb_ntos(n) }) RETURN { aDatos, aHead, aSize, aFoot, aPict, aAlign, aName } [/pre2]

gfilatov2002: SergKis пишет: Еще предложение для TSBrowse В эту сборку уже не попадет Уверен, что предложенные изменения - полезные, по два подобных метода в одном классе - это не перебор

SergKis: gfilatov пишет:два подобных метода в одном классе - это не перебор Можно было наследовать TSBrowse и менять, но тогда DEFINE разваливаются, SetArray внутри в методах встречается, его оставлять надо. Я сначала попытался удержаться в рамках SetArray, но не получилось (и он задействован в программах). У меня складывается впечатление, возможностей у TSBrowse много (но на низком уровне) и надо все строить, в каждом проекте, практически сначала или таскать код из проекта в проект - нет практически готовых решений- metodов (мне показалось для массива). Для работы с полями базы есть LoadField(...)+aColSel в DEFINE (еще не щупал), вот я и попытался для отчетов (по запросу) в массив, кирпичек побольше соорудить (в первую очередь ориентировался на себя, но улучшить желающие могут найтись, я надеюсь). Мое мнение, чем больше готовых, укрупненых решений - тем проще делать алгоритмы задачи, а то, что много методов (и даже похожих) - это такая мелочь (в сравнение с кодом VO тем более) - этим можно пренебречь.

gfilatov2002: SergKis пишет: Можно было наследовать TSBrowse и менять, но тогда DEFINE разваливаются Да, я тоже сначала подумал о субклассинге, но Вы убедили, что это создает другие проблемы... SergKis пишет: я и попытался для отчетов (по запросу) в массив Тогда, может, стоит хотя бы переименовать метод в SetArrayForRep[ort]

SergKis: gfilatov2002 пишет: переименовать метод в SetArrayForRep[ort] Да, вполне передает сущность

SergKis: gfilatov2002 Подправленный вариант Method SetArray2(...) [pre2] METHOD SetArray2( aArray, uFontHF, aHead, aSizes, uFooter, aPicture, aAlign, aName ) CLASS TSBrowse Local nColumns, nI, cType, nMax, bData, cHead Local nN, cData, aDefMaxVal, aDefMaxLen, aDefType, aDefAlign, aDefFooter, oCol, ; nAlign, aAligns, lFooter := .F., cFooter, nFooter, cTemp, cPict, ; hFont := If( ::hFont != Nil, ::hFont, 0 ), ; lFont := hFont != 0, hFontHead := hFont, hFontFoot := hFont If empty(aArray) .or. ValType(aArray) != "A" nN := 1000 aArray := Array(nN) For nI := 1 To nN aArray[ nI ] := { nI, PadR("Line - "+StrZero(nI, 5), 20), ; Date()+(nI-1), Round(nN / nI, 3), nI % 2 == 0 } Next EndIf Default aHead := AClone(::aHeaders), ; aSizes := AClone(::aColSizes), ; aPicture := AClone(::aFormatPic), ; aAlign := If( ISARRAY(::aJustify), AClone(::aJustify), {} ), ; aName := {} If ValType(uFontHF) == 'N' .and. uFontHF != 0 hFontHead := uFontHF hFontFoot := uFontHF ElseIf ValType(uFontHF) == 'A' .and. Len(uFontHF) >= 2 If ValType(uFontHF[1]) == 'N' .and. uFontHF[1] != 0 hFontHead := uFontHF[1] EndIf If ValType(uFontHF[2]) == 'N' .and. uFontHF[2] != 0 hFontFoot := uFontHF[2] EndIf EndIf ::aArray := aArray ::lPickerMode := .F. nColumns := If( ! Empty( aHead ), Len( aHead ), If( ! Empty( ::aArray ), Len( ::aArray[ 1 ] ), 0 ) ) //V90 ::aDefValue := Array( Len( aArray[ 1 ] ) ) //V90 aDefMaxVal := Array(nColumns) aDefType := Array(nColumns) aDefAlign := Array(nColumns) aDefMaxLen := Array(nColumns) aFill(aDefMaxLen, 0) If Len(aPicture) != nColumns ASize(aPicture, nColumns) EndIf If Len(aAlign) != nColumns ASize(aAlign, nColumns) EndIf If Len(aName) != nColumns ASize(aName, nColumns) EndIf For nI := 1 To nColumns cType := ValType( ::aArray[ 1, nI ] ) aDefType[ nI ] := cType If cType $ "CM" ::aDefValue[ nI ] := Space( Len( ::aArray[ 1, nI ] ) ) aDefMaxVal [ nI ] := Trim( ::aArray[ 1, nI ] ) aDefMaxLen [ nI ] := Len( aDefMaxVal [ nI ] ) aDefAlign [ nI ] := DT_LEFT ElseIf cType == "N" ::aDefValue[ nI ] := 0 aDefMaxVal [ nI ] := cValToChar( ::aArray[ 1, nI ] ) aDefMaxLen [ nI ] := Len( aDefMaxVal [ nI ] ) aDefAlign [ nI ] := DT_RIGHT ElseIf cType == "D" ::aDefValue[ nI ] := CToD( "" ) aDefMaxVal [ nI ] := cValToChar( ::aArray[ 1, nI ] ) aDefMaxLen [ nI ] := Len( aDefMaxVal [ nI ] ) aDefAlign [ nI ] := DT_CENTER ElseIf cType == "T" #ifdef __XHARBOUR__ ::aDefValue[ nI ] := CToT( "" ) #else ::aDefValue[ nI ] := HB_CTOT("") #endif aDefMaxVal [ nI ] := cValToChar( ::aArray[ 1, nI ] ) aDefMaxLen [ nI ] := Len( aDefMaxVal [ nI ] ) aDefAlign [ nI ] := DT_LEFT ElseIf cType == "L" ::aDefValue[ nI ] := .F. aDefMaxVal [ nI ] := cValToChar( ::aArray[ 1, nI ] ) aDefMaxLen [ nI ] := Len( aDefMaxVal [ nI ] ) aDefAlign [ nI ] := DT_CENTER Else // arrays, objects and codeblocks not allowed ::aDefValue[ nI ] := "???" // not user editable data type aDefMaxVal [ nI ] := "???" aDefMaxLen [ nI ] := 0 aDefAlign [ nI ] := DT_LEFT EndIf Next ::nAt := 1 ::bKeyNo := { |n| If( n == Nil, ::nAt, ::nAt := n ) } //V90 ::cAlias := "ARRAY" // don't change name, used in method Default() ::lIsArr := .T. ::lIsDbf := .F. //JP V90 ::nLen := Eval( ::bLogicLen := { || Len( ::aArray ) + If( ::lAppendMode, 1, 0 ) } ) ::lIsArr := .T. ::bGoTop := { || ::nAt := 1 } ::bGoBottom := { || ::nAt := Eval( ::bLogicLen ) } ::bSkip := { |nSkip, nOld| nOld := ::nAt, ::nAt += nSkip, ::nAt := Min( Max( ::nAt, 1 ), ::nLen ), ::nAt - nOld } //V90 ::bGoToPos := { |n| Eval( ::bKeyNo, n ) } //V90 ::bBof := { || ::nAt < 1 } //V90 ::bEof := { || ::nAt > Len( ::aArray ) } //V90 ::lHitTop := .F. ::lHitBottom := .F. ::nRowPos := 1 ::nColPos := 1 ::nCell := 1 ::HiliteCell( 1 ) aDefFooter := Array(nColumns) aFill(aDefFooter, "") If ValType(uFooter) == "L" lFooter := uFooter ElseIf ValType(uFooter) == "A" lFooter := .T. For nI := 1 To Min( nColumns, Len(uFooter) ) aDefFooter[ nI ] := cValToChar(uFooter[ nI ]) Next EndIf If Empty( aHead ) aHead := AutoHeaders( Len( ::aArray[ 1 ] ) ) EndIf If aSizes != Nil .and. ValType( aSizes ) != "A" aSizes := AFill( Array( Len( ::aArray[ 1 ] ) ), nValToNum( aSizes ) ) ElseIf ValType( aSizes ) == "A" .and. ! Empty( aSizes ) If Len( aSizes ) < nColumns nI := Len( aSizes ) + 1 ASize( aSizes, nColumns ) AFill( aSizes, aSizes[ 1 ], nI ) EndIf Else aSizes := Nil EndIf For nI := 1 To Len(::aArray) For nN := 1 To nColumns cData := cValToChar( ::aArray[ nI, nN ] ) If len(cData) > len(aDefMaxVal[ nN ]) If aDefType[ nN ] == "C" aDefMaxVal[ nN ] := Trim(cData) aDefMaxLen[ nN ] := Max( aDefMaxLen[ nN ], Len(aDefMaxVal[ nN ]) ) Else aDefMaxVal[ nN ] := cData aDefMaxLen[ nN ] := Max( aDefMaxLen[ nN ], Len(cData) ) EndIf EndIf Next Next ::aHeaders := Array(nColumns) ::aColSizes := Array(nColumns) ::aFormatPic := Array(nColumns) ::aJustify := Array(nColumns) For nI := 1 To nColumns bData := ArrayWBlock( Self, nI ) cHead := cValToChar( aHead[ nI ] ) nAlign := aDefAlign[ nI ] cPict := Nil If aDefType[ nI ] == "C" If ValType(aPicture[ nI ]) == "C" .and. Len(aPicture[ nI ]) > 0 cTemp := If( left(aPicture[ nI ], 2) == "@K", subs(aPicture[ nI ], 4), aPicture[ nI ]) Else cTemp := repl("X", aDefMaxLen[ nI ]) EndIf If Len(cTemp) > Len(::aDefValue[ nI ]) ::aDefValue[ nI ] := Space( Len( cTemp ) ) EndIf cPict := repl("X", Len(::aDefValue[ nI ])) ElseIf aDefType[ nI ] == "N" If ValType(aPicture[ nI ]) == "C" cPict := aPicture[ nI ] Else cPict := repl("9", aDefMaxLen[ nI ]) If ( nN := At(".", aDefMaxVal[ nI ]) ) > 0 cTemp := subs(aDefMaxVal[ nI ], nN) cPict := left(cPict, Len(cPict) - Len(cTemp))+"."+repl("9", Len(cTemp)-1) EndIf EndIf EndIf If ValType(aAlign[ nI ]) == "N" .and. ( aAlign[ nI ] == DT_LEFT .or. ; aAlign[ nI ] == DT_CENTER .or. ; aAlign[ nI ] == DT_RIGHT ) nAlign := aAlign[ nI ] EndIf If lFooter aAligns := { nAlign, DT_CENTER, nAlign } cFooter := aDefFooter[ nI ] If CRLF $ cFooter cTemp := "" AEval(hb_aTokens(cFooter, CRLF), {|x| cTemp := If( Len(x) > Len(cTemp), x, cTemp )}) Else cTemp := cFooter EndIf nFooter := GetTextWidth( 0, cTemp, hFontFoot ) Else aAligns := { nAlign, DT_CENTER } cFooter := Nil nFooter := 0 EndIf If CRLF $ cHead cTemp := "" AEval(hb_aTokens(cHead, CRLF), {|x| cTemp := If( Len(x) > Len(cTemp), x, cTemp )}) Else cTemp := cHead EndIf nMax := Max( GetTextWidth( 0, aDefMaxVal[ nI ]+'W', hFont ), GetTextWidth( 0, cTemp, hFontHead ) ) nMax := Max( nMax, 32 ) nMax := Max( nMax, nFooter ) If ! Empty( aSizes ) If valtype(aSizes[ nI ]) == 'N' .and. aSizes[ nI ] > 0 nMax := aSizes[ nI ] ElseIf valtype(aSizes[ nI ]) == 'C' nMax := GetTextWidth( 0, aSizes[ nI ], hFont ) EndIf EndIf ::aHeaders [ nI ] := cHead ::aColSizes [ nI ] := nMax ::aFormatPic[ nI ] := cPict ::aJustify [ nI ] := aAligns oCol := TSColumn():New( cHead, bData, cPict,, aAligns, nMax,, ::lEditable,,,,cFooter,,,,,,, ; Self, "ArrayWBlock(::oBrw," + LTrim( Str( nI ) ) + ")" ) If lFont oCol:hFontHead := hFontHead If lFooter oCol:hFontFoot := hFontFoot EndIf EndIf If aDefType[ nI ] == "L" oCol:lCheckBox := .T. EndIf If ! empty(aName[ nI ]) .and. ValType(aName[ nI ]) == "C" oCol:cName := aName[ nI ] EndIf ::AddColumn( oCol ) Next ::lNoPaint := .F. ::ResetVScroll( .T. ) //V90 //V90 If ::lPainted ::GoTop() ::Refresh() EndIf //end Return Self [/pre2] И назвать его можно SetArrayTo(...), на нем и корректировку делать можно, не только отчет

gfilatov2002: SergKis пишет: Подправленный вариант Method SetArray2(...) Благодарю

gfilatov2002: Выпустил очередной релиз библиотеки с последними исправлениями и дополнениями Сборка для компилятора BCC лежит на официальном сайте библиотеки по адресу: http://hmgextended.com/files/CONTRIB/hmg-2.5.1-setup.zip Также доступна сборка для компилятора MinGW по адресу: http://hmgextended.com/files/CONTRIB/hmg251-mingw.exe и компактный архив для свежей версии компилятора xHarbour http://hmgextended.com/files/CONTRIB/xhmg251_xhb10130.zip Благодарю за внимание

Andrey: Собрал под новой версией свои проги. Полёт нормальный !

Softlog86: Подскажите - это так и должно быть или лечится ?: 1) Есть форма с контролом TAB . и организовано несколько страниц PAGE . На первой странице - несколько строчек : LABEL и кнопок BUTTONEX . При первоначальном выводе формы - некоторые контролы и LABELы не отображаются пока мышкой не проведешь там где они должны быть нарисованы ....

gfilatov2002: Softlog86 пишет: это так и должно быть или лечится ? Нет, это не нормально Лечится с помощью включения следующей строки в процедуру ON INIT: InvalidateRect( Application.Handle, 0 )

gfilatov2002: SergKis пишет: назвать его можно SetArrayTo(...) Добавил этот код с небольшими изменениями в новую сборку

Alex_Cher: Уважаемый gfilatov2002 ... где можно скачать полный перечень кодов по последней сборки, хотя бы с небольшим описание ...?

Dima: Alex_Cher пишет: где можно скачать полный перечень кодов по последней сборки Каких еще кодов ?

Haz: Каких еще кодов ? чит кодов типа неубиваемая программа , монопольное владение процессором, самовосстановление при сбое и пр

Dima: Haz пишет: чит кодов я думал коды запуска ракет надо

Haz: Alex_Cher пишет: где можно скачать полный перечень кодов по последней сборки, хотя бы с небольшим описание ...? Исходники минигуи открыты , все в них. В сборку входят и сами сырцы

Dima: gfilatov2002 Предлагаю все WINAPI функции (работающие корректно) присутствующие только в примерах , прикрутить к основной библиотеке.

gfilatov2002: Dima пишет: все WINAPI функции ... прикрутить к основной библиотеке. Этот подход сейчас используется в официальной сборке HMG. И он привел к тому, что размер экзешника простого примера составляет свыше 3,5 MБ. Подобный пример, собранный с помощью минигуи с компилятором MinGW, будет иметь размер около 2.2 MБ. Поэтому сохранение компактного ядра библиотеки рассматривается как приоритетная задача в Минигуи. А использование дополнительных функций из примеров рекомендуется только в случае необходимости. Поэтому и ответ на Ваше предложение - отрицательный

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

SergKis: gfilatov2002 Можно подправить некоторое места, добавив Self при вызове блока кода (выделено bold-ом) ? [pre2] METHOD KeyDown( nKey, nFlags ) CLASS TSBrowse ... Case nKey == VK_CONTEXT .and. nFlags == 22872065 If ::bContext != Nil Eval( ::bContext, ::nRowPos, ::nColPos, Self ) EndIf Case !::lCellbrw .and. ( nKey == VK_RETURN .or. nKey == VK_SPACE ) .and. ::bLDblClick != Nil // 14.07.2015 Eval( ::bLDblClick, Nil, nKey, nFlags, Self ) // .08. Otherwise ::SuperKeyDown( nKey, nFlags ) EndCase Return 0 ... METHOD LDblClick( nRowPix, nColPix, nKeyFlags ) CLASS TSBrowse ... #ifndef __EXT_SELECTION__ ElseIf ::lCanSelect .and. ::bUserKeys == Nil // Added 28.09.2012 ::Selection() #endif ElseIf ::bLDblClick != Nil Eval( ::bLDblClick, uPar1, uPar2, nKeyFlags, Self ) // .08. EndIf ElseIf nClickRow == 0 .and. ::lDrawHeaders .and. ! ::lNoChangeOrd // GF 1.71 If ::bLDblClick != Nil .and. ::aActions == Nil Eval( ::bLDblClick, uPar1, uPar2, nKeyFlags, Self ) // .08. Else ::SetOrder( ::nAtCol( nColPix, ! ::lSelector ) ) //V90 EndIf ElseIf nClickRow == -2 .and. ::lDrawSpecHd .and. ::aColumns[ nCol ]:lEditSpec ... METHOD RButtonDown( nRowPix, nColPix, nFlags ) CLASS TSBrowse ... ::DrawSelect() bRClicked := If( ::aColumns[ nCol ]:bRClicked != Nil, ; ::aColumns[ nCol ]:bRClicked, ::bRClicked ) If bRClicked != Nil Eval( bRClicked, uPar1, uPar2, ::nAt, Self ) //V90 .08. Return 0 //V90 Else Return 0 EndIf ElseIf lHeader [/pre2]

PSP: SergKis пишет: METHOD LDblClick( nRowPix, nColPix, nKeyFlags ) SergKis пишет: METHOD RButtonDown( nRowPix, nColPix, nFlags ) А тут разве не надо в параметрах Self указать?

SergKis: PSP пишет:А тут разве не надо в параметрах Self указать? Нет. Метод уже принадлежит объекту Self. Это не функция. В блок кода параметром будет передана ссылка на объект TsBrowse для использования

SergKis: SergKis пишет: Это не функция В итоге, конечно, это статик функция, как конечная единица кода, но собственные свойства (DATA ..., METHOD ..., ....) доступны ей без параметров

PSP: SergKis, thanks )

gfilatov2002: SergKis пишет: подправить некоторое места, добавив Self Благодарю! Сделал, конечно

SergKis: gfilatov2002

Haz: gfilatov2002 Григорий , можно в класс TsBrowse добавить метод :GoToRec ( nRec ) ? А то Seek есть, Locate есть , а чтоб встать на нужную запись приходится ее или сикать или локатить по сути это кусок из метода :expSeek() который просто отвечает за правильную прорисовку после перехода по DbSeek() , такой же кусок в методе :ExpLocate() . Можно его продублировать как метод :GoToRec(), а можно и упростить :ExpSeek() и ExpLocate() заменив подобный код вызовом :GoToRec() [pre2] METHOD GoToRec( nRec ) CLASS TSBrowse Local nRecNo, nLines If ::lIsDbf ::Reset() nRecNo := (::cAlias )->( RecNo() ) nLines := ::nRowCount() ::lValidating := .T. ( ::cAlias )->( DbGoto( nRec ) ) If nRecNo != ( ::cAlias )->( RecNo() ) .and. ::nLen > nLines nRecNo := ( ::cAlias )->( RecNo() ) ( ::cAlias )->( DbSkip( nLines - ::nRowPos ) ) If ( ::cAlias )->( EoF() ) Eval( ::bGoBottom ) ::nRowPos := nLines ::nAt := ::nLogicPos() While ::nRowPos > 1 .and. ( ::cAlias )->( RecNo() ) != nRecNo ::Skip( -1 ) ::nRowPos -- EndDo Else ( ::cAlias )->( DbGoTo( nRecNo ) ) ::nAt := ::nLogicPos() EndIf ::Refresh( .F. ) ::ResetVScroll() ElseIf nRecNo != ( ::cAlias )->( RecNo() ) nRecNo := ( ::cAlias )->( RecNo() ) Eval( ::bGoTop ) ::nAt := ::nRowPos := 1 While nRecNo != ( ::cAlias )->( RecNo() ) ::Skip( 1 ) ::nRowPos ++ EndDo ::Refresh( .F. ) ::ResetVScroll() EndIf If ::bChange != Nil Eval( ::bChange, Self, 0 ) EndIf ::lHitTop := ::lHitBottom := .F. end Return .T. [/pre2]

gfilatov2002: Haz пишет: в класс TsBrowse добавить метод :GoToRec ( nRec ) Благодарю за помощь! Сделал

gfilatov2002: Просто к сведению. Выпустил сегодня RC1 для следующей сборки 2.5.2. [pre2] * New: AES File Encryption Library source code (see in folder \Source\HbAES). This library is based on PolarSSL (http://www.polarssl.org). You can use the following function for crypt/decrypting a file: CryptFileAES( cFileIn, cFileOut, cPassword, nMode ) - nMode = 0 for Encryption and nMode = 1 for Decryption; - cPassword can be either a character string or a key filename. Based upon a contribution of S.Rathinagiri <srgiri@dataone.in>. Adapted for Minigui Extended by Grigory Filatov <gfilatov@inbox.ru> (see demo in folder \samples\Advanced\AESDEMO) * Updated: Synchronized Extended HMG for compatibility with Official HMG: - Fixed: Added auto scroll of a text in EDITBOX and TEXTBOX controls at the changing of a 'CaretPos' property. - New: Added optional clause STOREJOBDATA <aJobData> in the command START PRINTDOC. Note that aJobData memvar must be declared as Public or Private for using in the function HMG_PrintGetJobInfo(). aJobInfo := HMG_PrintGetJobInfo ( aJobData ) --> {} or { nJobID, cPrinterName, cMachineName, cUserName, cDocument, cDataType, cStatus, nStatus, nPriorityLevel, nPositionPrintQueue, nTotalPages, nPagesPrinted, cSubmittedDate, cSubmittedTime } Contributed by Dr. Claudio Soto <srvet@adinet.com.uy>. Adapted for Minigui Extended by Grigory Filatov <gfilatov@inbox.ru> (see demo in folder \samples\Basic\Print_JobStatus) - New: Added the helpful function HMG_PrinterGetStatus ( [ cPrinterName ] ) --> nStatusPrinter Contributed by Dave. (see demo in folder \samples\Basic\Print_JobStatus) * Enhanced: Compatibility flags for Windows Vista, 7, 8, 8.1 and 10 were added to an application manifest. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see Windows7.Manifest in folder \Resources) * Updated: HBPrinter library (see source in folder \Source\HBPrinter): - PRG-code was formatted by Harbour contrib hbformat utility; - C-code was formatted to Harbour standard using uncrustify tool. Contributed by Grigory Filatov <gfilatov@inbox.ru> * Updated: Dll library source code (see in folder \Source\Dll): - correction of using of WIN32_LEAN_AND_MEAN constant at compiling. Contributed by Grigory Filatov <gfilatov@inbox.ru> * Updated: Adaptation FiveWin Class TSBrowse 9.0 in HMG: - the C-function GetSysMetrics() is defined as pseudo-function; - the function LoadImage() supports JPG, GIF, TIF and PNG images. Transparent property will be added to these images automatically. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see 'Grid Test' at demo in folder \samples\Advanced\TSBrowse) - added a new method SetArrayTo in the TSBrowse class. Contributed by SergKis (see demo in folder \samples\Advanced\Tsb_array_2) - added a new method GoToRec( nRec ) in the TSBrowse class. Contributed by Igor Nazarov (see demo in folder \samples\Advanced\Tsb_addrecord) * Updated: Harbour Compiler 3.2.0dev (SVN 2015-08-26 16:21). Contributed by Grigory Filatov <gfilatov@inbox.ru> (look at ReadMe.txt in folder \harbour) * Updated: 'Get Password with CredUI' sample: - added the function GetDomainName(); - added a show of usage of the CredUIPrompt flags. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Advanced\GetPassword) * Updated: 'MiniPrint: Enhanced look of Print Preview window' sample. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Advanced\MiniPrint) * Updated: 'Process Information' sample is based on the ProcInfo library: - fixed a memory leak in the C-function EnumWindows(). Problem was reported by Igor Nazarov. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Advanced\ProcInfo) [/pre2]Искренне балагодарен зв Вашу помощь в улучшении и развитии библиотеки TSBrowse

SergKis: gfilatov2002 Обнаружил бяку с LoadsField(...) TsBrowse. Пример: [pre2] #include "minigui.ch" #include "tsbrowse.ch" REQUEST DBFCDX FUNCTION Main() LOCAL i, k, n, cForm, cBrw, oBrw, aFld RDDSETDEFAULT('DBFCDX') SET EXCLUSIVE ON SET AUTOPEN ON SET DECIMALS TO 4 SET DATE TO GERMAN SET EPOCH TO 2000 SET CENTURY ON SET EXACT ON If ! Open_Table("TZAK", "TZAK") MsgStop("File not used !", "Error") RETURN EndIf cForm := "Form_1" DEFINE WINDOW &cForm AT 0,0 ; WIDTH 700 ; HEIGHT 500 ; TITLE 'Demo test' ; MAIN cBrw := "oBrw5" DEFINE TBROWSE &cBrw AT 10,10 ; WIDTH 670 HEIGHT 450 ; ALIAS "TZAK" ; HEADERS "Value 1" , "Op.", "Name", "Op.", "Value 2" ; WIDTHS 150 , 40, 150, 40, 150 ; COLUMNS { "R_1" , "R_5", "R_2", "R_6", "R_3" } :SetAppendMode( .F. ) :SetDeleteMode( .F. ) :lNoHScroll := .T. END TBROWSE oBrw := _HMG_aControlIds[ GetControlIndex(cBrw, cForm) ] // aFld := { "R_1", "R_5", "R_2", "R_6", "R_3" } // LoadFields(cBrw, cForm, .F., aFld) LoadFields(cBrw, cForm) oBrw:bOnEscape := {|o| DoMethod(cForm, 'Release') } END WINDOW CENTER WINDOW Form_1 ACTIVATE WINDOW Form_1 RETURN Function Open_Table( cFile, cAlias ) Local a, i DEFAULT cFile := "tzak", ; cAlias := cFile cFile := lower(cFile) If ! file(cFile+".dbf") dbCreate(cFile, { {"R_0", "C", 1, 0}, ; {"R_1", "C", 40, 0}, ; {"R_2", "C", 30, 0}, ; {"R_3", "C", 40, 0}, ; {"R_4", "C", 30, 0}, ; {"R_5", "C", 2, 0}, ; {"R_6", "C", 2, 0}, ; {"R_7", "C", 10, 0}, ; {"R_8", "C", 80, 0}, ; {"R_9", "C", 160, 0} ; }) a := { {"D", "", "Perionds", "", "99.99.9999" , "<=", "<="}, ; {"C", "", "Sclad" , "", "XXXXXXXXXXXXXXXXXXXX", "<=", "<="}, ; {"C", "", "Material", "", "XXXXXXXXXXXXXXXXXXXX", "<=", "<="}, ; {"N", "", "Kol-vo" , "", "999999999.999" , "<=", "<="}, ; {"N", "", "Summa" , "", "9999999999.99" , "<=", "<="} ; } USE ( cFile ) ALIAS ( cFile ) NEW For i := 1 To len(a) dbAppend() AEval(a[ i ], {|x,n| FieldPut(n, x) }) Next USE EndIf If ( i := RAt('\', cAlias) ) > 0 cAlias := upper(subs(cAlias, i+1)) EndIf USE ( cFile ) ALIAS ( cAlias ) SHARED NEW Return Used() [/pre2] искажаются заголовки, не беруться уст. width, picture Исправил так: METHOD LoadFields( lEditable ) [pre2] было cHeading := If( ! ::aHeaders == Nil .and. Len( ::aHeaders ) >= nE, ::aHeaders[ nE ], ; ::Proper( ( ::cAlias )->( Field( nE ) ) ) ) стало If ValType(::aHeaders) == "A" .and. ! empty(::aHeaders) .and. n <= Len( ::aHeaders ) // .08. cHeading := ::aHeaders[ n ] Else cHeading := ::Proper( ( ::cAlias )->( Field( nE ) ) ) EndIf было nSize := If( ! aColSizes == Nil .and. Len( aColsizes ) >= nE, aColSizes[ nE ], Nil ) cType := aStru[ nE, 2 ] If cType == "C" стало If ValType(::aColSizes) == "A" .and. ! empty(::aColSizes) .and. n <= Len( ::aColSizes ) // .08. nSize := ::aColSizes[ n ] Else nSize := If( ! aColSizes == Nil .and. Len( aColsizes ) >= nE, aColSizes[ nE ], Nil ) EndIf cType := aStru[ nE, 2 ] If cType == "C" было nSize := Max( GetTextWidth( 0, Replicate( "B", Len( cHeading ) ), hFont ), nSize ) nSize += If( ! Empty( cOrder ), 14, 0 ) //V90 EndIf cBlock := 'FieldWBlock("' + aStru[ nE, 1 ] + '",Select("' + ::cAlias + '"))' стало nSize := Max( GetTextWidth( 0, Replicate( "B", Len( cHeading ) ), hFont ), nSize ) nSize += If( ! Empty( cOrder ), 14, 0 ) //V90 EndIf If ValType(::aFormatPic) == "A" .and. ! empty( ::aFormatPic ) .and. n <= Len( ::aFormatPic ) // .08. cPicture := ::aFormatPic[ n ] EndIf cBlock := 'FieldWBlock("' + aStru[ nE, 1 ] + '",Select("' + ::cAlias + '"))' [/pre2]

krutoff: Григорий, наткнулся на такую проблемку. Для ввода новой записи в полнооконном режиме я всегда делаю такой код if isAppend; Go Bottom; Skip; endIf // Чтобы показало нулевые поля Затем форму наполняю getBox'ами с параметром FIELD. В этом случае фома будет универсальной для ввода/корректировки записи. Так вот если при вводе новой записи в ON INIT переприсвоить значения getBox'ов, то ничего не переприсваивается. Нашел, где портится - при открытии окна идет цепочка процедур (h_windows.prg): _ActivateWindow _SetActivationFlag _ProcessInitProcedure _RefreshDataControls И вот эта последняя процедура _RefreshDataControls присваивает значения из записи файла. Можно ли в этой цепочке поставить _ProcessInitProcedure последней?

gfilatov2002: Выпустил очередной релиз библиотеки. Сборка для компилятора BCC лежит на официальном сайте библиотеки по адресу: http://hmgextended.com/files/CONTRIB/hmg-2.5.2-setup.zip Также доступна сборка для компилятора MinGW по адресу: http://hmgextended.com/files/CONTRIB/hmg252-mingw.exe и компактный архив для свежей версии компилятора xHarbour http://hmgextended.com/files/CONTRIB/xhmg252_xhb10131.zip Благодарю за внимание

Haz: gfilatov2002 пишет: Выпустил очередной релиз библиотеки пересобрал проект все норм

gfilatov2002: Haz Игорь, благодарю за подтверждение! krutoff Так задумано автором, и менять этот порядок вызовов нет смысла из соображений совместимости со старым кодом

SergKis: gfilatov2002 Григорий, поковырялся еще в вызовах блока кода TsBrowse. Можно добавть эти модификации (bold-ом) ? [pre2] METHOD DrawHeaders( lFooters ) CLASS TSBrowse ... For nI := nBegin To nLastCol ... nAlign := If( ValType( oColumn:nHAlign ) == "B", ; Eval( oColumn:nHAlign, nJ, Self ), oColumn:nHAlign ) ... hBitMap := If( ValType( oColumn:uBmpHead ) == "B", Eval( oColumn:uBmpHead, nJ, Self ), oColumn:uBmpHead ) ... cHeading := If( Valtype( oColumn:cHeading ) == "B", Eval( oColumn:cHeading, nJ, Self ), oColumn:cHeading ) ... nClr3dL := If( ValType( nClr3dL ) == "B", Eval( nClr3dL, 0, nJ, Self ), nClr3dL ) nClr3dS := If( ValType( nClr3dS ) == "B", Eval( nClr3dS, 0, nJ, Self ), nClr3dS ) ... IF ::lDrawSpecHd ... nAlign := If( ValType( oColumn:nSAlign ) == "B", Eval( oColumn:nSAlign, nJ, Self ), oColumn:nSAlign ) ... nClrFore := If( ValType( nClrFore ) == "B", Eval( nClrFore, nJ, Self ), nClrFore ) ... nClrBackS := If( ValType( nClrBackS ) == "B", Eval( nClrBackS, nJ, Self ), nClrBackS ) ... cHeading := If( Valtype( oColumn:cSpcHeading ) == "B", Eval( oColumn:cSpcHeading, nJ, Self ), oColumn:cSpcHeading ) ... hBitMap := If( ValType( oColumn:uBmpSpcHd ) == "B", Eval( oColumn:uBmpSpcHd, nJ, Self ), oColumn:uBmpSpcHd ) ... nClr3dL := If( ValType( nClr3dL ) == "B", Eval( nClr3dL, 0, nJ, Self ), nClr3dL ) nClr3dS := If( ValType( nClr3dS ) == "B", Eval( nClr3dS, 0, nJ, Self ), nClr3dS ) ... If ::lFooting .and. ::lDrawFooters ... nClrFore := If( ValType( nClrFore ) == "B", Eval( nClrFore, nJ, Self ), nClrFore ) ... nClrBack := If( ValType( nClrBack ) == "B", Eval( nClrBack, nJ, Self ), nClrBack ) ... cFooting := If( Valtype( oColumn:cFooting ) == "B", Eval( oColumn:cFooting, nJ, Self ), oColumn:cFooting ) ... hBitMap := If( ValType( oColumn:uBmpFoot ) == "B", Eval( oColumn:uBmpFoot, nJ, Self ), oColumn:uBmpFoot ) ... nClr3dL := If( ValType( nClr3dL ) == "B", Eval( nClr3dL, 0, nJ, Self ), nClr3dL ) nClr3dS := If( ValType( nClr3dS ) == "B", Eval( nClr3dS, 0, nJ, Self ), nClr3dS ) ... METHOD DrawLine( xRow ) CLASS TSBrowse ... For nI := nBegin To nLastCol ... nAlign := If( ValType( nAlign ) == "B", Eval( nAlign, nJ, Self ), nAlign ) ... hBitMap := If( ValType( uBmpCell ) == "B", Eval( uBmpCell, nJ, Self ), uBmpCell ) ... nClr3dL := If( ValType( nClr3dL ) == "B", Eval( nClr3dL, ::nAt, nJ, Self ), nClr3dL ) nClr3dS := If( ValType( nClr3dS ) == "B", Eval( nClr3dS, ::nAt, nJ, Self ), nClr3dS ) ... METHOD DrawSelect( xRow ) CLASS TSBrowse ... For nI := nBegin To nLastCol ... nAlign := If( ValType( nAlign ) == "B", Eval( nAlign, nJ, Self ), nAlign ) ... hBitMap := If( ValType( uBmpCell ) == "B", Eval( uBmpCell, nJ, Self ), uBmpCell ) ... nClr3dL := If( ValType( nClr3dL ) == "B", Eval( nClr3dL, ::nAt, nJ, Self ), nClr3dL ) nClr3dS := If( ValType( nClr3dS ) == "B", Eval( nClr3dS, ::nAt, nJ, Self ), nClr3dS ) ... [/pre2]

gfilatov2002: SergKis пишет: Можно добавть эти модификации Если очень нужно, то, конечно, сделаю...

SergKis: gfilatov2002 пишет:Если очень нужно, то, конечно, сделаю... Дело в том, что при вызове блока кода без nJ, Sel не понятно, какая колонка прорисовывается и использование PUBLIC oBrw переменной в нем не самый лучший стиль программирования. Например cFooting := If( Valtype( oColumn:cFooting ) == "B", Eval( oColumn:cFooting, nJ, Self ), oColumn:cFooting ) без nJ требует от блока кода указания в какой колонке он используется, а если добавить колонку перед - придется править все правые блоки указывая новую позицию и это справедливо для всех указанных выше строк

SergKis: PS. без nJ к oCol:cName не прицепиться

gfilatov2002: SergKis пишет: без nJ к oCol:cName не прицепиться Уже сделал эти исправления

SergKis: gfilatov2002 Отлично. А что на счет поста N 801 с предыдущего листа

gfilatov2002: SergKis пишет: что на счет поста N 801 Благодарю за напоминание Пропустил эти исправления Сейчас буду проверять и затем использовать

SergKis: gfilatov2002 Еще предложение, добавить в CLASS TSColumn переменную DATA lValToCharEmpty AS LOGICAL INIT .F. // при .T. показывать пустую строку для пустых значений типа D,N,T,L после cValToChar(...) вместо 0, 0.00, / / , ... добавив небольшой код (bold-ом) [pre2] METHOD DrawLine( xRow ) CLASS TSBrowse ... //V90 If lCheck Default ::aCheck := { StockBmp( 6 ), StockBmp( 7 )} hBitMap := ::aCheck[ If( Upper( uData ) == "T", 1, 2 ) ] nAlign := nMakeLong( DT_CENTER, DT_CENTER ) uData := "" ElseIf oColumn:lValToCharEmpty .and. empty(uData) uData := "" EndIf //end ... METHOD DrawSelect( xRow ) CLASS TSBrowse ... If lCheck //V90 Default ::aCheck := { StockBmp( 6 ), StockBmp( 7 ) } hBitMap := ::aCheck[ If( Upper( uData ) == "T", 1, 2 ) ] nAlign := nMakeLong( DT_CENTER, DT_CENTER ) uData := "" ElseIf oColumn:lValToCharEmpty .and. empty(uData) uData := "" EndIf //end ... [/pre2]

gfilatov2002: SergKis пишет: Еще предложение Благодарю за помощь Сделал, но только переименовал переменную в lEmptyValToChar

Haz: Григорий , еще правочка . В одном месте в блок bPrevEdit не передается обект. Остальные вызовы по коду OK [pre2] METHOD KeyDown( nKey, nFlags ) CLASS TSBrowse ... ... If ::aColumns[ nCol ]:bPrevEdit != Nil If ::lIsArr .and. ( ::lAppendMode .or. ::nAt > Len( ::aArray ) ) // append mode for arrays Else // GF 16-05-2008 uVal := Eval( ::aColumns[ nCol ]:bData ) uVal := Eval( ::aColumns[ nCol ]:bPrevEdit, uVal, Self ) If ValType( uVal ) == "L" .and. ! uVal Return 0 EndIf EndIf EndIf [/pre2]

gfilatov2002: Haz пишет: еще правочка Благодарю за помощь! Поправил...

SergKis: Haz пишет:uVal := Eval( ::aColumns[ nCol ]:bPrevEdit, uVal, Self ) Не знаю насколько это важно, но у себя я добавил еще параметр Eval( ::aColumns[ nCol ]:bPrevEdit, uVal, Self, .T. ) // .T. - вызов из ::Edit(...) метода uVal := Eval( ::aColumns[ nCol ]:bPrevEdit, uVal, Self .F. ) // .F. - вызов из ::KeyDown(...) метода

Andrey: Григорий, а можно в ядро библиотеки поставить 2 классные функции SergKis ? GetClientWidth() и GetClientHeight() Они прекрасно выдают правильные размеры объектов и пользоваться удобно. Пример: #include "minigui.ch" Function MAIN() Local nMaxWidth, nMaxHeight nMaxWidth := GetClientWidth(0) nMaxHeight := GetClientHeight(0) DEFINE WINDOW Form_1 AT 0,0 WIDTH nMaxWidth HEIGHT nMaxHeight ; TITLE 'Test MAX desktop' ; MAIN END WINDOW Form_1.Center Form_1.Activate Return Nil /////////////////////////////////////////////////////////////////////////////////////////// // SergKis http://clipper.borda.ru // // GETCLIENTHEIGHT(0) - высота клиентской (внутренней) области Desktop с учетом наличия строки Start // GETCLIENTWIDTH(0) - ширина клиентской (внутренней) области Desktop // GETCLIENTHEIGHT(hWnd) - высота клиентской (внутренней) области окна (или контрола) // GETCLIENTWIDTH(hWnd) - ширина клиентской (внутренней) области окна (или контрола) // т.е.: // hWnd := GetFormHandle('Form_1') // MsgDebug( GetClientWidth(hWnd), GetClientHeight(hWnd) ) #pragma BEGINDUMP #include <windows.h> #include "hbapi.h" // BAA HB_FUNC( GETCLIENTWIDTH ) { RECT rect; LONG hWnd=hb_parnl(1); // SPI_GETWORKAREA == 0x0030 if(hWnd==0) SystemParametersInfo( 0x0030, 0, &rect, 0); else GetClientRect( ( HWND ) hWnd, &rect ); hb_retni( ( INT ) rect.right - rect.left ); } // BAA HB_FUNC( GETCLIENTHEIGHT ) { RECT rect; LONG hWnd=hb_parnl(1); // SPI_GETWORKAREA == 0x0030 if(hWnd==0) SystemParametersInfo( 0x0030, 0, &rect, 0); else GetClientRect( ( HWND ) hWnd, &rect ); hb_retni( ( INT ) rect.bottom - rect.top ); } #pragma ENDDUMP

Dima: Andrey Да функций много хороших и полезных с WINAPI , но вырастет ядро. Вот что Григорий ответил на похожее предложение НО более глобальное цитата: все WINAPI функции ... прикрутить к основной библиотеке. Этот подход сейчас используется в официальной сборке HMG. И он привел к тому, что размер экзешника простого примера составляет свыше 3,5 MБ. Подобный пример, собранный с помощью минигуи с компилятором MinGW, будет иметь размер около 2.2 MБ. Поэтому сохранение компактного ядра библиотеки рассматривается как приоритетная задача в Минигуи. А использование дополнительных функций из примеров рекомендуется только в случае необходимости. Поэтому и ответ на Ваше предложение - отрицательный ЗЫ Проще самостоятельно затолкать все нужное в свою отдельную либу.

SergKis: gfilatov2002 Предложение немного поменять стоки местами:[pre2] METHOD EditExit(...) ... Line: 4045 ::lAppendMode := oCol:oEdit:lAppend oCol:oEdit:Move( 1500,0 ) oCol:oEdit:End() // oCol:oEdit := Nil было ::PostEdit( uValue, nCol, bValid ) oCol:oEdit := Nil ::oWnd:bValid := ::oGet cMsg := If( ! Empty( oCol:cMsg ), oCol:cMsg, ::cMsg ) cMsg := If( Valtype( cMsg ) == "B", Eval( cMsg, Self, ::nCell ), cMsg ) ::SetMsg( cMsg ) Return Nil ... Line: 4091 oCol:oEdit:End() // oCol:oEdit := Nil было ::oWnd:bValid := ::oGet ::PostEdit( uValue, nCol, bValid ) oCol:oEdit := Nil cMsg := If( ! Empty( oCol:cMsg ), oCol:cMsg, ::cMsg ) cMsg := If( Valtype( cMsg ) == "B", Eval( cMsg, Self, ::nCell ), cMsg ) ::SetMsg( cMsg ) ... [/pre2] Тогда в bValid из oCol:oEdit координаты ячейки видны нормальным образом (сейчас нет)

gfilatov2002: SergKis пишет: Предложение немного поменять Принимается с благодарностью

SergKis: gfilatov2002 Ткнулся в oCol:bExtEdit != Nil // external edition нет информации о ячейке (координаты). Может стоит добавить такой метод в TsBrowse ? [pre2] METHOD GetCellSize( nCell, nRowPos ) CLASS TSBrowse Local nI, oCol, nRow, nCol, nStartX := 0 Default nCell := ::nCell, ; nRowPos := ::nRowPos oCol := ::aColumns[ nCell ] If ! oCol:lVisible Return Nil EndIf If ::nFreeze > 0 For nI := 1 To Min( ::nFreeze , nCell - 1 ) nStartX += ::GetColSizes()[ nI ] Next EndIf For nI := ::nColPos To nCell - 1 nStartX += ::GetColSizes()[ nI ] Next nRow := nRowPos - 1 nRow := ( nRow * ::nHeightCell ) + ::nHeightHead + ; ::nHeightSuper + ::nHeightSpecHd + If( oCol:l3DLook, 2, 0 ) nCol := nStartX + If( oCol:l3DLook, 2, 0 ) nWidth := ::GetColSizes()[ nCell ] - If( oCol:l3DLook, 2, 0 ) nHeight := ::nHeightCell - If( oCol:l3DLook, 1, -1 ) Return { nCol, nRow, nWidth, nHeight } [/pre2]

gfilatov2002: Просто к сведению. Успешно портировал новый GUI-отладчик из HMG-кода в minigui-код.

Haz: gfilatov2002 пишет: Успешно портировал новый GUI-отладчик хотелось бы глянуть на него

Andrey: Давно хотелось такой инструмент !!!

santy: gfilatov2002 пишет: Просто к сведению. Успешно портировал новый GUI-отладчик из HMG-кода в minigui-код. Неплохо. Отладчик будет в новой версии?

gfilatov2002: santy пишет: Отладчик будет в новой версии? Да, в виде дополнительной библиотеки, поскольку не хочется в каждое приложение добавлять еще и ресурсы отладчика. Если интересно, я могу выложить тестовый пример, который работает из-под отладчика

Haz: gfilatov2002 пишет: Если интересно, я могу выложить тестовый пример, интересно

gfilatov2002: gfilatov2002 пишет: я могу выложить тестовый пример click here

Haz: gfilatov2002 пишет: click here Григорий, кликнул here. Неплохо, только два вопроса вопроса. 1. Предполагается ли дальнейшее развитие ( т.к. точно есть что улучшать ) 2. Закрыты или открыты исходники ? ( догадываюсь закрыты т.к. есть debugger.lib ) PS. Что к примеру можно улучшить. т.к. это GUI отладчик - то возможно это 1. получить и показать хендлы окон включая все дочерние окна формы ( label, getbox и т.д ) 2. получить и показать классы дочерние окна формы ( static, button ...) 3. FindWindowText(). SetWindowText, GetWindowText, SetWindowLong() т.д. PPS.Очень интересный проект отладчика GUI есть у А. Кресина, но год стоит на паузе. Или Александру не до него или проект остановлен т.к. в принципе функционал отладки есть

gfilatov2002: Haz пишет: Предполагается ли дальнейшее развитие Да, автор продолжает работать над этим проектом. Вчера прислал мне последние изменения... Haz пишет: Закрыты или открыты исходники ? Исходники полностью открыты (open source), но я продолжаю дорабатывать свой вариант, портированный для работы в минигуи Благодарю за Ваше внимание

Haz: gfilatov2002 пишет: Да, автор продолжает работать gfilatov2002 пишет: Исходники полностью открыты Спасибо, обе новости хорошие

gfilatov2002: Просто к сведению. Выпустил сегодня RC1 для следующей сборки 2.5.3. Список изменений см. ниже * New: 'HMG Debugger' library (see source in folder \Source\Debugger). Don't miss this very interesting GUI tool! Based upon a contribution of Claudio Soto <srvet@adinet.com.uy>. Adapted for Minigui Extended by Grigory Filatov <gfilatov@inbox.ru> (see demo in folder \samples\Advanced\DBG_TEST) * Fixed: Double repainting at adding a new row in a Grid control with dynamic coloring. It was a reason of the slow colored grid refreshing. Added additional dynamic colors update at set focus to the grid. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo in folder \samples\Advanced\ProcInfo) * Fixed: 'On CheckboxClicked' event in GRID with CHECKBOXES clause not fired when <Space> key was pressed and a mouse cursor was outside of a grid control. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo2.prg in folder \samples\Basic\CheckBox_Grid) * Enhanced: HOTTRACK clause supports the optional HTFORECOLOR and HTINACTIVECOLOR clauses for customizing of the highlighting of the selected Tab page and inactive Tab page{s) at owner-draw colored TAB. Requested by Riza. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo.prg in folder \samples\Basic\TAB) * Changed: DRAW GRAPH: the helpful cleaning functions were moved from the samples to MiniGUI core: - EraseBarGraph( cParentName ) - ErasePieGraph( cParentName ) Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo in folder \samples\Basic\Charts) * Changed: DRAW PIE GRAPH: added the vertical centering of a title. Contributed by Grigory Filatov <gfilatov@inbox.ru> * Updated: Header file i_hmgcompat.ch for compatibility with Official HMG: - added a command CREATE EVENT PROCNAME <cProcName>; - added the pseudo-functions EventCount(), EventRemove() and EventRemoveAll(). Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo in folder \samples\Advanced\MiniPrint) * Updated: Further replacing of 'DEFAULT TO' command in the MiniGUI core with the functions hb_default() and __defaultNIL(). Contributed by Grigory Filatov <gfilatov@inbox.ru> * Updated: Adaptation FiveWin Class TSBrowse 9.0 in HMG: - added handling of the var lEmptyValToChar in TSColumn class; - method LoadFields respects now the column's Headers, Widths and Pictures which are defined by user at TBROWSE definition; - correction of using of the codeblock params in the three methods. Contributed by SergKis. * Updated: HMG_QHTM library (see source in folder \Source\QHTM): - code cleanup for compatibility with the last Minigui changes. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo in folder \samples\Advanced\qhtm_2) * Updated: Harbour Compiler 3.2.0dev (SVN 2015-09-10 09:03). Contributed by Grigory Filatov <gfilatov@inbox.ru> (look at ReadMe.txt in folder \harbour) * New: 'Using of the BosTaurus library for a graph creation' sample. Based upon a contribution of S.Rathinagiri <srgiri@dataone.in>. Adapted for Minigui Extended by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Advanced\BTGraph) * New: 'TSBrowse SetArrayTo method usage' sample. Contributed by Verchenko Andrey <verchenkoag@gmail.com> (see in folder \samples\Advanced\Tsb_SetArrayTo) * Updated: 'Print Pie Graph' sample: - updated the pie graph data for August 2015. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo.prg in folder \samples\Basic\GraphPrint) * Updated: 'MiniPrint' sample for compatibility with xHarbour. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Advanced\MiniPrint) Искренне балагодарен зв Вашу помощь в улучшении и развитии библиотеки TSBrowse

gfilatov2002: Выпустил очередной релиз библиотеки. Сборка для компилятора BCC лежит на официальном сайте библиотеки по адресу: http://hmgextended.com/files/CONTRIB/hmg-2.5.3-setup.zip Также доступна сборка для компилятора MinGW по адресу: http://hmgextended.com/files/CONTRIB/hmg253-mingw.exe и компактный архив для свежей версии компилятора xHarbour http://hmgextended.com/files/CONTRIB/xhmg253_xhb10134.zip Обновление к этой версии рекомендуется для всех предыдущих сборок... Благодарю за внимание

gfilatov2002: Просто к сведению. Выпустил сегодня RC2 для следующей сборки 2.5.4. Список изменений см. ниже [pre2] * Fixed: Wrong handling of a return value of the internal C-functions InsertMenu() and ModifyMenu(). The return of these functions is a logical value but is not a handle (similarly to the C-function AppendMenu()). Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo2.prg in folder \samples\Advanced\MRU) * Enhanced: TOOLBAREX control with the pictures from ImageList supports now the changing of a toolbutton picture at runtime. - New: Added a write only 'PictureIndex' property for TOOLBAREX. You can set this property at runtime: - function syntax: SetProperty ( Form, Control, 'PictureIndex', nPictureIndex ) - pseudo-OOP syntax: FormName.ToolBarName.ToolButtonName.PictureIndex := nPictureIndex, where nPictureIndex is a position of selected image in the ImageList. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see 'Standard Window' in demo at folder \samples\Basic\MAINDEMO_(SYNTAX_I)) * Enhanced: DEFINE IMAGELIST command supports JPG, GIF, TIF and PNG images. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo in folder \samples\Advanced\FREEVIEW) * Enhanced: Command CLEAN MEMORY operates now at Win Vista and upper for release of unused memory. Sample code: ON KEY F5 ACTION CLEAN MEMORY or DEFINE TIMER ... ACTION ( hb_gcAll(), CLEAN MEMORY ) Based upon a contribution of Claudio Soto <srvet@adinet.com.uy>. * Changed: WebCam User Component was moved from the samples to MiniGUI core. Syntax: @ <row>,<col> WEBCAM <Camera> [ OF <parent> ] ; [ WIDTH <nWidth> ] [ HEIGHT <nHeight> ] ; [ RATE <nRate> ] [ START ] Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo in folder \samples\Advanced\WebCam_2) * Modified: Correction of the empty values of Active font name and font size with the Default font name and size at the Form's definition. Suggested by SergKis. Contributed by Grigory Filatov <gfilatov@inbox.ru> * Updated: Further replacing of 'ValType(Var) == "U"' definitions in the MiniGUI core with the functions hb_default()/__defaultNIL() and hb_defaultValue(). Contributed by Grigory Filatov <gfilatov@inbox.ru> * Updated: C-code cleaning for correct compiling with Pelles C 8.0 and xHarbour. Contributed by Grigory Filatov <gfilatov@inbox.ru> * Updated: Adaptation FiveWin Class TSBrowse 9.0 in HMG: - added handling of the Browse vars hFontEdit, hFontHead, hFontFoot and hFontSpcHd in TSColumn class. Contributed by SergKis. * Updated: 'Bos Taurus' Graphics Library (see source in folder \Source\BosTaurus): - added a new function BT_DrawTextEx(). Based upon a contribution of Claudio Soto <srvet@adinet.com.uy>. Adapted for Minigui Extended by Grigory Filatov <gfilatov@inbox.ru> (see demos in folder \samples\Advanced\BosTaurus) * Updated: HbSQLite3 library: - update for using SQLITE3 version 3.9.0 (from 3.8.11.1). Contributed by Grigory Filatov <gfilatov@inbox.ru> * Updated: Harbour Compiler 3.2.0dev (SVN 2015-10-12 17:22). Contributed by Grigory Filatov <gfilatov@inbox.ru> (look at ReadMe.txt in folder \harbour) * New: 'Systray Balloon Tips' sample is based upon the HbWin contrib library. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Advanced\TrayBalloon_3) * New: 'Just To Tray' sample: minimize the external appls to system tray. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Applications\JustToTray) Warning: This example don't work properly at 64-bit version of Windows. * Updated: 'FreeImage Viewer' sample: using an ImageList from PNG resource for the toolbutton's pictures in the toolbar. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Advanced\FREEVIEW) [/pre2] Ваши комментарии приветствуются

Andrey: gfilatov2002 пишет: Выпустил сегодня RC2 для следующей сборки 2.5.4. С нетерпением ждем !

mshep: Hallo всем! Прошу консультации для начинающего: Скачал miniGUI, а при линковке примеров сообщает, что нет "minigui.lib". Причем реально ее в комплекте нет. Скачивал с http://nova-mir.narod.ru/hb_ins1.html свежий "hmg-2.5.3-setup". Очень надеюсь на консультацию.

Dima: mshep пишет: Скачивал с http://nova-mir.narod.ru/hb_ins1.html свежий "hmg-2.5.3-setup". Нормальные сборки в теме выше.

Haz: mshep пишет: Скачивал с http://nova-mir.narod.ru/hb_ins1.html Скачивай с этой ветки форума. работает сразу PS. Dima перебрось плиз эти сообщения в ветку примеров MiniGui. Опередил таки

gfilatov2002: Выпустил сегодня очередной релиз библиотеки. Сборка для компилятора BCC лежит на официальном сайте библиотеки по адресу: http://hmgextended.com/files/CONTRIB/hmg-2.5.4-setup.zip Также доступна сборка для компилятора MinGW по адресу: http://hmgextended.com/files/CONTRIB/hmg254-mingw.exe и компактный архив для свежей версии компилятора xHarbour http://hmgextended.com/files/CONTRIB/xhmg254_xhb10137.zip Благодарю за внимание

Alex_Cher: Уважаемый gfilatov2002, Сборка для компилятора BCC лежит на официальном сайте библиотеки по адресу: http://hmgextended.com/files/CONTRIB/hmg-2.5.4-setup.zip начиная с версии 2.5.3 в файле MiniGUI.chm "WIN32-GUI Library For (x)Harbour" не работает функция поиска, конечно мелочь, но очень не удобно ...

Andrey: Alex_Cher пишет: начиная с версии 2.5.3 в файле MiniGUI.chm "WIN32-GUI Library For (x)Harbour" не работает функция поиска, конечно мелочь, но очень не удобно ... Да, да, не работает. А я думал что у меня только сбоит. Только поиск еще раньше не работал, в предыдущих версиях...

Andrey: Тестирую новую версию. Пример \SAMPLES\Advanced\VOLUME_INFO\DEMO2.exe - не работает: Система Win8.1 Проф. Права Админа.

Haz: Andrey пишет: не работает: Andrey пишет: Права Админа. Раз есть права админа , присвой метку тома для диска С . В примере проверяется именно она [pre2]If !Empty( aInfo[1] )[/pre2] ... [pre2]aInfo[1] := sz2Str( lpVolName ) [/pre2] и если метка не задана - выдается это окно. [pre2] IF(Empty(cInfo), MsgStop( "Error!" ), MsgInfo( cInfo )) [/pre2] но это не сообщение об ошибке программы PS что именно не работает ? PPS Для наглядности программы проверку условия лучше все же заменить на [pre2]If aInfo[1] <> NIL [/pre2] тогда и при пустой метке будет вывод корректной информации о диске

Dima: Haz пишет: Раз есть права админа , присвой метку тома для диска С Думаешь у него диск без метки ? :) "Территорию" нужно метить )) PS Новую не тестил версию , но в предыдущей все нормально (Win7)

Haz: Dima пишет: Думаешь у него диск без метки ? :) уверен , судя по коду программы территория не помечена

Andrey: Haz пишет: уверен , судя по коду программы территория не помечена Пример \SAMPLES\Advanced\VOLUME_INFO\DEMO.exe Что выдаёт пример \SAMPLES\Advanced\VOLUME_INFO\DEMO2.exe - написал выше. Что заметил, то и написал. Это было и в предыдущих версиях. Метки на диске нет - в проводнике пишется "Локальный диск (С:)"

Alex_Cher: cInfo += "Serial Number :" + TAB + I2Hex( nSerNum / 65535 ) + "-" + I2Hex( nSerNum ) .. я понимаю что это серийный номер HDD, почему на некоторых компах число nSerNum отрицательное ?

gfilatov2002: Andrey пишет: Метки на диске нет Простая замена If !Empty( aInfo[ 1 ] ) на If !Empty( aInfo[ 2 ] ) должна решить эту проблему

Haz: Andrey пишет: Что заметил, то и написал. Андрей , все правильно сделал но еще правильнее было бы указать причину и решение Раз уж нашел косячек и разобрался почему - кинь суда решение. Так и Григорию проще править будет и он больше времени потратит на новый функционал , а не на исправление старых примеров.

Andrey: Haz пишет: но еще правильнее было бы указать причину и решение Понял.

mshep: Haz пишет: Скачивай с этой ветки форума. работает сразу Пасибки.....

krutoff: Кто-нибудь работал с виртуальными окнами? У меня никак не работает VALID в GETBOX внутри такого окна. Может кто уже натыкался на эти грабли? Для примера воткнул в miniGui\Samples\BASIC\CONTAINERS\Panel\demo1.prg строку вместо TEXT_4: 1. Если вставлять через DEFINE то выдет ошибку: "Error MGERROR/0 Control: Of Win_2 Not defined. Program terminated." 2. Если вставить: @ 210,10 GETBOX TEXT_4 VALUE 7 VALID This.Value>5 VALIDMESSAGE 'Value > 5' - в этом случае любое значение проглатывает (пускал VALID через функцию - туда не попадает)

krutoff: Еще один момент: Григорий, я тут нарыл одну ошибку, которая мне мешает. В файле miniGui\SOURCE\h_controlmisc.prg есть функция FUNCTION _GetControlFree(), которая (как я понял) при создании контрола находит в массиве удаленных контролов свободный элемент. Если такой не находится - создается новый элемент и присваиваются все свойства. Но свойство _HMG_StopControlEventProcedure в старом( найденом) элементе(в отличие от нового) не переприсваивается. Например - если выполнить по какому-то контролу StopControlEventProcedure, закрыть форму, а потом ее снова создать, то нарываюсь на то что, все события по этому контролу уже отключены. Предлагаю в конце процедуры _GetControlFree() перед оператором ENDIF вставить: ELSE _HMG_StopControlEventProcedure[k] := .F.

gfilatov2002: krutoff пишет: если выполнить по какому-то контролу StopControlEventProcedure, закрыть форму, а потом ее снова создать, то нарываюсь на то что, все события по этому контролу уже отключены. Пример - в студию krutoff пишет: _HMG_StopControlEventProcedure[k] := .F. Это делается в функции _EraseControl() [pre2]#ifdef _HMG_COMPAT_ IF Type( '_HMG_SYSDATA[443][ i ]' ) != 'U' _HMG_StopControlEventProcedure [ i ] := .F. ENDIF #endif [/pre2]

krutoff: //Пример - в студию: После 2-го вызова Формы2 событие On Lostfocus в Text_1 не вызывается //(Еще момент: что при редактировании Титул Формы 2 становится неактивным и приходится 2 раза щелкать при закрытии в первом старте) #include "minigui.ch" Function Main DEFINE WINDOW Form_1 AT 0,0 WIDTH 200 HEIGHT 200 TITLE 'StopControlEventProcedure'; MAIN FONT 'Arial' SIZE 10 @ 70,50 BUTTON runBtn CAPTION 'Вызов Формы 2' ACTION DoForm2() END WINDOW ACTIVATE WINDOW Form_1 RETURN Nil *-------------------------------------------------------------------------- Function DoForm2() DEFINE WINDOW Form_2 AT 100,100 WIDTH 200 HEIGHT 200 TITLE 'Form 2' MODAL ; ON RELEASE StopControlEventProcedure("Text_1", "Split_1",.T.) DEFINE SPLITBOX DEFINE WINDOW Split_1 WIDTH 180 HEIGHT 180 ; VIRTUAL WIDTH 200 VIRTUAL HEIGHT 200 ; SPLITCHILD NOCAPTION @ 20,20 TEXTBOX Text_1 VALUE 'Text_1' ON LOSTFOCUS msgInfo('LOSTFOCUS Text_1') @120,20 TEXTBOX Text_2 VALUE 'Text_2' END WINDOW END SPLITBOX END WINDOW ACTIVATE WINDOW Form_2 Return Nil

gfilatov2002: krutoff пишет: После 2-го вызова Формы2 событие On Lostfocus в Text_1 не вызывается Да, все так... Поправлю, конечно krutoff пишет: при редактировании Титул Формы 2 становится неактивным Думаю, что это нормально, поскольку в этой форме содержится еще одно дочернее окно Split_1 в родительском окне Form_2

krutoff: gfilatov2002 пишет: Думаю, что это нормально, поскольку в этой форме содержится еще одно дочернее окно Split_1 в родительском окне Form_2 Спасибо, Григорий! Да, я тоже понимаю, что алгоритмически - это нормально, но визуально как бы находишься в активном окне...

alexandr11: здравствуйте у меня тоже вопрос по samples\basic\containers\panel (MiniGUI 2.4) пытался использовать typewindow panel с virtual height как в том примере но прокрутка (колесиком мыши) не работала путем проб установил - прокрутка начинает работать, если в это окно поместить button, иначе - не работает можно конечно поместить там button с нулевыми размерами, но все же... и второе - если нажать мышью на стрелку вверх, то выполняется прокрутка окна (panel), хотя ползунок уже находится в самой верхней позиции подскажите пожалуйста - как можно от этого избавиться? пример ниже #include "minigui.ch" ************************** Function Main DEFINE WINDOW SAST_1; AT 0,0 ; WIDTH 500; HEIGHT 500; TITLE "SAST_1"; WINDOWTYPE MAIN DEFINE WINDOW WIN_2; ROW 10; COL 10; WIDTH 200; HEIGHT 200; VIRTUAL WIDTH 5000; VIRTUAL HEIGHT 5000; WINDOWTYPE PANEL IF .F. DEFINE LABEL LABEL_1 ROW 10 COL 10 VALUE 'LABEL_1' WIDTH 100 HEIGHT 30 END LABEL ENDIF IF .F. DEFINE BUTTON BUTTON_1 ROW 50 COL 10 CAPTION 'BUTTON_1' WIDTH 100 HEIGHT 30 END BUTTON ENDIF END WINDOW END WINDOW CENTER WINDOW SAST_1 activate window SAST_1 Return Nil

gfilatov2002: alexandr11 пишет: если нажать мышью на стрелку вверх, то выполняется прокрутка окна (panel), хотя ползунок уже находится в самой верхней позиции Поправил эту бяку для вертикального и горизонтального сдвигов. Благодарю за наглядный пример как можно от этого избавиться? Ждите ноябрьскую сборку в конце месяца...

alexandr11: Поправил эту бяку спасибо, Григорий а что с первой бякой (не работает прокрутка)?

gfilatov2002: alexandr11 Мне кажется, что тут дело в том, что LABEL - это статический элемент управления. Поставьте в это окно вторым номером, например, CHECBOX, и прокрутка заработает

krutoff: Столкнулся с тем, что контрол IMAGE показывает файл ICO только, если указать полное название файла (допустим "user.ico"), а если указать ICO в файле ресурсов .RC - то IMAGE его не покажет.

gfilatov2002: krutoff пишет: контрол IMAGE показывает файл ICO Дело в том, что библиотека GDIPlus, которая сейчас используется как движок в элементе управления IMAGE, не дружит с ICO и CUR ресурсами. По зато отображает PNG и TIF картинки. Поэтому для показа на форме ICO файлов/ресурсов рекомендую использовать функцию DrawIcon( hWnd, w, h, hIcon ), примеры использования которой есть в папке minigui\samples.

alexandr11: gfilatov2002 пишет: Мне кажется, что тут дело в том, что LABEL - это статический элемент управления спасибо, Григорий я тоже так подумал

alexandr11: возник еще один вопрос на эту тему я объявляю окно PANEL со свойствами HEIGHT 100, VIRTUAL HEIGHT 3000 затем (уже во время выполнения программы) увеличиваю HEIGHT (по нажатию кнопки) и получается, что VIRTUAL HEIGHT становится более 3000 (понимаю это по содержимому окна) как с этим бороться? помогите пожалуйста пример ниже #include "minigui.ch" #include "BosTaurus.CH" ************************** Function Main DEFINE WINDOW SAST_1; AT 0,0 ; WIDTH GETDESKTOPWIDTH(); HEIGHT GETDESKTOPHEIGHT()-50; TITLE "SAST_1"; WINDOWTYPE MAIN DEFINE WINDOW WIN_2; ROW 10; COL 10; WIDTH 200; HEIGHT IIF(.T.,100,BT_ClientAreaHeight("SAST_1")-100); VIRTUAL HEIGHT 3000; WINDOWTYPE PANEL IF .T. DEFINE BUTTON BUTTON_0 ROW 2900 COL 10 CAPTION 'otmetka 2900' WIDTH 130 HEIGHT 30 END BUTTON ENDIF END WINDOW DEFINE BUTTON BUTTON_1 ROW 30 COL 300 CAPTION 'GO_HEIGHT' ACTION WIN_2.HEIGHT:=BT_ClientAreaHeight("SAST_1")-100 WIDTH 100 HEIGHT 30 END BUTTON END WINDOW CENTER WINDOW SAST_1 activate window SAST_1 Return Nil

gfilatov2002: Просто к сведению. Выпустил сегодня RC2 для следующей сборки 2.5.5. Список изменений см. ниже [pre2] * Fixed: Correction of the vertical position of the page titles for the font's size more than 12 pt in the ownerdraw colored TAB. Requested by Verchenko Andrey <verchenkoag@gmail.com>. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo.prg in folder \samples\Basic\TAB) * Fixed: Wrong vertical (and horizontal) scroll up in the Virtual Panel window when the thumbs of scroll bar were in a zero position and you are click a scrolling bar up (or left) arrow button. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo in folder \samples\Basic\CONTAINERS\Panel_2) * Enhanced: The GetBox control supports additionally a hotkey Ctrl+Y for clearing of the current value. Suggested and contributed by Gilbert Vaillancourt. * Enhanced: Added a horizontal scrolling of a long text string in the function WaitWindow(). Requested by Marcelo Brigatti <mbrigatti@uol.com.br>. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo.prg in folder \samples\Basic\WAIT_WINDOW) * Changed: SplitChild windows without caption can not be closed with <Alt+F4> hotkey pressing by default. Contributed by Grigory Filatov <gfilatov@inbox.ru> * Updated: Header file i_hmgcompat.ch for compatibility with Official HMG: - added a new command RELEASE MEMORY; - added the pseudo-function HMG_ChangeWindowStyle(). Contributed by Grigory Filatov <gfilatov@inbox.ru> * Updated: 'HMG Debugger' library (see source in folder \Source\Debugger). Based upon a contribution of Claudio Soto <srvet@adinet.com.uy>. Adapted for Minigui Extended by Grigory Filatov <gfilatov@inbox.ru> (see demo in folder \samples\Advanced\DBG_TEST) * Updated: Adaptation FiveWin Class TSBrowse 9.0 in HMG: - fixed a program crash at the simultaneous using of the column's 'Valid' clause and the function SetBtnGet(). Problem was reported by Gilbert Vaillancourt. Contributed by Grigory Filatov <gfilatov@inbox.ru> * Updated: HbSQLite3 library: - update for using SQLITE3 version 3.9.2 (from 3.9.1). Contributed by Grigory Filatov <gfilatov@inbox.ru> * Updated: Harbour Compiler 3.2.0dev (SVN 2015-11-05 18:20). Contributed by Grigory Filatov <gfilatov@inbox.ru> (look at ReadMe.txt in folder \harbour) * New: 'Graph Print on datas from the database' sample. Contributed by Stefano Biancini <biancini.stefano[at]libero.it>. Revised by Pierpaolo Martinello <pier.martinello[at]alice.it> (see in folder \samples\Basic\GraphPrint_2) * New: 'ErrorSys HMG Custom' sample. Contributed by Toledo <toledo@pctoledo.com.br>. Revised by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Basic\Hmg_Error) * Updated: 'ProgressBar' sample: - using of the function SuppressKeyAndMouseEvents() for blocking of the mouse and keyboard pressing at the event's processing. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo2.prg in folder \samples\Basic\PROGRESSBAR) * Updated: 'TSBrowse SetArrayTo method usage' sample. Contributed by Verchenko Andrey <verchenkoag@gmail.com> (see in folder \samples\Advanced\Tsb_SetArrayTo) * Updated: 'WebCam preview and capture' sample: - Added: saving the captured image to the PNG file. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Advanced\WebCam_2) [/pre2] Ваши комментарии приветствуются...

Andrey: gfilatov2002 пишет: Ваши комментарии приветствуются... Забыл про Tsb_config - версия 1.2 !

gfilatov2002: Andrey пишет: Забыл про Tsb_config - версия 1.2 Нет, не забыл Но оставил в примерах версию 1.0 (как более простую) с учетом предложенных исправлений

gfilatov2002: Выпустил сегодня очередной релиз библиотеки. Сборка для компилятора BCC лежит на официальном сайте библиотеки по адресу: http://hmgextended.com/files/CONTRIB/hmg-2.5.5-setup.zip Также доступна сборка для компилятора MinGW по адресу: http://hmgextended.com/files/CONTRIB/hmg255-mingw.exe и компактный архив для свежей версии компилятора xHarbour http://hmgextended.com/files/CONTRIB/xhmg255_xhb10138.zip Благодарю за внимание Примечание. Небольшое дополнение к файлу изменений этой сборки: * New: Draw Icon command with the transparent support. Syntax: DRAW ICON IN WINDOW <windowname> AT <row>,<col> ; PICTURE <filename> ; [ WIDTH <w> ] ; [ HEIGHT <h> ] ; [ COLOR <rgb> ] ; [ <transparent: TRANSPARENT> ] Requested by Verchenko Andrey <verchenkoag@gmail.com>. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo in folder \samples\Applications\UPXshell) Note: It is an experimental feature. Также для компилятора MinGW добвлена следующая настройка для совместимости с BCC: ldflags=-Wl,--allow-multiple-definition

Andrey: Пропустил новую версию... gfilatov2002 пишет: Note: It is an experimental feature. А когда будет постоянной версией ?

gfilatov2002: Andrey пишет: когда будет постоянной После подтверждения от пользователей, что все работает нормально Обычно это может занимать до 3-х месяцев Кстати, сейчас занимаюсь портированием сборки на 64-битные рельсы Для этого пришлось пересматривать ВЕСЬ сишный код (кроме 2-х модулей), исправлять найденный опечатки и оптимизировать код... В качестве 64-битного компилятора использую MinGW версии 4.8.1 Требуются тестировщики

sashaBG: Я записываюсь . Сейчас есть немного времени и WINDOWS 10 64bit . Григорий , посылайте когда будет материал для тестирования . можно на office@almaleto.com

santy: Григорий, если будет готовый вариант, присылайте -> lex26@ukr.net.

gfilatov2002: santy пишет: если будет готовый вариант, присылайте Благодарю за отклик! В ближайшее время я подготовлю первую бету Minigui 64 для тестирования и пришлю ссылку на нее всем, кто заинтересовался

gfilatov2002: Мечты сбываются! Предлагаю всем желающим протестировать первую бету Minigui 64 по адресу: http://hmgextended.com/files/CONTRIB/minigui64-beta.exe В этот архив включены: - Minigui 64 source and binaries; - Harbour 64 compiler 3.2.0dev; - MinGW 64 C-compiler 4.9.2. Заранее благодарен за все критические отзывы

gfilatov2002: gfilatov2002 пишет: Предлагаю всем желающим протестировать первую бету Minigui 64 Выложил очередную бета-версию по адресу: http://hmgextended.com/files/CONTRIB/minigui64-beta.exe Добавил в архив следующие библиотеки (с примерами использования): - BosTaurus; - CallDll; - Debugger; - WinReport. По-прежнему ожидаю Ваши критические отзывы...

gfilatov2002: Выложил заключительную бета 3-версию с небольшими доработками по адресу: http://hmgextended.com/files/CONTRIB/minigui64-beta.exe Полный список изменений ниже [pre2] * Updated: The all C-code was modified for the correct compiling on 64-bit: - added a new header mgdefs.ch for 64-bit conversion; - added a new function IsExe64() which check if our app is 64-bit; - added Windows64.Manifest in the folder \Resources; - revised HbPrinter, MiniPrint, TsBrowse and WinReport libraries for 64-bit compatibility. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo in folder \samples\Basic\MAINDEMO_(SYNTAX_I)) * Updated: Documented the internal C-function IsWow64(): - return TRUE if a 32-bit application is running under 64-bit Windows; - return FALSE if a 32-bit application is running under 32-bit Windows; - return FALSE if a 64-bit application is running under 64-bit Windows. Remark: WOW64 is the x86 emulator that allows 32-bit Windows-based applications to running on 64-bit Windows. * Updated: CallDll library source code (see in folder \Source\CallDll). It is based on the Harbour core DLL functions now. DECLARE syntax and format are preserved for backwards compatibility, but, it is recommended to use CallDll32 function instead. Syntax was changed as: CallDll32( cDllName, nReturnType, cFunctionName [, <parameters> ] ) Note: CallDll32() detects the current code page and appropriately call the ANSI or Unicode version of the function. Based upon a contribution by Claudio Soto <srvet@adinet.com.uy>. Adapted for Minigui Extended by Grigory Filatov <gfilatov@inbox.ru> (see demos in folder \samples\Basic\CallDll) * Updated: 'Bos Taurus' Graphics Library for 64-bit compatibility. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see source in folder \Source\BosTaurus) * Updated: 'HMG Debugger' library for 64-bit compatibility. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see source in folder \Source\Debugger). [/pre2] Желаю всем удачи!

alexandr11: gfilatov2002 пишет: alexandr11 пишет: цитата: если нажать мышью на стрелку вверх, то выполняется прокрутка окна (panel), хотя ползунок уже находится в самой верхней позиции Поправил эту бяку для вертикального и горизонтального сдвигов. Благодарю за наглядный пример цитата: как можно от этого избавиться? Ждите ноябрьскую сборку в конце месяца... скачал новую сборку действительно - вверх и влево не прокручивается (при нажатии на стрелку) но прокручивается вниз и вправо кроме того - появился какой-то глюк - в моей программе нижнюю стрелку сначала не видно она появляется после того, как кликнуть мышью в том месте, где она должна быть но вот тестовый пример не удается сделать - там все нормально не пойму от чего это зависит

gfilatov2002: alexandr11 пишет: прокручивается вниз и вправо Все верно - посчитал это некритичным... alexandr11 пишет: тестовый пример не удается сделать - там все нормально Возможно, что стрелка перекрывается надписью Label, но точнее сказать, в чем причина, - сложно

alexandr11: gfilatov2002 пишет: Возможно, что стрелка перекрывается надписью Label, но точнее сказать, в чем причина, - сложно дело в том, что в MiniGUI 2.4 все нормально буду искать спасибо

alexandr11: gfilatov2002 пишет: Все верно - посчитал это некритичным... полностью согласен но заказчик требует чтобы все было идеально

gfilatov2002: alexandr11 пишет: прокручивается вниз и вправо Поправил, но при этом появилась небольшая зона нечувствительности Тем не менее, прокрутки уже нет alexandr11 пишет: ... чтобы все было идеально Так в жизни не бывает Во всяком случае - в нашей Но это уже философия пошла...

alexandr11: gfilatov2002 пишет: прокрутки уже нет спасибо, Григорий! PS Вы оказались правы насчет label почему-то в MiniGUI 2.4 и MiniGUI 2.5 окно panel по-разному расположено относительно других элементов окна...

Alex_Cher: gfilatov2002 пишет: В этот архив включены: - Minigui 64 source and binaries; - Harbour 64 compiler 3.2.0dev; - MinGW 64 C-compiler 4.9.2. Заранее благодарен за все критические отзывы .. попытался собрать что-нибудь из Minigui/Samples постоянно вылетают ошибки. Использую Borland C++ Compiler 5.5. Что не так ..? Не ругайте строго я здесь не давно ...

Haz: Alex_Cher пишет: Что не так .. Alex_Cher пишет: Использую Borland C++ BCC это 32 - разрядный компилер , а собрать пытаешься тестовую версию под 64 разряда и MIngw. Возьми обычную сборку MiniGui под 32 и bcc55 - все соберется

sashaBG: Первые впечатления от MiniGUI64 очень хорошие ! Все работает быстрее ну BROWS - ы например . 64 битны Harbour работает быстрее , у меня в парограммах есть серверная часть где делаются всякие обработки данных Я не делал точные замеры но мне кажется процентов на 20 быстрее чем то же самое в 32 бита. Проблемы пока с загрузкой FastReport , но пока там еще не разбирался. в Методе Init из FastRepH.prg ::frSystHandle := FrLoad(cOptionalPath) ::frSystHandle получает значение равное 0 и генерируется ошибка

Alex_Cher: Haz пишет: BCC это 32 - разрядный компилер , а собрать пытаешься тестовую версию под 64 разряда и MIngw. Возьми обычную сборку MiniGui под 32 и bcc55 - все соберется Какой нужен компилятор чтобы собрать MiniGui под 64 ...?

Dima: Alex_Cher пишет: Какой нужен компилятор чтобы собрать MiniGui под 64 ...? Он собранный уже идет. А на вопрос ответ: MINGW

Haz: Alex_Cher пишет: попытался собрать что-нибудь Хочется собрать под 64 ? Скачай сборку под 64,распакуй архив в корень C, и собирай примеры BAT файлами. PS. Если распаковать сборку в каталог отличный от C: , то нужно пробежаться по всем BAT и подправить пути PPS Библиотеки Minigui - уже идут в поставке , С-компилятор MINGW64 - уже идет в поставке , компилятор Harbour - уже в поставке Весь джентельменский набор есть, распаковал и пользуй

Dima: Haz пишет: Dima пишет: цитата: попытался собрать что-нибудь А форум глючит все таки )) Не писал я этого.

Haz: Dima пишет: Не писал я этого. Исправил )))

Alex_Cher: Haz пишет: Хочется собрать под 64 ? Скачай сборку под 64,распакуй архив в корень C, и собирай примеры BAT файлами. PS. Если распаковать сборку в каталог отличный от C: , то нужно пробежаться по всем BAT и подправить пути PPS Библиотеки Minigui - уже идут в поставке , С-компилятор MINGW64 - уже идет в поставке , компилятор Harbour - уже в поставке Весь джентельменский набор есть, распаковал и пользуй Я конечно слабоват в этом, но все это делалось много раз... При сборки примера Hello из Minigui вылетает ошибка в виде файла build.log - hbmk2: Warning: Dangerous low-level option not recommended: 'ldflags=-Wl,--allow-multiple-definition' in c:\minigui\minigui.hbc:13 Harbour 3.2.0dev (r1511161432) Copyright (c) 1999-2015, http://harbour-project.org/ gcc.exe: error: C:/Users/Alex/AppData/Local/Temp/hbmk_y9hacf.dir/hello.o: No such file or directory gcc.exe: error: C:/Users/Alex/AppData/Local/Temp/hbmk_y9hacf.dir/hbmk_dmy93j.o: No such file or directory hbmk2: Error: Running linker. 1 gcc.exe C:/Users/Alex/AppData/Local/Temp/hbmk_y9hacf.dir/hello.o C:/Users/Alex/AppData/Local/Temp/hbmk_y9hacf.dir/hbmk_dmy93j.o C:/minigui/Samples/hello/_temp.o -Wl,--allow-multiple-definition -mwindows -Wl,--start-group -lminigui -lhbprinter -lminiprint -ladordd -lcalldll -ltsbrowse -lhbct -lhbmisc -lhbtip -lhbziparc -lhbmzip -lminizip -lhbwin -lxhb -lmsvfw32 -lvfw32 -lhbextern -lhbdebug -lhbvm -lhbrtl -lhblang -lhbcpage -lgtcgi -lgtpca -lgtstd -lgtwin -lgtwvt -lgtgui -lhbrdd -lhbuddall -lhbusrrdd -lrddntx -lrddcdx -lrddnsx -lrddfpt -lhbrdd -lhbhsx -lhbsix -lhbmacro -lhbcplr -lhbpp -lhbcommon -lhbmainwin -lkernel32 -luser32 -lgdi32 -ladvapi32 -lws2_32 -liphlpapi -lwinspool -lcomctl32 -lcomdlg32 -lshell32 -luuid -lole32 -loleaut32 -lmpr -lwinmm -lmapi32 -limm32 -lmsimg32 -lwininet -lhbpcre -lhbzlib -Wl,--end-group -ohello.exe -Lc:/harbour/lib/win/mingw64 -Lc:/minigui/lib

Haz: Alex_Cher пишет: При сборки примера Hello из Minigui вылетает ошибка в виде файла build.log Alex, что тут сказать ... точно так же все делаю и собирает . Вот все что в логе, hello.exe запускается [pre2] hbmk2: Warning: Dangerous low-level option not recommended: 'ldflags=-Wl,--allow-multiple-definition' in c:\minigui\minigui.hbc:13 Harbour 3.2.0dev (r1511161432) Copyright (c) 1999-2015, http://harbour-project.org/ [/pre2] это все дальше ничего нет У меня Вынь 7 x 64 , а у тебя что ?

Alex_Cher: Перевел проект на MiniGUI64, впечатления самые приятные. Массивы с более 1 млн. записей (кол-во рекламаций по LADA за год) обрабатывает на 30-35 % быстрее. Первое с чем столкнулся при создание файла Excel вылетает ошибка - click here ссылка ошибки на строку - oWorkBook:Columns( 1):Set( 'NumberFormat', '@')

gfilatov2002: Выложил свежую бета версию с небольшими доработками по адресу: http://hmgextended.com/files/CONTRIB/minigui64-beta.exe Что нового: - обновлен компилятор Harbour-64; - добавлена библиотека HbOle; - добавлена библиотека Hmg_Hpdf; - другие мелкие исправления и дополнения.

gfilatov2002: Просто к сведению. Завершена подготовка следующей сборки библиотеки, которая выйдет послезавтра Полный список изменений см. ниже [pre2] * Changed: From this release, Minigui Extended was switched to a "Year.Month" version numbering scheme, similar to 7-Zip archiver and other tools. * Fixed: The wrong back color of a Label control into the TAB control with a BUTTONS clause definition (introduced in the build 2.4.9). Bug was reported by Anibal Villalobos Guillen <anibalgvillalobosg@yahoo.com>. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo2.prg in folder \samples\Basic\TAB) * Fixed: The conflict between a first GetBox control on the form and any hotkey pressing at the form's creation (introduced in the build 2.1.8). Problem was reported by Gilbert Vaillancourt. Contributed by Grigory Filatov <gfilatov@inbox.ru> * Updated: Synchronized Extended HMG for compatibility with Official HMG: - New: SET SCROLLSTEP TO <nStep> command. Set scroll amount for horizontal and vertical scrollbars in virtual dimensioned windows. (see demo in folder \samples\Basic\VIRTUALDIM) - New: SET SCROLLPAGE TO <nStep> command. Set Page scroll amount for horizontal and vertical scrollbars in virtual dimensioned windows. * Updated: The all C-code was modified for the correct compiling on 64-bit: - added a new header mgdefs.ch for 64-bit conversion; - added a new function IsExe64() which check if our app is 64-bit; - added Windows64.Manifest in the folder \Resources; - revised HbPrinter, MiniPrint, TsBrowse and WinReport libraries for 64-bit compatibility. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo in folder \samples\Basic\MAINDEMO_(SYNTAX_I)) * Updated: Documented the internal C-function IsWow64(): - return TRUE if a 32-bit application is running under 64-bit Windows; - return FALSE if a 32-bit application is running under 32-bit Windows; - return FALSE if a 64-bit application is running under 64-bit Windows. Remark: WOW64 is the x86 emulator that allows 32-bit Windows-based applications to running on 64-bit Windows. * Updated: CallDll library source code (see in folder \Source\CallDll). It is based on the Harbour core DLL functions now. DECLARE syntax and format are preserved for backwards compatibility, but, it is recommended to use CallDll32 function instead. Syntax was changed as: CallDll32( cDllName, nReturnType, cFunctionName [, <parameters> ] ) Note: CallDll32() detects the current code page and appropriately call the ANSI or Unicode version of the function. Based upon a contribution by Claudio Soto <srvet@adinet.com.uy>. Adapted for Minigui Extended by Grigory Filatov <gfilatov@inbox.ru> (see demos in folder \samples\Basic\CallDll) * Updated: 'Bos Taurus' Graphics Library for 64-bit compatibility. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see source in folder \Source\BosTaurus) * Updated: 'HMG Debugger' library for 64-bit compatibility. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see source in folder \Source\Debugger). * Updated: HbSQLite3 library: - update for using SQLITE3 version 3.10.0dev (from 3.9.2). Contributed by Grigory Filatov <gfilatov@inbox.ru> * Updated: Adaptation FiveWin Class TSBrowse 9.0 in HMG: - Fixed: Correction of the numeric format's handling in the method Excel2. Bug was reported by Verchenko Andrey <verchenkoag@gmail.com>. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo in folder \samples\Advanced\TSBrowse) * Updated: Harbour Compiler 3.2.0dev (SVN 2015-12-09 14:22). Contributed by Grigory Filatov <gfilatov@inbox.ru> (look at ReadMe.txt in folder \harbour) [/pre2] Примечание. Введен временный мораторий на включение новых примеров в сборку Парадоксально, но примеры из поставки библиотеки смотрят только подготовленные пользователи...

Andrey: gfilatov2002 пишет: Примечание. Введен временный мораторий на включение новых примеров в сборку А почему ? Объём диструбутива сейчас НЕ КРИТИЧЕН ! Ещё много чего непонятного в МиниГуи, да и инструментария для работы/просмотра нет. Примеры (заготовки) очень полезны для написания своих программ. А так придётся тыкаться вслепую, да и тем кто только осваивает нужны эти примеры. Я многое сам делал и разбирался (хотя без помощи Григория и других -результата бы у меня не было) ! Результатами своими делюсь - не жалко, вдруг кому пригодиться.

Haz: gfilatov2002 пишет: примеры из поставки библиотеки смотрят только подготовленные пользователи. Григорий , подготовленные пользователи эти примеры уже как стихи выучили наизусть Их смотрят как раз те кто начинает знакомство с МиниГуи , или втянулся совсем недавно. Соглашусь с тем что в примерах становится труднее разобраться или найти что либо. Предлагаю мараторий на примеры с исходниками размером болле 5к. ( это все же примеры а не приложения )

Andrey: Haz пишет: Предлагаю мараторий на примеры с исходниками размером болле 5к. ( это все же примеры а не приложения ) Не согласен. Порой нужно видеть как другие делаю приложения, чтобы самому научиться... А где смотреть, если пример маленький - и даёт не понятно что ? Я с окнами (различными типами) очень долго разбирался, как сделать в своей программе. Примеров же нет как делать главное меню и работать далее с меню. Всё методом проб и ошибок. На всё это нужно время... Уже 3 год переношу проект, никак не могу полностью перенести на МиниГуи хоть одну из своих программ.

Haz: Andrey пишет: Не согласен. Порой нужно видеть как другие делаю приложения, чтобы самому научиться... Безусловно списать проще чем самому думать, но так ничему не научишься. В качестве подтверждения - твой свежий вопрос по TSBrowse : - "Как поменять картинку в уже сформированной таблице ?" Ответ есть и в исходниках и даже в примерах ..... PS Притом мараторий же временный



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