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

gfilatov2002: Andrey пишет: Можно ссылку на юникодную версию ? Отравил ссылки в Л.С. Andrey пишет: ссылку для компилятора Microsoft ? Там ссылка на версию Unicode для компилятора MS VC 2022

gfilatov2002: Выложил 2-е обновление сборки 22.12 с учетом последних исправлений и дополнений click here Завершена адаптация библиотеки для работы с последней доступной 64-битной версией компилятора Borland/Embarcadero C++ 7.40, который основан на LLVM/Clang C 3.3.1 (36707.161adda.9a76976) (64-bit) Мои наилучшие поздравления и пожелания всем форумчанам с наступающими праздниками! Желаю всем здоровья и удачи в Новом году

gfilatov2002: Поздравляю всех с сочельником и Рождеством Христовым! Завершена адаптация библиотеки для работы с последней доступной 64-битной версией компилятора Pelles ISO C Compiler 11.0, который по скорости работы не уступает Embarcadero C++ 7.40 (64-bit) Моя искренняя благодарность Андрею Верченко за поддержку моей работы!


gfilatov2002: Подготовил 1-й релиз-кандидат новой сборки 23.01, которая планируется к выпуску через две недели. Что нового: * Fixed: GETBOX: GetProperty( Form, Getbox, 'PICTURE' ) call always returns an empty value. Bug was reported by Hans Marc at the Minigui forum. Contributed by Grigory Filatov <gfilatov@gmail.com> * Enhanced: The Child window may manage the 'Parent' property. You can get this property at runtime: - function syntax: GetProperty ( ChildForm, 'Parent' ) --> cParent - pseudo-OOP syntax: ChildForm.Parent --> cParent Requested by Mario Rossi. Contributed by Grigory Filatov <gfilatov@gmail.com> * Enhanced: The Image control supports now a changing of the STRETCH property at runtime. You can set this property with: - function syntax: SetProperty ( Form, Image, 'Stretch', .T.|.F. ) - pseudo-OOP syntax: Form.Image.Stretch := .T.|.F. It was a postponed modification. Contributed by Grigory Filatov <gfilatov@gmail.com> * Modified: Revised a font management with DEFINE FONT <font> FONTNAME <name> ... command: - restored a previous behavior of the function GetFontList() with the default charset parameter. The issue was reported by Vagner Sanches. Contributed by Grigory Filatov <gfilatov@gmail.com> (see demo in folder \samples\Applications\WordScribe) * Updated: Synchronized Extended HMG for compatibility with Official HMG: - added the useful functions (and appropriate properties) below: - TreeItemGetAllValues(); - TreeItemGetChildValues(); - TreeItemGetSiblingValues(). - GetProperty -> AllValue, ChildValue, SiblingValue. Based upon a contribution of Claudio Soto <srvet@adinet.com.uy>. Adapted for Minigui Extended by Grigory Filatov (see demo in folder \samples\Advanced\DirTree_2) * Updated: Pacified the C-warnings in the MiniGUI core for compatibility with the Pelles ISO C Compiler 11.0 (64-bit). Contributed by Grigory Filatov <gfilatov@gmail.com> * Updated: HbSQLite3 library: - update for using SQLITE3 version 3.40.1 (from 3.40.0). Contributed by Grigory Filatov <gfilatov@gmail.com> * Updated: Harbour Compiler 3.2.0dev (SVN 2023-01-15 11:17): * Updated libpng library to 1.6.39 (from 1.6.38); * bumped copyright year to 2023. Contributed by Grigory Filatov <gfilatov@gmail.com> (look at ReadMe.txt in folder \harbour) * Updated: 'Inter-application communication' sample: - fixed to use temp folder instead of "C:\" to avoid write permission issues. Suggested by Grzegorz Wojnarowski (see in folder \samples\Basic\COMM) * Updated: 'Console+GUI mixed mode' sample. Contributed by Grzegorz Wojnarowski (see in folder \samples\Basic\MixedMode) * Updated: 'Virtual Grid with sorted columns' sample: - added workaround for inserted checkboxes. Contributed by Grigory Filatov <gfilatov@gmail.com> (see in folder \samples\Basic\ON_QUERYDATA) * Updated: 'Tree Menu' sample by Bicahi Esgici: - updated with the latest changes in the Minigui core. Contributed by Grigory Filatov <gfilatov@gmail.com> (see in folder \samples\Basic\TreeMenu) * Updated: 'MySql Client' sample: - code cleaning for warnings with Harbour switch -w3. Contributed by Grigory Filatov <gfilatov@gmail.com> (see in folder \samples\Advanced\MySqlClient) * Updated: 'Virtual Keyboard' sample. Contributed by Kristjan Zagar (see in folder \samples\Advanced\OnScreenKeyboard) * Updated: 'Volume Info' sample: - using the function wapi_GetVolumeInformation() instead of local implementation. Contributed by Grigory Filatov <gfilatov@gmail.com> (see demo.prg in folder \samples\Advanced\VOLUME_INFO) * Updated: 'Windows Version' sample: - fixed Windows 11 detection. Contributed by Grigory Filatov <gfilatov@gmail.com> (see in folder \samples\Advanced\WinVersion) * Updated: 'WMI Service usage' sample: - fixed 'Memory Info' detection. Contributed by Grigory Filatov <gfilatov@gmail.com> (see demo2.prg in folder \samples\Advanced\WMI_Service) Если у вас есть интересные дополнения или исправления, то я с удовольствием добавлю их в эту сборку Прошу откликнуться всех, кому это интересно...

