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

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

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: gfilatov2002 пишет: Выложил декабрьскую сборку по адресу: Спасибо , я так понял это последняя.... Может и под MINGW выложите ?

gfilatov2002: Dima пишет: Может и под MINGW выложите ? Посмотри в личке...

Andrey: gfilatov2002 пишет: Выложил декабрьскую сборку по адресу: [pre2]* New: 'Get Text Width Test' sample. Based upon a contribution at official HMG forum. Adapted for Minigui Extended by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Basic\GetTextWidth)[/pre2] Давно использую функции Сергея: [pre2]FUNCTION GetTxtWidth( cText, nFontSize, cFontName, lBold ) // получить Width текста LOCAL hFont, nWidth DEFAULT cText := REPL('A', 2) , ; cFontName := _HMG_DefaultFontName, ; // из MiniGUI.Init() nFontSize := _HMG_DefaultFontSize, ; // из MiniGUI.Init() lBold := .F. IF Valtype(cText) == 'N' cText := repl('A', cText) ENDIF hFont := InitFont(cFontName, nFontSize, lBold) nWidth := GetTextWidth(0, cText, hFont) // ширина текста DeleteObject (hFont) RETURN nWidth FUNCTION GetTxtHeight( cText, nFontSize, cFontName, lBold ) // получить Height текста LOCAL hFont, nHeight DEFAULT cText := "B" , ; cFontName := _HMG_DefaultFontName, ; // из MiniGUI.Init() nFontSize := _HMG_DefaultFontSize, ; // из MiniGUI.Init() lBold := .F. hFont := InitFont( cFontName, nFontSize, lBold ) nHeight := GetTextHeight( 0, cText , hFont ) // высота шрифта DeleteObject( hFont ) RETURN nHeight[/pre2] Григорий, можно сделать совместить функции Сергея и новых функции ?


Dima: Andrey пишет: Давно использую функции Сергея Юзай и дальше Andrey пишет: Григорий, можно сделать совместить функции Сергея и новых функции ? Новые функции не в ядре а в примерах , зачем совмещать что то ?

Andrey: Хотелось бы иметь эти функции в ядре ! Замучился таскать их из проекта в проект. Да и маленькие примеры если делаешь, то опять нужно тащить эту функцию в пример. Dima пишет: Новые функции не в ядре а в примерах , зачем совмещать что то ? Да в ядре уже - смотри C:\MiniGUI\SOURCE\c_controlmisc.c

SergKis: Andrey пишет Замучился таскать их из проекта в проект. Используй, например, такой вариант. Сделай свой ch file в Include каталоге i_MySets.ch --------------[pre2] /* my ch */ #xtranslate IsFile( <f> ) => hb_FileExists( <f> ) FUNCTION GetTxtWidth( cText, nFontSize, cFontName, lBold ) // получить Width текста LOCAL hFont, nWidth DEFAULT cText := REPL('A', 2) , ; cFontName := _HMG_DefaultFontName, ; // из MiniGUI.Init() nFontSize := _HMG_DefaultFontSize, ; // из MiniGUI.Init() lBold := .F. IF Valtype(cText) == 'N' cText := repl('A', cText) ENDIF hFont := InitFont(cFontName, nFontSize, lBold) nWidth := GetTextWidth(0, cText, hFont) // ширина текста DeleteObject (hFont) RETURN nWidth FUNCTION GetTxtHeight( cText, nFontSize, cFontName, lBold ) // получить Height текста LOCAL hFont, nHeight DEFAULT cText := "B" , ; cFontName := _HMG_DefaultFontName, ; // из MiniGUI.Init() nFontSize := _HMG_DefaultFontSize, ; // из MiniGUI.Init() lBold := .F. hFont := InitFont( cFontName, nFontSize, lBold ) nHeight := GetTextHeight( 0, cText , hFont ) // высота шрифта DeleteObject( hFont ) RETURN nHeight [/pre2] А в prg делай #include <hmg.ch> #include <i_MySets.ch> ... Можно в hmg.ch добавить такую строку

