Форум » GUI » Примеры из Минигуи -ошибки, вопросы..... » Ответить

Примеры из Минигуи -ошибки, вопросы.....

Andrey: Всем привет. Взялся смотреть примеры из МиниГуи, так не все работают. Может кто подскажет что там "допилить" нужно ? А заодно может и исправить и добавить новые.... Очень красочный пример: \MiniGUI\SAMPLES\Advanced\AVI_Animation - не работает под Win7 (наверно AVI-шки нет в ресурсах) Предложение Григорию: Можно ли добавить еще один пример с отдельным AVI-файлом в ресурсах проекта и показом такого же бегунка ? Пример: \MiniGUI\SAMPLES\Advanced\DisplayMode - не работает под ХР и далее.... Пример: \MiniGUI\SAMPLES\Advanced\Tsb_filter - вылетает на ХР -------------------------------------------------------------------------------- Harbour MiniGUI Errorlog File Harbour MiniGUI Extended Edition 2.0.1 - 2011.09.21 -------------------------------------------------------------------------------- Date: 11/15/2011 Time: 22:13:24 Error BASE/1124 Argument error: LEFT Called from LEFT(0) Called from SCANSOFT(195) Called from MAIN(84) Пример: \MiniGUI\SAMPLES\BASIC\MsgEdit - не собирается... Z:\MiniGUI\SAMPLES\BASIC\MsgEdit>call ..\..\..\batch\compile.bat demo /L shell32 Harbour 3.1.0dev (Rev. 17042) Copyright (c) 1999-2011, http://harbour-project.org/ Compiling 'demo.prg'... Lines 20133, Functions/Procedures 30 Generating C source output to 'demo.c'... Done. Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland demo.c: Error E2141 demo.prg 993: Declaration syntax error *** 1 errors in Compile *** C compile error.

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

SergKis: Andrey пишет:когда форму раздвигаешь ... Вопрос Resize довольно сложный ... Мы решаем в основном за счет изменения размеров Browse, оставляя остальные части неизменными или как в данном примере - за счет нижней части: [pre] #include "minigui.ch" Function Main() Local i,j,y,x,w,h,t Local cWnd,hWnd,nCliW,nCliH Local cLblN1,nLblW1,nLblH1,nLblY1,nLblX1,aLblC1 Local cLblN2,nLblW2,nLblH2,nLblY2,nLblX2,aLblC2 Local cLblN3,nLblW3,nLblH3,nLblY3,nLblX3,aLblC3 cWnd := "MyWnd" DEFINE WINDOW &cWnd ; AT 40, 50 ; WIDTH 480 ; HEIGHT 410 ; TITLE 'Test Label box' ; MAIN ; ON SIZE ReSize() ; ON MAXIMIZE ReSize() hWnd := GetFormHandle(cWnd) nCliW := GetClientWidth (hWnd) nCliH := GetClientHeight(hWnd) cLblN1 := cWnd + '_Frame_Lbl1' nLblW1 := nCliW nLblH1 := int(nCliH * 0.4) nLblY1 := 0 nLblX1 := 0 aLblC1 := {251, 250, 174} cLblN2 := cWnd + '_Frame_Lbl2' nLblW2 := nCliW nLblH2 := int(nCliH * 0.2) nLblY2 := nLblY1 + nLblH1 nLblX2 := nLblX1 aLblC2 := {255, 0, 255} cLblN3 := cWnd + '_Frame_Lbl3' nLblW3 := nCliW nLblH3 := nCliH - (nLblH1 + nLblH2) nLblY3 := nLblY2 + nLblH2 nLblX3 := nLblX1 aLblC3 := {178, 227, 137} @ nLblY1, nLblX1 LABEL &cLblN1 VALUE "" OF &cWnd ; WIDTH nLblW1 HEIGHT nLblH1 ; BACKCOLOR aLblC1 BORDER CLIENTEDGE i := GetControlIndex(cLblN1, cWnd) j := cWnd + '_Frame_Text1' t := "Hello Frame 1" y := _HMG_aControlRow [ i ] + 10 x := _HMG_aControlCol [ i ] + 10 w := 100 h := 24 @ y, x LABEL &( j ) VALUE t WIDTH w HEIGHT h @ nLblY2, nLblX2 LABEL &cLblN2 VALUE "" OF &cWnd ; WIDTH nLblW2 HEIGHT nLblH2 ; BACKCOLOR aLblC2 BORDER CLIENTEDGE i := GetControlIndex(cLblN2, cWnd) j := cWnd + '_Frame_Text2' t := "Hello Frame 2" y := _HMG_aControlRow [ i ] + 10 x := _HMG_aControlCol [ i ] + 10 w := 100 h := 24 @ y, x LABEL &( j ) VALUE t WIDTH w HEIGHT h @ nLblY3, nLblX3 LABEL &cLblN3 VALUE "" OF &cWnd ; WIDTH nLblW3 HEIGHT nLblH3 ; BACKCOLOR aLblC3 BORDER CLIENTEDGE i := GetControlIndex(cLblN3, cWnd) j := cWnd + '_Frame_Text3' t := "Hello Frame 3" y := _HMG_aControlRow [ i ] + 10 x := _HMG_aControlCol [ i ] + 10 w := 100 h := 24 @ y, x LABEL &( j ) VALUE t WIDTH w HEIGHT h END WINDOW ACTIVATE WINDOW &cWnd Return Function ReSize() Local cWnd,hWnd,nCliW,nCliH Local cLblN1,nLblW1,nLblH1,nLblY1,nLblX1 Local cLblN2,nLblW2,nLblH2,nLblY2,nLblX2 Local cLblN3,nLblW3,nLblH3,nLblY3,nLblX3 cWnd := _HMG_ThisFormName hWnd := _HMG_aFormHandles [ _HMG_ThisFormIndex ] nCliW := GetClientWidth (hWnd) nCliH := GetClientHeight(hWnd) cLblN1 := cWnd + '_Frame_Lbl1' nLblW1 := nCliW cLblN2 := cWnd + '_Frame_Lbl2' nLblW2 := nCliW cLblN3 := cWnd + '_Frame_Lbl3' nLblW3 := nCliW nLblH3 := nCliH - ( GetProperty(cWnd, cLblN1, "Height") + ; GetProperty(cWnd, cLblN2, "Height") ) SetProperty(cWnd, cLblN1, "Width" , nLblW1) SetProperty(cWnd, cLblN2, "Width" , nLblW2) SetProperty(cWnd, cLblN3, "Width" , nLblW3) SetProperty(cWnd, cLblN3, "Height", nLblH3) Return [/pre]