Andrey: gfilatov2002 пишет: * Updated libpng library to 1.6.39 (from 1.6.38); А где эта библиотека сидит ? Картинки PNG будут лучше отображаться в ТСБ и на формах ? А то если картинку на форме увеличиваешь, то качество теряется, ребристая становиться...

SergKis: gfilatov2002 пишет Если у вас есть интересные дополнения или исправления Небольшие отличия THmgData() в моей версии [pre2] ... _METHOD Set( xKey, xVal ) METHOD Get( KEY, Def ) INLINE iif( KEY == NIL, ::aKey, hb_HGetDef( ::aKey, ::Upp( Key ), Def ) ) METHOD Del( Key ) INLINE ( iif( ::Pos( Key ) > 0, hb_HDel( ::aKey, ::Upp( Key ) ), Nil ), Self ) METHOD Pos( Key ) INLINE hb_HPos( ::aKey, ::Upp( Key ) ) METHOD Upp( Key ) INLINE iif( HB_ISCHAR( Key ) .AND. ::lUpp, Upper( Key ), Key ) METHOD Len() INLINE Len( ::aKey ) METHOD Keys() INLINE hb_HKeys( ::aKey ) METHOD Values() INLINE hb_HValues( ::aKey ) METHOD CloneHash() INLINE hb_HClone( ::aKey ) METHOD Json( cJ, lJ ) INLINE iif( HB_ISCHAR(cJ), ( cJ := SubS( cJ, At ("{", cJ) ), ; cJ := Left( cJ, RAt("}", cJ) ), ; ::Set(hb_jsonDecode( cJ ), ! Empty(lJ)) ), ; hb_jsonEncode( ::aKey, ! Empty(lJ) ) ) _METHOD GetAll( lAll ) _METHOD Eval( Block ) ERROR HANDLER ControlAssign ENDCLASS *-----------------------------------------------------------------------------* METHOD Set( xKey, xVal ) CLASS THmgData LOCAL k, v IF pCount() > 0 IF HB_ISHASH( xKey ) IF HB_ISLOGICAL(xVal) .and. xVal FOR EACH k, v IN hb_HKeys( xKey ), hb_HValues( xKey ) hb_HSet ( ::aKey, ::Upp( k ), v ) NEXT ELSE ::aKey := xKey ENDIF ELSE hb_HSet ( ::aKey, ::Upp( xKey ), xVal ) ENDIF ENDIF RETURN Self ... [/pre2] Хотя, METHOD Json( cJ, lJ ) не обязателен - для информации

gfilatov2002: SergKis пишет: Небольшие отличия THmgData() Спасибо Поправил, конечно, но без необязательного метода.