SergKis: PS Т.к. это крайняя версия hmg (если и будет меняться, то редко) можешь смело в h_tbrowse.prg добавить #include <i_MySets.ch> // без стр. #xtranslate ... и пересобрать только tsbrowse.lib можешь еще свои доп. ф-ии определить в ch file. Если будет new версия, установишь и снова добавишь в h_tbrowse.prg #include <i_MySets.ch>

Vlad04: gfilatov2002 Было заявлено исходники HMG-IDE Роберто Лопеза, которые я адаптировал для Минигуи Где искать ?

gfilatov2002: Vlad04 пишет: Где искать ? Посмотри в папке \samples\Advanced\hmgide

Vlad04: BtnTextBox естественно нет ?

gfilatov2002: gfilatov2002 пишет: Пересмотрел свои планы Снова пересмотрел свои планы, и решил выпустить январскую сборку (с учетом последних исправлений ). Кратко, что нового: [pre2] * Fixed: The symbol fonts were abandoned in the internal function _DefineFont() (introduced in the build 16.12). * Fixed: An Image index assigning was ignored in the Grid control with 'ColumnControls' property defined as NIL (introduced in the build 20.06). * The command DEFINE FONT <font> FONTNAME <name> ... will delete automatically a previous font definition instead of the error message. * Adaptation of MiniGUI core for compatibility with Borland/ Embarcadero C++ 7.20 64-bit compiler. * Added the Harbour contrib library for Cabinet file (*.CAB) compression and extraction. * Added the binary of HMG IDE tool of Roberto Lopez. * Updated SQLite3 library and the some examples. [/pre2]

Andrey: Отличная новость ! Поздравляю всех с Рождеством !

gfilatov2002: Всем кому это интересно Завершена подготовка новой сборки 21.01 для BCC 5.8.2 и компиляторов Harbour и xHarbour, которая будет опубликована послезавтра. В основном сборка содержит исправления для обнаруженных недоработок, но есть и новое - добавлена библиотека HbCab для сжатия информации в формате CAB.

gfilatov2002: Опубликована январская сборка библиотеки, которая доступна по адресу: http://hmgextended.com/files/CONTRIB/hmg-21.01-setup.exe Желаю всем удачи в этом году

Andrey: gfilatov2002 пишет: Опубликована январская сборка библиотеки Отличная новость! Пере собрал свою прогу, вроде работает !

Haz: gfilatov2002 пишет: Опубликована январская сборка Григорий, спасибо.

Andrey: Небольшой баг, и я с ним уже сталкивался. На форму положили большой LABEL1, далее если второй LABEL2 (меньшего размера) положить на первый, то нет показа. Второй LABEL2 беру из другого *.prg Если положить GETBOX - показ есть, всякие FRAME или CHECKLABEL есть. Странно... Если из другого *.prg ставлю так:[pre2] @ aWin[1], aWin[2] LABEL Label_2 PARENT &cForm WIDTH aWin[3] HEIGHT nHLbl VALUE "text defect" ; SIZE 14 BOLD FONTCOLOR BLACK BACKCOLOR RED .... FORM_MyDefect(cForm,aTabWin,aBClr,aFont) .... FUNCTION FORM_MyDefect() ... DEFINE TAB Tab_ZDef OF &cForm ; ..... @ nRow1, nCol LABEL Label_3 .... // этот LABEL-3 показывается без PARENT &cForm[/pre2] Почему LABEL_2 не показывается, а LABEL-3 показывается ? И у объекта[pre2] DEFINE TAB Tab_ZDef OF &cForm ; AT nTabRow, nTabCol WIDTH nTabWidth HEIGHT nTabHeight ; VALUE nPgValue BACKCOLOR aTabBColor ; FONT cPgFont SIZE nPgFSize BOLD ; HOTTRACK HTFORECOLOR BLACK HTINACTIVECOLOR GRAY [/pre2] Не показываются вкладки !!! Стоит убрать большой LABEL1 с формы все работает, показ всех объектов есть.