Andrey: SergKis пишет: Вопрос Resize довольно сложный ... Спасибо БОЛЬШОЕ ! То что надо !!! Очень многое Вы мне прояснили.... Очень жалко что нет таких примеров в поставке Минигуи !

SergKis: Andrey пишет:Очень многое Вы мне прояснили.... Рад был помочь. Сами недавно сталкивались с такими вопросами. Помогла работа на VO. Andrey пишет:Очень жалко что нет таких примеров в поставке Минигуи ! Оформите и отдайте Григорию, если он сочтет полезным - включит.


gfilatov2002: Andrey пишет: Очень жалко что нет таких примеров в поставке Минигуи Ну, почему же нет ? Подобный пример использования события ON RESIZE есть в папке samples\Basic\GetClientSize

Andrey: gfilatov2002 пишет: Подобный пример использования события ON RESIZE есть в папке samples\Basic\GetClientSize Ой, не нашел... Спасибо Григорий !

Andrey: Видоизменил 1-ый пример (без RESIZE), положил на форму 3 кнопки. Не работают эти новые кнопки !!! Что не так делаю ? #include "minigui.ch" Function Main() Local i,j,y,x,w,h,t Local cWnd,hWnd,nCliW,nCliH Local cLblN1,nLblW1,nLblH1,nLblY1,nLblX1,aLblC1 Local cLblN2,nLblW2,nLblH2,nLblY2,nLblX2,aLblC2 Local cLblN3,nLblW3,nLblH3,nLblY3,nLblX3,aLblC3 cWnd := "MyWnd" DEFINE WINDOW &cWnd ; AT 40, 50 ; WIDTH 480 ; HEIGHT 410 ; TITLE 'Test Label box' ; NOMAXIMIZE NOSIZE ; MAIN hWnd := GetFormHandle(cWnd) nCliW := GetClientWidth (hWnd) nCliH := GetClientHeight(hWnd) cLblN1 := cWnd + '_Frame_Lbl1' nLblW1 := nCliW nLblH1 := int(nCliH * 0.4) nLblY1 := 0 nLblX1 := 0 aLblC1 := {251, 250, 174} cLblN2 := cWnd + '_Frame_Lbl2' nLblW2 := nCliW nLblH2 := int(nCliH * 0.2) nLblY2 := nLblY1 + nLblH1 nLblX2 := nLblX1 aLblC2 := {255, 0, 255} cLblN3 := cWnd + '_Frame_Lbl3' nLblW3 := nCliW nLblH3 := nCliH - (nLblH1 + nLblH2) nLblY3 := nLblY2 + nLblH2 nLblX3 := nLblX1 aLblC3 := {178, 227, 137} @ nLblY1, nLblX1 LABEL &cLblN1 VALUE "" OF &cWnd ; WIDTH nLblW1 HEIGHT nLblH1 ; BACKCOLOR aLblC1 BORDER CLIENTEDGE i := GetControlIndex(cLblN1, cWnd) j := cWnd + '_Frame_Text1' t := "Hello Frame 1" y := _HMG_aControlRow [ i ] + 10 x := _HMG_aControlCol [ i ] + 10 w := 100 h := 24 @ y, x LABEL &( j ) VALUE t WIDTH w HEIGHT h BACKCOLOR aLblC1 @ nLblY2, nLblX2 LABEL &cLblN2 VALUE "" OF &cWnd ; WIDTH nLblW2 HEIGHT nLblH2 ; BACKCOLOR aLblC2 BORDER CLIENTEDGE i := GetControlIndex(cLblN2, cWnd) j := cWnd + '_Frame_Text2' t := "Hello Frame 2" y := _HMG_aControlRow [ i ] + 10 x := _HMG_aControlCol [ i ] + 10 w := 100 h := 24 @ y, x LABEL &( j ) VALUE t WIDTH w HEIGHT h BACKCOLOR aLblC2 @ nLblY3, nLblX3 LABEL &cLblN3 VALUE "" OF &cWnd ; WIDTH nLblW3 HEIGHT nLblH3 ; BACKCOLOR aLblC3 BORDER CLIENTEDGE i := GetControlIndex(cLblN3, cWnd) j := cWnd + '_Frame_Text3' t := "Hello Frame 3" y := _HMG_aControlRow [ i ] + 10 x := _HMG_aControlCol [ i ] + 10 w := 100 h := 24 @ y, x LABEL &( j ) VALUE t WIDTH w HEIGHT h BACKCOLOR aLblC3 @ 20 , 160 BUTTON Button_1 CAPTION 'BORDER ON' ; ACTION { || SetProperty(cWnd, cLblN3, "BORDER" , .T.), SetProperty(cWnd, "Label_2", "Value" , "ON" ) } @ 60 , 160 BUTTON Button_2 CAPTION 'BORDER OFF' ; ACTION { || SetProperty(cWnd, cLblN3, "BORDER" , .F.), SetProperty(cWnd, "Label_2", "Value" , "OFF" ) } @ nCliH - 60 , nCliW - 120 BUTTON Button_3 CAPTION 'Cancel' ; ACTION ThisWindow.Release @ 40,300 LABEL Label_1 ; VALUE 'BORDER:'AUTOSIZE BACKCOLOR aLblC1 @ 40,410 LABEL Label_2 ; VALUE '' BACKCOLOR aLblC1 END WINDOW ACTIVATE WINDOW &cWnd Return #pragma BEGINDUMP #include <windows.h> #include "hbapi.h" // C функции, если их нет HB_FUNC( GETCLIENTWIDTH ) { RECT rect; GetClientRect( ( HWND ) hb_parnl(1), &rect ); hb_retni( ( INT ) rect.right - rect.left ); } HB_FUNC( GETCLIENTHEIGHT ) { RECT rect; GetClientRect( ( HWND ) hb_parnl(1), &rect ); hb_retni( ( INT ) rect.bottom - rect.top ); } #pragma ENDDUMP

