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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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



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