SergKis: gfilatov2002 Поправил в c_controlmisc.c[pre2] HB_FUNC( INSERTVKEY ) { if( hb_parni( 2 ) != NULL ) { keybd_event ( ( BYTE ) hb_parni( 2 ), // virtual-key code 0, // hardware scan code 0, // flags specifying various function options 0 // additional data associated with keystroke ); } if( hb_parni( 1 ) != NULL ) { keybd_event ( ( BYTE ) hb_parni( 1 ), // virtual-key code 0, 0, 0 ); } if( hb_parni( 2 ) != NULL ) { keybd_event ( ( BYTE ) hb_parni( 2 ), // virtual-key code 0, // hardware scan code KEYEVENTF_KEYUP, // flags specifying various function options 0 // additional data associated with keystroke ); } } для использования с VK_MENU, VK_SHIFT, VK_CONTROL клавишами InsertVKey( , VK_MENU) // активация строки main menu InsertVKey(VK_V, VK_CONTROL) // Ctrl+V ... [/pre2] Включил в lib из примеров ф-ии HB_FUNC( SHELLEXECUTEEX ), HB_FUNC( TERMINATEPROCESS ) [pre2] #pragma BEGINDUMP #include <windows.h> #include <hbapi.h> #include <shlobj.h> HB_FUNC( SHELLEXECUTEEX ) { SHELLEXECUTEINFO SHExecInfo; ZeroMemory(&SHExecInfo, sizeof(SHExecInfo)); SHExecInfo.cbSize = sizeof(SHExecInfo); SHExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS; SHExecInfo.hwnd = HB_ISNIL( 1 ) ? GetActiveWindow() : (HWND) hb_parnl( 1 ); SHExecInfo.lpVerb = (LPCSTR) hb_parc( 2 ); SHExecInfo.lpFile = (LPCSTR) hb_parc( 3 ); SHExecInfo.lpParameters = (LPCSTR) hb_parc( 4 ); SHExecInfo.lpDirectory = (LPCSTR) hb_parc( 5 ); SHExecInfo.nShow = hb_parni( 6 ); if( ShellExecuteEx(&SHExecInfo) ) hb_retnl( (LONG) SHExecInfo.hProcess ); else hb_retnl( NULL ); } HB_FUNC( TERMINATEPROCESS ) { hb_retl( (BOOL) TerminateProcess( (HANDLE) hb_parnl( 1 ), 0 ) ); } #pragma ENDDUMP [/pre2] и сделал аналог _Execute(...)[pre2] *-----------------------------------------------------------------------------* FUNCTION _ExecuteEx( hWnd , cOperation , cFile , cParameters , cDirectory , nState ) *-----------------------------------------------------------------------------* RETURN ShellExecuteEx( hb_defaultValue( hWnd, GetActiveWindow() ) , ; cOperation /* possible values are 'edit', 'explore', 'find', 'open', 'print' */ , ; hb_defaultValue( cFile, "" ) , cParameters , cDirectory , hb_defaultValue( nState, SW_SHOWNORMAL ) ) [/pre2] То есть: если PID есть, то приложение уже запустилось, если не сработал PostMessage(hWnd, WM_CLOSE, 0, 0) для внешнего приложения, делаем TerminateProcess( hPid ), если это не помогло, то запускаем cRun := %windir%/System32/taskkill.exe /T /IM <AppName.exe> через _ExecuteEx( 0, "runas", cRun, , , SW_HIDE ) С этими изменениями стало проще бороться с внешними приложениями

gfilatov2002: SergKis пишет: для использования с VK_MENU, VK_SHIFT, VK_CONTROL клавишами Благодарю за помощь, но для этих целей у нас уже есть специальная функция HMG_PressKey() Пример использования для эмуляции нажатия Ctrl + Shift + A: HMG_PressKey( VK_CONTROL, VK_SHIFT, VK_A ) Остальные функции для выгрузки сторонних приложений есть в примерах и библиотеке ProcInfo

SergKis: gfilatov2002 пишет для этих целей у нас уже есть специальная функция HMG_PressKey() Эта ф-я нажимает и отпускает клавиши списком, как аналог AEval({ VK_CONTROL, VK_SHIFT, VK_A }, {|n| _PushKey( n ) }) совместно нажать VK_CONTROL + VK_V + отпустить VK_CONTROL не получится есть в примерах ShellExecuteEx(...) удобней исп., чем ShellExecute(...) может тогда заменить, а не таскать из примеров, если не добавлять



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