SergKis: Andrey пишет:Не работают эти новые кнопки !!! Работает пример: [pre] #include "minigui.ch" Function Main() Local i,j,y,x,w,h,t Local cWnd,hWnd,nCliW,nCliH Local cLblN1,nLblW1,nLblH1,nLblY1,nLblX1,aLblC1 Local cLblN2,nLblW2,nLblH2,nLblY2,nLblX2,aLblC2 Local cLblN3,nLblW3,nLblH3,nLblY3,nLblX3,aLblC3 cWnd := "MyWnd" DEFINE WINDOW &cWnd ; AT 40, 50 ; WIDTH 480 ; HEIGHT 410 ; TITLE 'Test Label box' ; MAIN ; ON SIZE ReSize() ; ON MAXIMIZE ReSize() hWnd := GetFormHandle(cWnd) nCliW := GetClientWidth (hWnd) nCliH := GetClientHeight(hWnd) cLblN1 := cWnd + '_Frame_Lbl1' nLblW1 := nCliW nLblH1 := int(nCliH * 0.4) nLblY1 := 0 nLblX1 := 0 aLblC1 := {251, 250, 174} cLblN2 := cWnd + '_Frame_Lbl2' nLblW2 := nCliW nLblH2 := int(nCliH * 0.2) nLblY2 := nLblY1 + nLblH1 nLblX2 := nLblX1 aLblC2 := {255, 0, 255} cLblN3 := cWnd + '_Frame_Lbl3' nLblW3 := nCliW nLblH3 := nCliH - (nLblH1 + nLblH2) nLblY3 := nLblY2 + nLblH2 nLblX3 := nLblX1 aLblC3 := {178, 227, 137} @ nLblY1, nLblX1 LABEL &cLblN1 VALUE "" OF &cWnd ; WIDTH nLblW1 HEIGHT nLblH1 ; BACKCOLOR aLblC1 BORDER CLIENTEDGE i := GetControlIndex(cLblN1, cWnd) j := cWnd + '_Frame_Text1' t := "Hello Frame 1" y := _HMG_aControlRow [ i ] + 10 x := _HMG_aControlCol [ i ] + 10 w := 100 h := 24 @ y, x LABEL &( j ) VALUE t WIDTH w HEIGHT h x += 10 + GetProperty(cWnd, j, "Width") j := cWnd + '_Frame_Btn1_Ok' @ y, x BUTTON &( j ) CAPTION "OK" WIDTH w HEIGHT h ; ACTION ( SetProperty(cWnd, "Label_1", "Value", "LINE"), ; SetProperty(cWnd, "Label_2", "Value", "ON" ) ) @ nLblY2, nLblX2 LABEL &cLblN2 VALUE "" OF &cWnd ; WIDTH nLblW2 HEIGHT nLblH2 ; BACKCOLOR aLblC2 BORDER CLIENTEDGE i := GetControlIndex(cLblN2, cWnd) j := cWnd + '_Frame_Text2' t := "Hello Frame 2" y := _HMG_aControlRow [ i ] + 10 x := _HMG_aControlCol [ i ] + 10 w := 100 h := 24 @ y, x LABEL &( j ) VALUE t WIDTH w HEIGHT h x += 10 + GetProperty(cWnd, j, "Width") j := cWnd + '_Frame_Btn2_Ok' @ y, x BUTTON &( j ) CAPTION "OK" WIDTH w HEIGHT h ; ACTION ( SetProperty(cWnd, "Label_1", "Value", "BORDER"), ; SetProperty(cWnd, "Label_2", "Value", "OFF" ) ) @ nLblY3, nLblX3 LABEL &cLblN3 VALUE "" OF &cWnd ; WIDTH nLblW3 HEIGHT nLblH3 ; BACKCOLOR aLblC3 BORDER CLIENTEDGE i := GetControlIndex(cLblN3, cWnd) j := cWnd + '_Frame_Text3' t := "Hello Frame 3" y := _HMG_aControlRow [ i ] + 10 x := _HMG_aControlCol [ i ] + 10 w := 100 h := 24 @ y, x LABEL &( j ) VALUE t WIDTH w HEIGHT h x += 10 + GetProperty(cWnd, j, "Width") j := cWnd + '_Frame_Btn3_Ok' @ y, x BUTTON &( j ) CAPTION "OK" WIDTH w HEIGHT h ; ACTION ( MsgInfo("Press button "+j) ) @ 40, 110 LABEL Label_1 VALUE 'BORDER:' ; WIDTH w HEIGHT h ; BACKCOLOR aLblC1 @ 70, 110 LABEL Label_2 VALUE 'OFF' ; WIDTH w HEIGHT h ; BACKCOLOR aLblC1 END WINDOW ACTIVATE WINDOW &cWnd Return Function ReSize() Local cWnd,hWnd,nCliW,nCliH Local cLblN1,nLblW1,nLblH1,nLblY1,nLblX1 Local cLblN2,nLblW2,nLblH2,nLblY2,nLblX2 Local cLblN3,nLblW3,nLblH3,nLblY3,nLblX3 cWnd := _HMG_ThisFormName hWnd := _HMG_aFormHandles [ _HMG_ThisFormIndex ] nCliW := GetClientWidth (hWnd) nCliH := GetClientHeight(hWnd) cLblN1 := cWnd + '_Frame_Lbl1' nLblW1 := nCliW cLblN2 := cWnd + '_Frame_Lbl2' nLblW2 := nCliW cLblN3 := cWnd + '_Frame_Lbl3' nLblW3 := nCliW nLblH3 := nCliH - ( GetProperty(cWnd, cLblN1, "Height") + ; GetProperty(cWnd, cLblN2, "Height") ) SetProperty(cWnd, cLblN1, "Width" , nLblW1) SetProperty(cWnd, cLblN2, "Width" , nLblW2) SetProperty(cWnd, cLblN3, "Width" , nLblW3) SetProperty(cWnd, cLblN3, "Height", nLblH3) Return [/pre] Andrey пишет: ACTION { || SetProperty(cWnd, cLblN3, "BORDER" , .T.), SetProperty(cWnd, "Label_2", "Value" , "ON" ) } Что такое SetProperty(cWnd, cLblN3, "BORDER" , .T.) ? Мы AUTOSIZE не используем в нашей версии он глючит при отображении ...