Andrey: Ранее было в 2019 году - SergKis пишет: Может добавить функцию (по аналогии с HMG_GetFormControls()) ? K примеру FUNCTION HMG_GetForms( cTyp, lObj ) А как узнать окно скрыто на экране или нет ? Т.е. получить признак окна Show/Hide у себя в функции: [pre2]FUNCTION myGetWinList() LOCAL i, cS, aForm := HMG_GetForms() cS := "" FOR i := 1 TO LEN(aForm) cS += STR(i) + ", " + aForm + ", " + _HMG_aFormType[ i ] + ", " cS += HB_NtoS(_HMG_aFormHandles[ i ]) + CRLF NEXT MsgInfo(cS) Return NIL[/pre2]

gfilatov2002: Andrey пишет: А как узнать окно скрыто на экране или нет ? Для этого можно использовать вызов функции GetProperty( "Form1", "Visible" ) Рабочий пример для проверки см. ниже [pre2]#include <hmg.ch> Declare window form1 Declare window form2 Declare window form3 Function Main() DEFINE WINDOW MAIN AT 218, 380 WIDTH 237 HEIGHT 286 TITLE "" MAIN DEFINE BUTTON oButton1 ACTION (formOff(),FormON(1)) CAPTION "Form1" TRANSPARENT .T. COL 53 HEIGHT 26 ROW 20 WIDTH 96 END BUTTON DEFINE BUTTON oButton2 ACTION (formOff(),FormON(2)) CAPTION "Form2" TRANSPARENT .T. COL 53 HEIGHT 26 ROW 51 WIDTH 96 END BUTTON DEFINE BUTTON oButton3 ACTION (formOff(),FormON(3)) CAPTION "Form3" TRANSPARENT .T. COL 53 HEIGHT 26 ROW 82 WIDTH 96 END BUTTON DEFINE BUTTON oButton4 ACTION MsgDebug( HMG_GetForms( "S" ) ) CAPTION "Form List" TRANSPARENT .T. COL 53 HEIGHT 26 ROW 130 WIDTH 96 END BUTTON DEFINE BUTTON oButton5 ACTION ( SetProperty( "Form1", "Visible", .F. ), ; MsgDebug( GetProperty( HMG_GetForms( "S" )[1], "Visible" ) ) ) CAPTION "Is Form1 visible?" TRANSPARENT .T. COL 53 HEIGHT 26 ROW 160 WIDTH 96 END BUTTON DEFINE BUTTON oButton6 ACTION RenameForms() CAPTION "Rename Forms" TRANSPARENT .T. COL 53 HEIGHT 26 ROW 186 WIDTH 96 END BUTTON END WINDOW CreateForm("Form1") CreateForm("Form2") CreateForm("Form3") activate window Form1,Form2,Form3,Main REturn .T. ********************************************************************************************************************************************** Procedure CreateForm(cForm) DEFINE WINDOW &(cForm) AT 286, 717 WIDTH 385 HEIGHT 351 TITLE "" //CHILD DEFINE LABEL oLabel1 VALUE cForm AUTOSIZE TRUE FONTBOLD TRUE VCENTERALIGN TRUE COL 123 FONTSIZE 30.00 HEIGHT 46.00 ROW 109 WIDTH 132 END LABEL END WINDOW Procedure FormON(nForm) switch nForm case 1 Form1.TopMost := .t. ; exit case 2 Form2.TopMost := .t. ; exit case 3 Form3.TopMost := .t. end Procedure FormOff Form1.TopMost := .f. ; Form2.TopMost := .f. ; Form3.TopMost := .f. Procedure RenameForms() LOCAL form FOR EACH form IN HMG_GetForms( "S" ) SetProperty(form,"title",form) NEXT[/pre2]

SergKis: gfilatov2002 пишет Для этого можно использовать вызов функции GetProperty( "Form1", "Visible" ) может исп. такие варианты #translate _IsWindowVisible( cForm ) => IsWindowVisible( GetFormHandle( cForm ) ) #translate IsFormVisible( FormName ) => IsWindowVisible( GetFormHandle( "FormName" ) )