SergKis: Andrey пишет:Не нравиться порядок написания программ в МиниГуи... уж очень растянуто получается... Подскажите можно ли как то уменьшить или изменить это ? Можно пойти по такому пути: [pre2] В реальной программе, я думаю, имена переменных контролов НЕ НАДО писать cWnd+'_Frame_Text2' и т.д. Можно писать смысловое название переменной без названия окна, сгруппировав по темам. Расмотрим поля базы клиентов: Текст для Label : FieldName : Label переменная : GetBox переменная ------------------------------------------------------------------- Код организации INN Klient_Lbl_INN Klient_Get_INN Наименование NAME Klient_Lbl_NAME Klient_Get_NAME ... Можно написать функции на эти контролы: Function Klient_Lbl_INN( y, x, Value, ... ) Local w := 100, h := 24, cElm, cWnd, nW, nH Default Value To "Код организации" cWnd := _HMG_ThisFormName cElm := 'Klient_Lbl_INN' @ y, x LABEL &cElm VALUE Value WIDTH w HEIGHT h nW := GetProperty(cWnd, cElm, "Width") nH := GetProperty(cWnd, cElm, "Height") Return { nW, nH } Function Klient_Get_INN( y, x, cFld, ... ) Local w := 100, h := 24, cElm, cWnd, nW, nH cWnd := _HMG_ThisFormName cElm := 'Klient_Get_INN' cFld := 'KLI->INN' @ y, x GETBOX &cElm HEIGHT h WIDTH w ; FIELD cFld ; VALID ( ... ) ; VALIDMESSAGE "Error INN" ; ... nW := GetProperty(cWnd, cElm, "Width") nH := GetProperty(cWnd, cElm, "Height") Return { nW, nH } и т.д. Тогда на разных окнах можно использовать эти функции. Окна: - Справочник cWnd := Klient_Spr - Документы: cWnd := Dokum_Prixod, cWnd := Dokum_Raxod ... Пример: Local nGapsW := 10 // промежуток между контролами Widtn Local nGapsH := 10 // промежуток между контролами Height ... @ nLblY1, nLblX1 LABEL &cLblN1 VALUE "" OF &cWnd ; WIDTH nLblW1 HEIGHT nLblH1 ; BACKCOLOR aLblC1 BORDER CLIENTEDGE i := GetControlIndex(cLblN1, cWnd) y := _HMG_aControlRow [ i ] + nGapsW x := _HMG_aControlCol [ i ] + nGapsW j := Klient_Lbl_INN( y, x ); x += j[1] + nGapsW j := Klient_Get_INN( y, x ) y += j[2] + nGapsH x := _HMG_aControlCol [ i ] + nGapsW j := Klient_Lbl_Name( y, x ); x += j[1] + nGapsW j := Klient_Get_Name( y, x ) y += j[2] + nGapsH x := _HMG_aControlCol [ i ] + nGapsW ... [/pre2]

Andrey: SergKis пишет: Что такое SetProperty(cWnd, cLblN3, "BORDER" , .T.) ? Да я хотел на кнопку повесить включение/отключение бордюра ..... BORDER CLIENTEDGE как в примере MiniGUI\SAMPLES\BASIC\BLINK Только по доку потом увидел что нет такого свойства у LABEL .... А жалко...

SergKis: Andrey пишет:А жалко.. Вы хотите типа такое: [pre] #include "minigui.ch" Function Main() Local i,j,y,x,w,h,t Local cWnd,hWnd,nCliW,nCliH,nGapsW,nGapsH Local cLblN1,nLblW1,nLblH1,nLblY1,nLblX1,aLblC1 Local cLblN2,nLblW2,nLblH2,nLblY2,nLblX2,aLblC2 Local cLblN3,nLblW3,nLblH3,nLblY3,nLblX3,aLblC3 cWnd := "MyWnd" nGapsW := 14 nGapsH := 14 DEFINE WINDOW &cWnd ; AT 40, 50 ; WIDTH 480 ; HEIGHT 410 ; TITLE 'Test Label box' ; MAIN ; ON SIZE ReSize() ; ON MAXIMIZE ReSize() hWnd := GetFormHandle(cWnd) nCliW := GetClientWidth (hWnd) nCliH := GetClientHeight(hWnd) cLblN1 := cWnd + '_Frame_Lbl1' nLblW1 := nCliW nLblH1 := int(nCliH * 0.4) nLblY1 := 0 nLblX1 := 0 aLblC1 := {251, 250, 174} cLblN2 := cWnd + '_Frame_Lbl2' nLblW2 := nCliW nLblH2 := int(nCliH * 0.2) nLblY2 := nLblY1 + nLblH1 nLblX2 := nLblX1 aLblC2 := {255, 0, 255} cLblN3 := cWnd + '_Frame_Lbl3' nLblW3 := nCliW nLblH3 := nCliH - (nLblH1 + nLblH2) nLblY3 := nLblY2 + nLblH2 nLblX3 := nLblX1 aLblC3 := {178, 227, 137} @ nLblY1, nLblX1 LABEL &cLblN1 VALUE "" OF &cWnd ; WIDTH nLblW1 HEIGHT nLblH1 ; BACKCOLOR aLblC1 BORDER CLIENTEDGE i := GetControlIndex(cLblN1, cWnd) y := 0 x := int(nGapsH / 2) w := GetClientWidth (_HMG_aControlHandles [ i ]) - int(nGapsW / 2) h := GetClientHeight(_HMG_aControlHandles [ i ]) @ y, x FRAME &( cWnd + '_Frame_Frm1' ) CAPTION "" ; WIDTH w HEIGHT h ; OPAQUE j := cWnd + '_Frame_Text1' t := "Hello Frame 1" y := _HMG_aControlRow [ i ] + nGapsH x := _HMG_aControlCol [ i ] + nGapsW w := 100 h := 24 @ y, x LABEL &( j ) VALUE t WIDTH w HEIGHT h x += 10 + GetProperty(cWnd, j, "Width") j := cWnd + '_Frame_Btn1_Ok' @ y, x BUTTON &( j ) CAPTION "OK" WIDTH w HEIGHT h ; ACTION ( SetProperty(cWnd, "Label_1", "Value", "LINE"), ; SetProperty(cWnd, "Label_2", "Value", "ON" ) ) @ nLblY2, nLblX2 LABEL &cLblN2 VALUE "" OF &cWnd ; WIDTH nLblW2 HEIGHT nLblH2 ; BACKCOLOR aLblC2 BORDER CLIENTEDGE i := GetControlIndex(cLblN2, cWnd) j := cWnd + '_Frame_Text2' t := "Hello Frame 2" y := _HMG_aControlRow [ i ] + nGapsH x := _HMG_aControlCol [ i ] + nGapsW w := 100 h := 24 @ y, x LABEL &( j ) VALUE t WIDTH w HEIGHT h x += 10 + GetProperty(cWnd, j, "Width") j := cWnd + '_Frame_Btn2_Ok' @ y, x BUTTON &( j ) CAPTION "OK" WIDTH w HEIGHT h ; ACTION ( SetProperty(cWnd, "Label_1", "Value", "BORDER"), ; SetProperty(cWnd, "Label_2", "Value", "OFF" ) ) @ nLblY3, nLblX3 LABEL &cLblN3 VALUE "" OF &cWnd ; WIDTH nLblW3 HEIGHT nLblH3 ; BACKCOLOR aLblC3 BORDER CLIENTEDGE i := GetControlIndex(cLblN3, cWnd) j := cWnd + '_Frame_Text3' t := "Hello Frame 3" y := _HMG_aControlRow [ i ] + nGapsH x := _HMG_aControlCol [ i ] + nGapsW w := 100 h := 24 @ y, x LABEL &( j ) VALUE t WIDTH w HEIGHT h x += 10 + GetProperty(cWnd, j, "Width") j := cWnd + '_Frame_Btn3_Ok' @ y, x BUTTON &( j ) CAPTION "OK" WIDTH w HEIGHT h ; ACTION ( SetProperty(cWnd, cWnd + '_Frame_Frm1', "Visible", ; ! GetProperty(cWnd, cWnd + '_Frame_Frm1', "Visible")) ) // ACTION ( MsgInfo("Press button "+j) ) @ 40, 110 LABEL Label_1 VALUE 'BORDER:' ; WIDTH w HEIGHT h ; BACKCOLOR aLblC1 @ 70, 110 LABEL Label_2 VALUE 'OFF' ; WIDTH w HEIGHT h ; BACKCOLOR aLblC1 END WINDOW ACTIVATE WINDOW &cWnd Return Function ReSize() Local cWnd,hWnd,nCliW,nCliH Local cLblN1,nLblW1,nLblH1,nLblY1,nLblX1 Local cLblN2,nLblW2,nLblH2,nLblY2,nLblX2 Local cLblN3,nLblW3,nLblH3,nLblY3,nLblX3 cWnd := _HMG_ThisFormName hWnd := _HMG_aFormHandles [ _HMG_ThisFormIndex ] nCliW := GetClientWidth (hWnd) nCliH := GetClientHeight(hWnd) cLblN1 := cWnd + '_Frame_Lbl1' nLblW1 := nCliW cLblN2 := cWnd + '_Frame_Lbl2' nLblW2 := nCliW cLblN3 := cWnd + '_Frame_Lbl3' nLblW3 := nCliW nLblH3 := nCliH - ( GetProperty(cWnd, cLblN1, "Height") + ; GetProperty(cWnd, cLblN2, "Height") ) SetProperty(cWnd, cLblN1, "Width" , nLblW1) SetProperty(cWnd, cLblN2, "Width" , nLblW2) SetProperty(cWnd, cLblN3, "Width" , nLblW3) SetProperty(cWnd, cLblN3, "Height", nLblH3) Return [/pre] Можно смотреть в сторону команд (i_graph.ch): DRAW LINE IN WINDOW ... DRAW RECTANGLE IN WINDOW ...