gfilatov2002: SergKis пишет: исп. такие варианты Да, так можно сделать. Но все же предпочтительным в Минигуи является использование функций GetProperty()/SetProperty(). К вызову именно этих функций сводится использование псевдо-ООП в библиотеке.

SergKis: gfilatov2002 пишет К вызову именно этих функций сводится использование псевдо-ООП в библиотеке + DoMetod() и больше ничего не надо , но мнемоника параметров и их позиции для окон и конторлов при исп. этих ф-ий тоже требует усилий. Не зря же целый каталог для препроцессора существует, что бы win api напрямую не использовать.

Andrey: Спасибо БОЛЬШОЕ ! Получилось ! Только чуток не работает функции: [pre2] FOR nI := 1 TO Len(aForm) cForm := aForm[nI] ? nI, cForm, _HMG_aFormType[nI], _HMG_aFormHandles[nI] ?? "Visible=", IsWindowVisible( GetFormHandle( cForm ) ) ?? GetProperty( cForm, "Visible" ) ....[/pre2] [pre2]1 Form_Main A 460206 Visible= .T. .T. 2 Form_Win1 S 1049612 Visible= .F. .F. 3 Form_Win2 S 393928 Visible= .F. .F. 4 Form_Win3 S 67248 Visible= .F. .F. 5 Form_Table_Dog '' 0 Visible= .T. .T. 6 Form_Table_Abon S 132806 Visible= .T. .T. [/pre2] Почему нет значения Form_Table_Dog '' 0 ? Форма на экране есть, а значения в логе нет ! т.е. не работает - _HMG_aFormType[nI], _HMG_aFormHandles[nI]

SergKis: Andrey пишет т.е. не работает - _HMG_aFormType[nI], _HMG_aFormHandles[nI] посмотри значение _HMG_aFormDeleted[nI] для Form_Table_Dog (выведи для всех)

Andrey: SergKis пишет: посмотри значение _HMG_aFormDeleted[nI] для Form_Table_Dog Вот так:[pre2] 1 Form_Main A 2426566 .F. Visible= .T. .T. 2 Form_Win1 S 198358 .F. Visible= .F. .F. 3 Form_Win2 S 198356 .F. Visible= .F. .F. 4 Form_Win3 S 1115148 .F. Visible= .F. .F. 5 Form_Table_Dog '' 0 .T. Visible= .T. .T. 6 Form_Table_Abon S 983678 .F. Visible= .T. .T. 7 Form_Table_Zaivk S 852104 .F. Visible= .T. .T. [/pre2] Окно Form_Table_Dog с таблицей на экране есть ! Если сразу после главного окна открывать другое окно, то тогда оно = 0 !!! Вот открытие окон в другом порядке:[pre2] 1 Form_Main A 3344120 .F. Visible= .T. .T. 2 Form_Win1 S 722656 .F. Visible= .F. .F. 3 Form_Win2 S 1311898 .F. Visible= .F. .F. 4 Form_Win3 S 788088 .F. Visible= .F. .F. 5 Form_Table_Zaivk '' 0 .T. Visible= .T. .T. 6 Form_Table_Abon S 395016 .F. Visible= .T. .T. 7 Form_Table_Dog S 592490 .F. Visible= .T. .T. [/pre2]