Andrey: А как тогда сделать перерисовку всего лабела ? Типа: IF nFlagBorder == 1 @ nLblY1, nLblX1 LABEL &cLblN1 VALUE "" OF &cWnd ; WIDTH nLblW1 HEIGHT nLblH1 ; BACKCOLOR aLblC1 ELSEIF nFlagBorder == 2 @ nLblY1, nLblX1 LABEL &cLblN1 VALUE "" OF &cWnd ; WIDTH nLblW1 HEIGHT nLblH1 ; BACKCOLOR aLblC1 BORDER ELSEIF nFlagBorder == 3 @ nLblY1, nLblX1 LABEL &cLblN1 VALUE "" OF &cWnd ; WIDTH nLblW1 HEIGHT nLblH1 ; BACKCOLOR aLblC1 BORDER CLIENTEDGE ENDIF

SergKis: Andrey пишет:А как тогда сделать перерисовку всего лабела ? Пример: [pre] #include "minigui.ch" Function Main() Local i,j,y,x,w,h,t Local cWnd,hWnd,nCliW,nCliH,nGapsW,nGapsH Local cLblN1,nLblW1,nLblH1,nLblY1,nLblX1,aLblC1 Local cLblN2,nLblW2,nLblH2,nLblY2,nLblX2,aLblC2 Local cLblN3,nLblW3,nLblH3,nLblY3,nLblX3,aLblC3 cWnd := "MyWnd" nGapsW := 14 nGapsH := 14 DEFINE WINDOW &cWnd ; AT 40, 50 ; WIDTH 480 ; HEIGHT 410 ; TITLE 'Test Label box' ; MAIN ; NOMINIMIZE ; NOMAXIMIZE ; NOSIZE // ON SIZE ReSize() ; // ON MAXIMIZE ReSize() hWnd := GetFormHandle(cWnd) nCliW := GetClientWidth (hWnd) nCliH := GetClientHeight(hWnd) cLblN1 := cWnd + '_Frame_Lbl1' nLblW1 := nCliW nLblH1 := int(nCliH * 0.4) nLblY1 := 0 nLblX1 := 0 aLblC1 := {251, 250, 174} cLblN2 := cWnd + '_Frame_Lbl2' nLblW2 := nCliW nLblH2 := int(nCliH * 0.2) nLblY2 := nLblY1 + nLblH1 nLblX2 := nLblX1 aLblC2 := {255, 0, 255} cLblN3 := cWnd + '_Frame_Lbl3' nLblW3 := nCliW nLblH3 := nCliH - (nLblH1 + nLblH2) nLblY3 := nLblY2 + nLblH2 nLblX3 := nLblX1 aLblC3 := {178, 227, 137} @ nLblY1, nLblX1 LABEL &( cLblN1 + "1") VALUE "" OF &cWnd ; WIDTH nLblW1 HEIGHT nLblH1 ; BACKCOLOR aLblC1 BORDER CLIENTEDGE SetProperty(cWnd, cLblN1 + "1", "Visible", .F.) @ nLblY1, nLblX1 LABEL &( cLblN1 + "0") VALUE "" OF &cWnd ; WIDTH nLblW1 HEIGHT nLblH1 ; BACKCOLOR aLblC1 // BORDER CLIENTEDGE i := GetControlIndex(cLblN1 + "0", cWnd) j := cWnd + '_Frame_Text1' t := "Hello Frame 1" y := _HMG_aControlRow [ i ] + nGapsH x := _HMG_aControlCol [ i ] + nGapsW w := 100 h := 24 @ y, x LABEL &( j ) VALUE t WIDTH w HEIGHT h x += 10 + GetProperty(cWnd, j, "Width") j := cWnd + '_Frame_Btn1_Ok' @ y, x BUTTON &( j ) CAPTION "OK" WIDTH w HEIGHT h ; ACTION ( SetProperty(cWnd, "Label_1", "Value", "LINE"), ; SetProperty(cWnd, "Label_2", "Value", "ON" ) ) @ nLblY2, nLblX2 LABEL &cLblN2 VALUE "" OF &cWnd ; WIDTH nLblW2 HEIGHT nLblH2 ; BACKCOLOR aLblC2 BORDER CLIENTEDGE i := GetControlIndex(cLblN2, cWnd) j := cWnd + '_Frame_Text2' t := "Hello Frame 2" y := _HMG_aControlRow [ i ] + nGapsH x := _HMG_aControlCol [ i ] + nGapsW w := 100 h := 24 @ y, x LABEL &( j ) VALUE t WIDTH w HEIGHT h x += 10 + GetProperty(cWnd, j, "Width") j := cWnd + '_Frame_Btn2_Ok' @ y, x BUTTON &( j ) CAPTION "OK" WIDTH w HEIGHT h ; ACTION ( SetProperty(cWnd, "Label_1", "Value", "BORDER"), ; SetProperty(cWnd, "Label_2", "Value", "OFF" ) ) @ nLblY3, nLblX3 LABEL &cLblN3 VALUE "" OF &cWnd ; WIDTH nLblW3 HEIGHT nLblH3 ; BACKCOLOR aLblC3 BORDER CLIENTEDGE i := GetControlIndex(cLblN3, cWnd) j := cWnd + '_Frame_Text3' t := "Hello Frame 3" y := _HMG_aControlRow [ i ] + nGapsH x := _HMG_aControlCol [ i ] + nGapsW w := 100 h := 24 @ y, x LABEL &( j ) VALUE t WIDTH w HEIGHT h x += 10 + GetProperty(cWnd, j, "Width") j := cWnd + '_Frame_Btn3_Ok' @ y, x BUTTON &( j ) CAPTION "OK" WIDTH w HEIGHT h ; ACTION ( SetProperty(cWnd, cLblN1 + "0", "Visible", ! GetProperty(cWnd, cLblN1 + "0", "Visible")), ; SetProperty(cWnd, cLblN1 + '1', "Visible", ! GetProperty(cWnd, cLblN1 + "1", "Visible")), ; Lbl1Refr() ) @ 40, 110 LABEL Label_1 VALUE 'BORDER:' ; WIDTH w HEIGHT h ; BACKCOLOR aLblC1 @ 70, 110 LABEL Label_2 VALUE 'OFF' ; WIDTH w HEIGHT h ; BACKCOLOR aLblC1 END WINDOW ACTIVATE WINDOW &cWnd Return Function Lbl1Refr() Local cWnd := _HMG_ThisFormName DoMethod(cWnd, cWnd + '_Frame_Text1', "Refresh") SetProperty(cWnd, cWnd + '_Frame_Btn1_Ok', "Enabled", .T.) Return [/pre]

Andrey: Нет, не перерисовывается ! Кнопка закрыта и все ! Вот даже если взять предыдущий пример, кнопка Cancel - не работает ! А почему ? #include "minigui.ch" Function Main() Local i,j,y,x,w,h,t Local cWnd,hWnd,nCliW,nCliH Local cLblN1,nLblW1,nLblH1,nLblY1,nLblX1,aLblC1 Local cLblN2,nLblW2,nLblH2,nLblY2,nLblX2,aLblC2 Local cLblN3,nLblW3,nLblH3,nLblY3,nLblX3,aLblC3 cWnd := "MyWnd" DEFINE WINDOW &cWnd ; AT 40, 50 ; WIDTH 480 ; HEIGHT 410 ; MINWIDTH 480 MINHEIGHT 410 ; TITLE 'Test Label box' ; MAIN ; ON SIZE ReSize() ; ON MAXIMIZE ReSize() hWnd := GetFormHandle(cWnd) nCliW := GetClientWidth (hWnd) nCliH := GetClientHeight(hWnd) cLblN1 := cWnd + '_Frame_Lbl1' nLblW1 := nCliW nLblH1 := int(nCliH * 0.4) nLblY1 := 0 nLblX1 := 0 aLblC1 := {251, 250, 174} cLblN2 := cWnd + '_Frame_Lbl2' nLblW2 := nCliW nLblH2 := int(nCliH * 0.2) nLblY2 := nLblY1 + nLblH1 nLblX2 := nLblX1 aLblC2 := {255, 0, 255} cLblN3 := cWnd + '_Frame_Lbl3' nLblW3 := nCliW nLblH3 := nCliH - (nLblH1 + nLblH2) nLblY3 := nLblY2 + nLblH2 nLblX3 := nLblX1 aLblC3 := {178, 227, 137} @ nLblY1, nLblX1 LABEL &cLblN1 VALUE "" OF &cWnd ; WIDTH nLblW1 HEIGHT nLblH1 ; BACKCOLOR aLblC1 BORDER CLIENTEDGE i := GetControlIndex(cLblN1, cWnd) j := cWnd + '_Frame_Text1' t := "Hello Frame 1" y := _HMG_aControlRow [ i ] + 10 x := _HMG_aControlCol [ i ] + 10 w := 100 h := 24 @ y, x LABEL &( j ) VALUE t WIDTH w HEIGHT h @ nLblY2, nLblX2 LABEL &cLblN2 VALUE "" OF &cWnd ; WIDTH nLblW2 HEIGHT nLblH2 ; BACKCOLOR aLblC2 BORDER CLIENTEDGE i := GetControlIndex(cLblN2, cWnd) j := cWnd + '_Frame_Text2' t := "Hello Frame 2" y := _HMG_aControlRow [ i ] + 10 x := _HMG_aControlCol [ i ] + 10 w := 100 h := 24 @ y, x LABEL &( j ) VALUE t WIDTH w HEIGHT h @ nLblY3, nLblX3 LABEL &cLblN3 VALUE "" OF &cWnd ; WIDTH nLblW3 HEIGHT nLblH3 ; BACKCOLOR aLblC3 BORDER CLIENTEDGE i := GetControlIndex(cLblN3, cWnd) j := cWnd + '_Frame_Text3' t := "Hello Frame 3" y := _HMG_aControlRow [ i ] + 10 x := _HMG_aControlCol [ i ] + 10 w := 100 h := 24 @ y, x LABEL &( j ) VALUE t WIDTH w HEIGHT h @ nCliH - 40 , nCliW - 120 BUTTON Button_3 CAPTION 'Cancel' ; ACTION ThisWindow.Release END WINDOW ACTIVATE WINDOW &cWnd Return Function ReSize() Local cWnd,hWnd,nCliW,nCliH Local cLblN1,nLblW1,nLblH1,nLblY1,nLblX1 Local cLblN2,nLblW2,nLblH2,nLblY2,nLblX2 Local cLblN3,nLblW3,nLblH3,nLblY3,nLblX3 cWnd := _HMG_ThisFormName hWnd := _HMG_aFormHandles [ _HMG_ThisFormIndex ] nCliW := GetClientWidth (hWnd) nCliH := GetClientHeight(hWnd) cLblN1 := cWnd + '_Frame_Lbl1' nLblW1 := nCliW cLblN2 := cWnd + '_Frame_Lbl2' nLblW2 := nCliW cLblN3 := cWnd + '_Frame_Lbl3' nLblW3 := nCliW nLblH3 := nCliH - ( GetProperty(cWnd, cLblN1, "Height") + ; GetProperty(cWnd, cLblN2, "Height") ) SetProperty(cWnd, cLblN1, "Width" , nLblW1) SetProperty(cWnd, cLblN2, "Width" , nLblW2) SetProperty(cWnd, cLblN3, "Width" , nLblW3) SetProperty(cWnd, cLblN3, "Height", nLblH3) // сдвиг кнопки Button_3 SetProperty(cWnd, "Button_3", "Row", nCliH - 40 ) SetProperty(cWnd, "Button_3", "Col" , nCliW - 120 ) Return #pragma BEGINDUMP #include <windows.h> #include "hbapi.h" HB_FUNC( GETCLIENTWIDTH ) { RECT rect; GetClientRect( ( HWND ) hb_parnl(1), &rect ); hb_retni( ( INT ) rect.right - rect.left ); } HB_FUNC( GETCLIENTHEIGHT ) { RECT rect; GetClientRect( ( HWND ) hb_parnl(1), &rect ); hb_retni( ( INT ) rect.bottom - rect.top ); } #pragma ENDDUMP