SergKis: gfilatov2002 Сделал правки небольшие (управление клавишами на Preview HbPrinter) Проверял SAMPLES\Advanced\REPORT_GENERATOR_2\demo2.prg [pre2] ... #define WM_VSCROLL 0x0115 #define SB_LINEUP 0 #define SB_LINEDOWN 1 ... METHOD Preview() CLASS HBPrinter ... DEFINE WINDOW HBPREVIEW ; AT ahs[ 1, 1 ], ahs[ 1, 2 ] ; WIDTH ahs[ 1, 6 ] HEIGHT ahs[ 1, 5 ] ; TITLE aopisy[ 1 ] ICON 'zzz_Printicon' ; MODAL NOSIZE ; FONT 'Arial' SIZE 9 ; ON INIT ( DoMethod("HBPREVIEW1", "SetFocus") ) ... BUTTON B1 CAPTION aopisy[ 2 ] PICTURE 'hbprint_close' ACTION {|| ::PrevClose( .T. ) } SEPARATOR BUTTON B10 CAPTION aopisy[ 11 ] PICTURE 'hbprint_option' ACTION {|| ::PrintOption() } SEPARATOR BUTTON B8 CAPTION aopisy[ 9 ] PICTURE 'hbprint_zoomin' ACTION {|| scale := scale * 1.25, ::PrevShow(), DoMethod("HBPREVIEW1", "SetFocus") } BUTTON B9 CAPTION aopisy[ 10 ] PICTURE 'hbprint_zoomout' ACTION {|| scale := scale / 1.25, ::PrevShow(), DoMethod("HBPREVIEW1", "SetFocus") } SEPARATOR IF iloscstron > 1 BUTTON B4 CAPTION aopisy[ 5 ] PICTURE 'hbprint_top' ACTION {|| page := ::CurPage := 1, HBPREVIEW.combo_1.VALUE := page, ::PrevShow(), DoMethod("HBPREVIEW1", "SetFocus") } BUTTON B5 CAPTION aopisy[ 6 ] PICTURE 'hbprint_back' ACTION {|| page := ::CurPage := iif( page == 1, 1, page - 1 ), HBPREVIEW.combo_1.VALUE := page, ::PrevShow(), DoMethod("HBPREVIEW1", "SetFocus") } BUTTON B6 CAPTION aopisy[ 7 ] PICTURE 'hbprint_next' ACTION {|| page := ::CurPage := iif( page == iloscstron, page, page + 1 ), HBPREVIEW.combo_1.VALUE := page, ::PrevShow(), DoMethod("HBPREVIEW1", "SetFocus") } BUTTON B7 CAPTION aopisy[ 8 ] PICTURE 'hbprint_end' ACTION {|| page := ::CurPage := iloscstron, HBPREVIEW.combo_1.VALUE := page, ::PrevShow(), DoMethod("HBPREVIEW1", "SetFocus") } SEPARATOR ENDIF ... DEFINE WINDOW HBPREVIEW1 ; ... IF iloscstron > 1 _DefineHotKey( "HBPREVIEW1", 0, VK_PRIOR, {|| page := ::CurPage := iif( page == 1, 1, page - 1 ), HBPREVIEW.combo_1.VALUE := page, ::PrevShow() } ) // back _DefineHotKey( "HBPREVIEW1", 0, VK_NEXT, {|| page := ::CurPage := iif( page == iloscstron, page, page + 1 ), HBPREVIEW.combo_1.VALUE := page, ::PrevShow() } ) // next[ _DefineHotKey( "HBPREVIEW1", 0, VK_END, {|| page := ::CurPage := iloscstron, HBPREVIEW.combo_1.VALUE := page, ::PrevShow() } ) // end _DefineHotKey( "HBPREVIEW1", 0, VK_HOME, {|| page := ::CurPage := 1, HBPREVIEW.combo_1.VALUE := page, ::PrevShow() } ) // home _DefineHotKey( "HBPREVIEW1", 0, VK_LEFT, {|| page := ::CurPage := iif( page == 1, 1, page - 1 ), HBPREVIEW.combo_1.VALUE := page, ::PrevShow() } ) // Left // _DefineHotKey( "HBPREVIEW1", 0, VK_UP, {|| page := ::CurPage := iif( page == 1, 1, page - 1 ), HBPREVIEW.combo_1.VALUE := page, ::PrevShow() } ) // up _DefineHotKey( "HBPREVIEW1", 0, VK_RIGHT, {|| page := ::CurPage := iif( page == iloscstron, page, page + 1 ), HBPREVIEW.combo_1.VALUE := page, ::PrevShow() } ) // right // _DefineHotKey( "HBPREVIEW1", 0, VK_DOWN, {|| page := ::CurPage := iif( page == iloscstron, page, page + 1 ), HBPREVIEW.combo_1.VALUE := page, ::PrevShow() } ) // down ENDIF _DefineHotKey( "HBPREVIEW1", 0, VK_UP , {|| SendMessage( GetFormHandle("HBPREVIEW1"), WM_VSCROLL, SB_LINEUP , 0 ) } ) _DefineHotKey( "HBPREVIEW1", 0, VK_DOWN , {|| SendMessage( GetFormHandle("HBPREVIEW1"), WM_VSCROLL, SB_LINEDOWN, 0 ) } ) _DefineHotKey( "HBPREVIEW1", 0, VK_INSERT, {|| scale := scale * 1.25, ::PrevShow() } ) _DefineHotKey( "HBPREVIEW1", 0, VK_DELETE, {|| scale := scale / 1.25, ::PrevShow() } ) ... [/pre2] т.е. 1. фокус на окно отображения листов 2. Insert\Delete - zoom +\- листа 3. стрелки вверх, вниз перемещают строки листа вверх, вниз (PgUp, PgDown перемещают листы, как раньше) Наверно, надо для zoom задействовать еше левую\правую кнопки мыши и scroll на колесико, но не помню как на окно задействовать эти события Может это, вообще, лишнее ? PS. Поправил выше текст, вынес назначения клавиш за ENDIF (выделил цветом и bold) это с учетом 1 листа