SergKis: Andrey пишет:не работает Собрал примеры Сборка hb20, msvc, miniGui 2.07 сборка своя. В Label след.изменения:[pre] Function OLABELEVENTS( hWnd, nMsg, wParam, lParam ) *-----------------------------------------------------------------------------* Local i := ascan ( _HMG_aControlHandles, hWnd ) HB_SYMBOL_UNUSED( wParam ) HB_SYMBOL_UNUSED( lParam ) if i > 0 If nMsg == WM_MOUSEMOVE _DoControlEventProcedure ( _HMG_aControlGotFocusProcedure , i ) ElseIf nMsg == WM_MOUSELEAVE _DoControlEventProcedure ( _HMG_aControlLostFocusProcedure , i ) ElseIf nMsg == WM_HMG_NOTIFY_LBL // BAA IF ValType( _HMG_aControlMiscData1 [4] )=='B' _DoControlEventProcedure( _HMG_aControlMiscData1[4], i ) ELSE MoveWindow( _HMG_aControlHandles, ; // hWnd _HMG_aControlCol, ; // X _HMG_aControlRow, ; // Y _HMG_aControlWidth, ; // W _HMG_aControlHeight, .T. ) // W SetWindowText( _HMG_aControlHandles, ; // hWnd _HMG_aControlCaption ) // Text ENDIF EndIf endif Return 0 [/pre]

SergKis: В догонку. Еще изменен h_label.prg: [pre2] Function _DefineLabel (...) ... _HMG_aControlMiscData1 [k] := ; { 0, ; blink, ; // 2. .T. - нужно моргать .T., ; // 3. .T./.F. - при моргании состояние Вкл./Выкл. NIL } // 4. Блок или NIL - выполнить перепоказ имея в виду что возможно изменились x,y,w,h текст [/pre2] // 4. Блок или NIL - выполнить ... в данных примерах не использовалось.

SergKis: И еще вдогонку: #define WM_APP 0x8000 // Это WinAPI #define WM_HMG_NOTIFY (WM_APP+100) #define WM_HMG_NOTIFY_LBL (WM_HMG_NOTIFY+1) // Перепоказ для Label

SergKis: Andrey пишет:не работает Каюсь. Совсем забыл об изменениях, сделанных в своей сборке, но это было май-июнь прошлого года. Если Григорий почитает это полезным, то: // 4. Блок или NIL - выполнить перепоказ ... - это блок кода, вызываемый при изменении (например текста) в котором можно обновить данные других контролов, связанных с измененным Label. Например при смене кода карточки запустить перепоказ остальных данных по ней.

Andrey: SergKis пишет: Каюсь. Совсем забыл об изменениях, сделанных в своей сборке, но это было май-июнь прошлого года. А я уж думал совсем заработался... У вас работает , а у меня нет... Ну уж я не совсем криворукий... Так что же делать ? SergKis пишет: Если Григорий почитает это полезным Присоединяюсь ! Большая просьба внести это изменение !!!

SergKis: Andrey в сборке примеров, как ведет себя demo.exe (demo.prg) - нормально работает или нет (рамка на первом Label меняется по нижней кнопке Ok) ? Если да, то у Вас тоже сборка должна работать ( нет ReSize() ). Попробуйте.

SergKis: SergKis пишет:это блок кода, вызываемый при изменении ... Я поговорил со своим товарищем - это были мысль неправильная, по знаниям на май прошлого года, нигде не примененная. Короче, эту отсебятину надо игнорировать. А нормальный ON CHANGE не помешал бы.



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