gfilatov2002: Как и обещал, выложил финальную сборку 23.01 click here Также обновил Unicode версию библиотеки по старому адресу для Сергея Ваши комментарии приветствуются...

SergKis: gfilatov2002 пишет Также обновил Unicode версию библиотеки по старому адресу для Сергея Спасибо Покрутил еще HbPrinter-Preview, вот что вышло [pre2] METHOD Preview() CLASS HBPrinter ... DEFINE WINDOW HBPREVIEW ; ... END TOOLBAR _DefineHotKey( "HBPREVIEW", 0, VK_UP , {|| SendMessage( GetFormHandle("HBPREVIEW1"), WM_VSCROLL, SB_LINEUP , 0 ) } ) _DefineHotKey( "HBPREVIEW", 0, VK_DOWN , {|| SendMessage( GetFormHandle("HBPREVIEW1"), WM_VSCROLL, SB_LINEDOWN, 0 ) } ) _DefineHotKey( "HBPREVIEW", 0, VK_INSERT, {|| scale := scale * 1.25, ::PrevShow() } ) _DefineHotKey( "HBPREVIEW", 0, VK_DELETE, {|| scale := scale / 1.25, ::PrevShow() } ) AAdd( ahs, { 0, 0, 0, 0, 0, 0, GetFormHandle( "hbpreview" ) } ) ... DEFINE WINDOW HBPREVIEW1 ; WIDTH ahs[ 2, 6 ] - 15 HEIGHT ahs[ 2, 5 ] - ahs[ 3, 5 ] - ahs[ 4, 5 ] - 10 ; VIRTUAL WIDTH ahs[ 2, 6 ] - 5 ; VIRTUAL HEIGHT ahs[ 2, 5 ] - ahs[ 3, 5 ] - ahs[ 4, 5 ] ; TITLE aopisy[ 13 ] SPLITCHILD GRIPPERTEXT ".." _HMG_aFormClickProcedure [ GetFormIndex("HBPREVIEW1") ] := {|| IF _HMG_MouseState == 1 // WM_LBUTTONDOWN scale := scale * 1.25 ::PrevShow() ELSEIF _HMG_MouseState == 2 // WM_RBUTTONDOWN scale := scale / 1.25 ::PrevShow() ELSEIF _HMG_MouseState == 3 // WM_MBUTTONDOWN ENDIF DoMethod("HBPREVIEW", "SetFocus") Return Nil } AAdd( ahs, { 0, 0, 0, 0, 0, 0, GetFormHandle( "hbpreview1" ) } ) ... IF iloscstron > 1 _DefineHotKey( "HBPREVIEW1", 0, VK_PRIOR, {|| page := ::CurPage := iif( page == 1, 1, page - 1 ), HBPREVIEW.combo_1.VALUE := page, ::PrevShow() } ) // back _DefineHotKey( "HBPREVIEW1", 0, VK_NEXT, {|| page := ::CurPage := iif( page == iloscstron, page, page + 1 ), HBPREVIEW.combo_1.VALUE := page, ::PrevShow() } ) // next _DefineHotKey( "HBPREVIEW1", 0, VK_END, {|| page := ::CurPage := iloscstron, HBPREVIEW.combo_1.VALUE := page, ::PrevShow() } ) // end _DefineHotKey( "HBPREVIEW1", 0, VK_HOME, {|| page := ::CurPage := 1, HBPREVIEW.combo_1.VALUE := page, ::PrevShow() } ) // home _DefineHotKey( "HBPREVIEW1", 0, VK_LEFT, {|| page := ::CurPage := iif( page == 1, 1, page - 1 ), HBPREVIEW.combo_1.VALUE := page, ::PrevShow() } ) // Left // _DefineHotKey( "HBPREVIEW1", 0, VK_UP, {|| page := ::CurPage := iif( page == 1, 1, page - 1 ), HBPREVIEW.combo_1.VALUE := page, ::PrevShow() } ) // up _DefineHotKey( "HBPREVIEW1", 0, VK_RIGHT, {|| page := ::CurPage := iif( page == iloscstron, page, page + 1 ), HBPREVIEW.combo_1.VALUE := page, ::PrevShow() } ) // right // _DefineHotKey( "HBPREVIEW1", 0, VK_DOWN, {|| page := ::CurPage := iif( page == iloscstron, page, page + 1 ), HBPREVIEW.combo_1.VALUE := page, ::PrevShow() } ) // down ENDIF _DefineHotKey( "HBPREVIEW1", 0, VK_UP , {|| SendMessage( GetFormHandle("HBPREVIEW1"), WM_VSCROLL, SB_LINEUP , 0 ), DoMethod("HBPREVIEW", "SetFocus") } ) _DefineHotKey( "HBPREVIEW1", 0, VK_DOWN , {|| SendMessage( GetFormHandle("HBPREVIEW1"), WM_VSCROLL, SB_LINEDOWN, 0 ), DoMethod("HBPREVIEW", "SetFocus") } ) _DefineHotKey( "HBPREVIEW1", 0, VK_INSERT, {|| scale := scale * 1.25, ::PrevShow(), DoMethod("HBPREVIEW", "SetFocus") } ) _DefineHotKey( "HBPREVIEW1", 0, VK_DELETE, {|| scale := scale / 1.25, ::PrevShow(), DoMethod("HBPREVIEW", "SetFocus") } ) _HMG_ShowContextMenus := .F. END WINDOW ... [/pre2] Работает как хотелось (кроме прокрутки строк колесом)

gfilatov2002: SergKis пишет: Покрутил еще HbPrinter-Preview Неплохо, но как-то привычнее менять масштаб с помощью серых клавиш +/- вместо Ins/Del. SergKis пишет: кроме прокрутки строк колесом Можно попробовать задействовать такой код в обработчике события окна WM_MOUSEWHEEL [pre2] IF HiWord ( wParam ) == WHEEL_DELTA IF GetScrollPos ( hwnd , SB_VERT ) < 25 SendMessage ( hwnd , WM_VSCROLL , SB_TOP , 0 ) ELSE SendMessage ( hwnd , WM_VSCROLL , SB_PAGEUP , 0 ) ENDIF ELSE IF GetScrollPos ( hwnd , SB_VERT ) >= GetScrollRangeMax ( hwnd , SB_VERT ) - 10 SendMessage ( hwnd , WM_VSCROLL , SB_BOTTOM , 0 ) ELSE SendMessage ( hwnd , WM_VSCROLL , SB_PAGEDOWN , 0 ) ENDIF ENDIF ... [/pre2]

SergKis: gfilatov2002 пишет как-то привычнее менять масштаб с помощью серых клавиш +/- вместо Ins/Del На ноутах нет серых клавиш +/-, а у клиентов их уже больше чем стационарных, но добавить дополнительно можно. задействовать такой код в обработчике события окна WM_MOUSEWHEEL Хотелось что то цивильное, как блок в _HMG_aFormClickProcedure[...], колесико всегда есть на окнах



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