Форум » 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 пишет:Как дальше определить MAXHEIGHT и MAXWIDTH Как я понимаю - это размеры, меньше которых, окно не может быть. Т.е. из default размеров контролов считаете эти значения, а пользователь может менять размеры окна и могут меняться размеры контролов со всеми последствиями. Функции: GetClientWidth (hWnd), GetClientHeight(hWnd) дают внутренние (клиентская область) размеры окна, контрола - в зависимости от переданного handle. Функции: GetWindowWidth (hWnd), GetWindowHeight(hWnd) дают внешние размеры окна, контрола - в зависимости от переданного handle и при их использовании для попадания в клиентскую область надо производить вычисления, используя GetBorderWidth(), GetBorderHeight(), GetTitleHeight(), ... Используя GetWindowWidth (hWnd) для окна, получим Width клиентской области, для Label получим Width клиентской области контрола, ... и можно строить относительные координаты, для используемых контролов, в определенной плоскости и при необходимости изменения дизайна окна - достаточно переставлять плоскости, а не контролы.

SergKis: gfilatov2002 пишет:Так что ждем от него описание выполненных модификаций ... Вот они: [pre2] HB_FUNC( INITLABEL ) { HWND hwnd; HWND hbutton; int Style = WS_CHILD; // | SS_NOTIFY убрали ... if( hb_parl(10) ) Style = Style | SS_NOTIFY; // добавили LabelOldWndProc = ( WNDPROC ) SetWindowLong( ( HWND ) hbutton, GWL_WNDPROC, ( LONG ) LabelSubClassFunc ); ... } [/pre2]

gfilatov2002: SergKis пишет: int Style = WS_CHILD; // | SS_NOTIFY убрали Благодарю за подсказку! Поправил для новой сборки, которая выйдет завтра


Andrey: gfilatov2002 пишет: Поправил для новой сборки, которая выйдет завтра Ура ! Наконец то... А то уже вторую неделю бьюсь с этим... Вот экран задачи сразу после запуска: А вот экран после сброса на панель задач:

SergKis: gfilatov2002 пишет:Поправил для новой сборки, которая выйдет завтра Григорий, есть еще такое в GetBox: [pre2] Function OGETEVENTS(...) ... CASE nMsg == WM_COMMAND // Вариант нажата одна из кнопок в oGet ... n := AScan ( aHandle, HwndBtn ) IF n==GBB1 ; _DoControlEventProcedure ( _HMG_aControlProcedures, i) ELSEIF n==GBB2 ; _DoControlEventProcedure ( _HMG_aControlDblClick, i) ENDIF SendMessage ( HwndBtn , BM_SETSTYLE , LOWORD ( BS_PUSHBUTTON ) , 1 ) SetFocus( aHandle[1] ) ... У нас это место так: n := AScan ( aHandle, HwndBtn ) SetFocus( aHandle[1] ) // фокус на GetBox (иначе в процедурах GetFocus() на нажатую кнопку) oGet:lSaveFocusEdit := .T. // new переменная для определения, что делать с фокусом после процедуры IF n==GBB1 ; _DoControlEventProcedure ( _HMG_aControlProcedures, i) ELSEIF n==GBB2 ; _DoControlEventProcedure ( _HMG_aControlDblClick, i) ENDIF SendMessage ( HwndBtn , BM_SETSTYLE , LOWORD ( BS_PUSHBUTTON ) , 1 ) IF oGet:lSaveFocusEdit ; SetFocus( aHandle[1] ) // если в процедуре окно ChildMdi, то SetFocus( aHandle[1] ) делать не надо, т.е. ENDIF // в процедуре ChildMdi делаем: oGet:lSaveFocusEdit := .F. [/pre2]

gustow: SergKis, хммм... опять употребилось где-то "[ i ]", написанное БЕЗ пробелов (похоже, в конце IF после первого CASE). Извиняйте за "граммарнацизм" ;) просто иногда трудновато понять, "что сказать-то этим хотел?.." :)

SergKis: gustow пишет:иногда трудновато понять Согласен, недосмотрел, брал с исходника как есть, а там "[ i ]", написанное БЕЗ пробелов и это строчки:[pre2] IF n==GBB1 ; _DoControlEventProcedure ( _HMG_aControlProcedures [ i ], i) ELSEIF n==GBB2 ; _DoControlEventProcedure ( _HMG_aControlDblClick [ i ], i) ENDIF [/pre2] но дело не в них (текст в версиях 2.1.8, 2.1.9 несколько другой, смысл такой же) см. h_getbox.prg. Сказать этим хотел: 1.если в GetBox назначены Action [ и Action2], а так же кл. (например) F5 как Action, то происходит: - нажатие кнопок Action [ или Action2] в процедуре получим ( i := ascan(_HMG_aContolHandles, getfocus()) ) == 0, т.к. действительно фокус находится на нажатой кнопке (дополнение к GetBox), но работаем мы с GetBox - логичнее иметь и фокус на нем, криминала нет по _HMG_ThisFormName, _HMG_ThisControlName получим индекс ... - нажатие кнопки F5 (фокус на том же GetBox) - получим _HMG_ThisFormName, _HMG_ThisControlName и т.д. на HOTKEY, достаем контрол, с которым работаем ( i := ascan(_HMG_aContolHandles, getfocus()) ) > 0 т.е. из-за мелочи имеем два алгоритма обработки. 2.установка фокуса на GetBox после процедур, должна быть управляемая, а не безусловная: [pre2] oGet:lSaveFocusEdit := .T. // new переменная для определения, что делать с фокусом после процедуры ...... IF oGet:lSaveFocusEdit ; SetFocus( aHandle[1] ) // если в процедуре окно ChildMdi, то SetFocus( aHandle[1] ) делать не надо, т.е. ENDIF // в процедуре ChildMdi делаем: oGet:lSaveFocusEdit := .F. [/pre2] т.е. если в процедуре окно MDICHILD (вызов и работа со справочником на документах), после активации Child окна (фокус устанавливаем на какой-то контрол этого окна) процедура заканчивается (activate window в Mdi MAIN) и срабатывает SetFocus( aHandle[1] ), устанавливая фокус на GetBox, убирая с окна MDICHILD, т.е. получаем проблему. Мы ее решили так, как я изложил. Будет ли решаться в базовой MiniGUI - дело Григория.

SergKis: Andrey пишет:Да я хотел на кнопку повесить включение/отключение бордюра ..... BORDER CLIENTEDGE как в примере MiniGUI\SAMPLES\BASIC\BLINK Только по доку потом увидел что нет такого свойства у LABEL .... А жалко... Свойства есть, надо использовать: - менять стиль SetWindowStyle(h, WS_BORDER, .T./.F.) - .T. устанавливать, .F. снимать - менять Ext стиль ChangeStyle(h, WS_EX_CLIENTEDGE, 0, .T.) - устанавливать или ChangeStyle(h, 0, WS_EX_CLIENTEDGE, .T.) - снимать У меня получалось менять или Ext стиль или стиль ( одновременно менять - срабатывал только стиль ). Примеры:[pre2]Пример 1: ... @ y, x BUTTON ... ACTION ( MyBorder(cWnd, cLbl) ) ... Function MyBorder( cWnd, cLbl ) Local lB,h := GetControlHandle(cLbl, cWnd) lB := ! IsWindowStyle(h, WS_BORDER) SetWindowStyle(h, WS_BORDER, lB) DoMethod(cWnd, cLbl, "Refresh") Return Пример 2: STATIC lEdge := .T. ... @ y, x BUTTON ... ACTION ( MyEdge(cWnd, cLbl) ) ... Function MyEdge( cWnd, cLbl ) Local lB,h := GetControlHandle(cLbl, cWnd) lEdge := ! lEdge If lEdge ChangeStyle(h, WS_EX_CLIENTEDGE, 0, .T.) Else ChangeStyle(h, 0, WS_EX_CLIENTEDGE, .T.) EndIf DoMethod(cWnd, cLbl, "Refresh") Return [/pre2]

Andrey: SergKis пишет: Свойства есть, надо использовать: Супер ! Спасибо БОЛЬШОЕ !

Andrey: SergKis опять у меня проблема с инициализацией до создания окна... Я сделал пример (еще не отладил), подправьте его пожалуйста. #include "minigui.ch" #define PROGRAM '3-color form and resize the window' #define VERSION ' version 1.0' STATIC lEdge := .T. Function Main() Local aColors1 := {178, 227, 137}, aColors2 := {255, 0, 255}, aColors3 := {251, 250, 174} LOCAL aLabel1, aLabel2, aLabel3, nH1 Local cWnd,hWnd,nCliW,nCliH cWnd := "MyWnd" DEFINE WINDOW &cWnd ; AT 40, 50 ; WIDTH 480 ; HEIGHT 410 ; MINWIDTH 480 MINHEIGHT 410 ; TITLE PROGRAM ; MAIN ; ON SIZE ReSize() ; ON MAXIMIZE ReSize() ; ON INIT ReSize() hWnd := GetFormHandle(cWnd) nCliW := GetClientWidth (hWnd) nCliH := GetClientHeight(hWnd) nH1 := nCliH/3 aLabel1 := { 0,0,nCliW,nH1 , "LabelColor_1", cWnd+"_Frame_Text1" } aLabel2 := { nH1,0,nCliW,nH1*2 , "LabelColor_2", cWnd+"_Frame_Text2" } aLabel3 := { nH1*2,0,nCliW,nCliH, "LabelColor_3", cWnd+"_Frame_Text3" } MySayColorLabel(aLabel1,aColors1) MySayColorLabel(aLabel2,aColors2) MySayColorLabel(aLabel3,aColors3) @ 40 , nCliW - 120 BUTTON Button_1 CAPTION 'Message_1' ; ACTION MsgInfo("ACTION - Message Button_1 !") @ 180 , nCliW - 120 BUTTON Button_2 CAPTION 'Message_2' ; ACTION MsgInfo("ACTION - Message Button_2 !") @ nCliH - 40 , nCliW - 120 BUTTON Button_3 CAPTION 'Cancel' ; ACTION ThisWindow.Release // ьхэ Є№ ёЄшы№/change style @ 20, 70 BUTTON Button_Style CAPTION 'Label Style' ; ACTION {|| MyBorder(cWnd, aLabel1[5]), MyBorder(cWnd, aLabel2[5]), MyBorder(cWnd, aLabel3[5]) } @ 40, 70 BUTTON Button_Edge CAPTION 'Label Edge' ; ACTION {|| MyEdge(cWnd, aLabel1[5]), MyEdge(cWnd, aLabel2[5]), MyEdge(cWnd, aLabel3[5]) } END WINDOW ACTIVATE WINDOW &cWnd Return Function MySayColorLabel(cWnd,aLabel,aColor) LOCAL cLabelName := aLabel[5] LOCAL cLabelTitle := aLabel[6] LOCAL i,j,y,x,w,h,t @ aLabel[1], aLabel[2] LABEL &cLabelName VALUE "" OF &cWnd ; WIDTH aLabel[3] HEIGHT aLabel[4] ; BACKCOLOR aColor BORDER CLIENTEDGE i := GetControlIndex(cLabelName, cWnd) j := cWnd + cLabelTitle t := "Hello - " + cLabelName + " { "+STR(aColor[1],3)+"," t := t + STR(aColor[2],3)+","+STR(aColor[3],3)+" }" y := _HMG_aControlRow [ i ] + 10 x := _HMG_aControlCol [ i ] + 10 w := 100 h := 24 @ y, x LABEL &( cLabelTitle ) VALUE t WIDTH w HEIGHT h BACKCOLOR aColor RETURN NIL Function ReSize() Local cWnd,hWnd,nCliW,nCliH LOCAL aLabel1, aLabel2, aLabel3, nH1 cWnd := _HMG_ThisFormName hWnd := _HMG_aFormHandles [ _HMG_ThisFormIndex ] nCliW := GetClientWidth (hWnd) nCliH := GetClientHeight(hWnd) nH1 := nCliH/3 aLabel1 := { 0,0,nCliW,nH1 , "LabelColor_1", cWnd+"_Frame_Text1" } aLabel2 := { nH1,0,nCliW,nH1*2 , "LabelColor_2", cWnd+"_Frame_Text2" } aLabel3 := { nH1*2,0,nCliW,nCliH, "LabelColor_3", cWnd+"_Frame_Text3" } // change the position of the Label-Color SetProperty(cWnd, aLabel1[5], "Width" , aLabel1[3]) SetProperty(cWnd, aLabel1[5], "Height", aLabel1[4]) SetProperty(cWnd, aLabel2[5], "Width" , aLabel2[3]) SetProperty(cWnd, aLabel2[5], "Height", aLabel2[4]) SetProperty(cWnd, aLabel3[5], "Width" , aLabel3[3]) SetProperty(cWnd, aLabel3[5], "Height", aLabel3[4]) // change the position of the buttons SetProperty(cWnd, "Button_1", "Row" , 40 ) SetProperty(cWnd, "Button_1", "Col" , nCliW - 120 ) SetProperty(cWnd, "Button_2", "Row" , 180 ) SetProperty(cWnd, "Button_2", "Col" , nCliW - 120 ) SetProperty(cWnd, "Button_3", "Row" , nCliH - 40 ) SetProperty(cWnd, "Button_3", "Col" , nCliW - 120 ) SETFOCUS Button_3 OF &cWnd Return Function MyBorder( cWnd, cLbl ) Local lB,h := GetControlHandle(cLbl, cWnd) lB := ! IsWindowStyle(h, WS_BORDER) SetWindowStyle(h, WS_BORDER, lB) DoMethod(cWnd, cLbl, "Refresh") Return Nil Function MyEdge( cWnd, cLbl ) Local lB,h := GetControlHandle(cLbl, cWnd) lEdge := ! lEdge If lEdge ChangeStyle(h, WS_EX_CLIENTEDGE, 0, .T.) Else ChangeStyle(h, 0, WS_EX_CLIENTEDGE, .T.) EndIf DoMethod(cWnd, cLbl, "Refresh") Return Nil #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 И хотелось бы избавиться от двойного дублирования массивов: nH1 := nCliH/3 aLabel1 := { 0,0,nCliW,nH1 , "LabelColor_1", cWnd+"_Frame_Text1" } aLabel2 := { nH1,0,nCliW,nH1*2 , "LabelColor_2", cWnd+"_Frame_Text2" } aLabel3 := { nH1*2,0,nCliW,nCliH, "LabelColor_3", cWnd+"_Frame_Text3" } в функциях Main() и ReSize(), если это возможно....

SergKis: Andrey пишет:опять у меня проблема с инициализацией до создания окна... Ошибочное утверждение. Всего навсего : MySayColorLabel(aLabel1,aColors1) вызов, а Function MySayColorLabel(cWnd,aLabel,aColor) - параметров 3 однако. И хотелось бы избавиться от двойного дублирования массивов: Делаем как и раньше в Clipper STATIC переменные. [pre2] #include "minigui.ch" #include "i_winuser.ch" #define PROGRAM '3-color form and resize the window' #define VERSION ' version 1.0' #define _Y 1 #define _X 2 #define _W 3 #define _H 4 #define _N 5 #define _T 6 STATIC lEdge := .T. STATIC aLbl STATIC aClr Function Main() Local hWnd,nCliW,nCliH,nH1, cWnd := "MyWnd" DEFINE WINDOW &cWnd ; AT 40, 50 ; WIDTH 480 ; HEIGHT 410 ; MINWIDTH 480 MINHEIGHT 410 ; TITLE PROGRAM ; MAIN ; ON SIZE ReSize() ; ON MAXIMIZE ReSize() ; ON INIT ReSize() Test_This(cWnd) aLblClrInit() aEval(aLbl, {|a,n| MySayColorLabel( n, n ) }) hWnd := GetFormHandle (cWnd) nCliW := GetClientWidth (hWnd) nCliH := GetClientHeight(hWnd) @ 40 , nCliW - 120 BUTTON Button_1 CAPTION 'Message_1' ; ACTION MsgInfo("ACTION - Message Button_1 !") @ 180 , nCliW - 120 BUTTON Button_2 CAPTION 'Message_2' ; ACTION MsgInfo("ACTION - Message Button_2 !") @ nCliH - 40 , nCliW - 120 BUTTON Button_3 CAPTION 'Cancel' ; ACTION ThisWindow.Release // мен ть стиль/change style @ 20, 70 BUTTON Button_Style CAPTION 'Label Style' ; ACTION ( MyBorder(cWnd, aLbl[1][ _N ]), ; MyBorder(cWnd, aLbl[2][ _N ]), ; MyBorder(cWnd, aLbl[3][ _N ]) ) @ 40, 70 BUTTON Button_Edge CAPTION 'Label Edge' ; ACTION ( MyEdge(cWnd, aLbl[1][ _N ]), ; MyEdge(cWnd, aLbl[2][ _N ]), ; MyEdge(cWnd, aLbl[3][ _N ]) ) END WINDOW ACTIVATE WINDOW &cWnd Return Static Function aLblClrInit() Local cWnd,hWnd,nCliW,nCliH,nH1 cWnd := _HMG_ThisFormName hWnd := GetFormHandle (cWnd) nCliW := GetClientWidth (hWnd) nCliH := GetClientHeight(hWnd) nH1 := nCliH/3 If aLbl == NIL aLbl := {} aAdd( aLbl, { 0 , 0, nCliW, nH1 , "LabelColor_1", cWnd+"_Frame_Text1" } ) aAdd( aLbl, { nH1 , 0, nCliW, nH1*2, "LabelColor_2", cWnd+"_Frame_Text2" } ) aAdd( aLbl, { nH1*2, 0, nCliW, nCliH, "LabelColor_3", cWnd+"_Frame_Text3" } ) Else aLbl[ 1] [ _W ] := nCliW; aLbl[ 1] [ _H ] := nH1 aLbl[ 2] [ _W ] := nCliW; aLbl[ 2] [ _H ] := nH1 * 2 aLbl[ 3] [ _W ] := nCliW; aLbl[ 3] [ _H ] := nCliH Endif If aClr == NIL aClr := {} aAdd( aClr, {178, 227, 137} ) aAdd( aClr, {255, 0, 255} ) aAdd( aClr, {251, 250, 174} ) Endif Return Function Test_This( cWnd ) If empty(_HMG_ThisFormName) _HMG_ThisFormName := cWnd _HMG_ThisFormIndex := GetFormIndex(cWnd) ElseIf _HMG_ThisFormName != cWnd _HMG_ThisFormName := cWnd _HMG_ThisFormIndex := GetFormIndex(cWnd) Endif Return Function MySayColorLabel( nLabel, nColor ) LOCAL cLabelName, cLabelTitle, aColor LOCAL cWnd,i,j,y,x,w,h,t Default nColor To nLabel cWnd := _HMG_ThisFormName aColor := aClr[ nColor ] cLabelName := aLbl[ nLabel ][ _N ] cLabelTitle := aLbl[ nLabel ][ _T ] @ aLbl[ nLabel ][ _Y ], aLbl[ nLabel ][ _X ] LABEL &cLabelName VALUE "" OF &cWnd ; WIDTH aLbl[ nLabel ][ _W ] HEIGHT aLbl[ nLabel ][ _H ] ; BACKCOLOR aColor BORDER CLIENTEDGE i := GetControlIndex(cLabelName, cWnd) j := cWnd + cLabelTitle t := "Hello - " + cLabelName + " { "+STR(aColor[ 1 ], 3)+"," t += STR(aColor[ 2 ], 3) + "," + STR(aColor[ 3 ], 3)+" }" y := _HMG_aControlRow [ i ] + 10 x := _HMG_aControlCol [ i ] + 10 w := 100 h := 24 @ y, x LABEL &cLabelTitle VALUE t WIDTH w HEIGHT h BACKCOLOR aColor RETURN NIL Function ReSize() Local i,j,k Local cWnd,hWnd,nCliW,nCliH ,nH1 cWnd := _HMG_ThisFormName hWnd := GetFormHandle (cWnd) nCliW := GetClientWidth (hWnd) nCliH := GetClientHeight(hWnd) nH1 := nCliH/3 aLblClrInit() // change the position of the Label-Color k := len(aLbl) For i := 1 To k SetProperty(cWnd, aLbl[ i ][ _N ], "Width" , aLbl[ i ][ _W ]) SetProperty(cWnd, aLbl[ i ][ _N ], "Height", aLbl[ i ][ _H ]) Next // change the position of the buttons SetProperty(cWnd, "Button_1", "Row" , 40 ) SetProperty(cWnd, "Button_1", "Col" , nCliW - 120 ) SetProperty(cWnd, "Button_2", "Row" , 180 ) SetProperty(cWnd, "Button_2", "Col" , nCliW - 120 ) SetProperty(cWnd, "Button_3", "Row" , nCliH - 40 ) SetProperty(cWnd, "Button_3", "Col" , nCliW - 120 ) SETFOCUS Button_3 OF &cWnd Return Function MyBorder( cWnd, cLbl ) Local lB,h := GetControlHandle(cLbl, cWnd) lB := ! IsWindowStyle(h, WS_BORDER) SetWindowStyle(h, WS_BORDER, lB) DoMethod(cWnd, cLbl, "Refresh") Return Nil Function MyEdge( cWnd, cLbl ) Local lB,h := GetControlHandle(cLbl, cWnd) lEdge := ! lEdge If lEdge ChangeStyle(h, WS_EX_CLIENTEDGE, 0, .T.) Else ChangeStyle(h, 0, WS_EX_CLIENTEDGE, .T.) EndIf DoMethod(cWnd, cLbl, "Refresh") Return Nil #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 [/pre2]

Andrey: SergKis пишет: Ошибочное утверждение. Всего навсего : MySayColorLabel(aLabel1,aColors1) вызов, а Function MySayColorLabel(cWnd,aLabel,aColor) - параметров 3 однако. Спасибо, БОЛЬШОЕ ! Как обычно, простые , заработался однако... С примером понятно. А почему форма не делится на 3-цвета одинаково ? Я же задаю: nCliW := GetClientWidth (hWnd) nCliH := GetClientHeight(hWnd) nH1 := nCliH/3 If aLbl == NIL ......................... Else aLbl[ 1] [ _W ] := nCliW; aLbl[ 1] [ _H ] := nH1 aLbl[ 2] [ _W ] := nCliW; aLbl[ 2] [ _H ] := nH1 * 2 aLbl[ 3] [ _W ] := nCliW; aLbl[ 3] [ _H ] := nCliH Endif

SergKis: Andrey пишет:А почему форма не делится на 3-цвета одинаково ? Делая: aLbl[ 1] [ _H ] := nH1; aLbl[ 1] [ _H ] := nH1*2; aLbl[ 1] [ _H ] := nCliH мы должны задать высоту конкретного Label, а здесь ... ? В DemoA.prg было: nLblH3 := nCliH - ( GetProperty(cWnd, cLblN1, "Height") + GetProperty(cWnd, cLblN2, "Height") ) . Здесь надо как то так: nH1 := int(nCliH/3) nH2 := nH1 nH3 := nCliH - ( nH1 + nH2 ) и aLbl[ 1] [ _H ] := nH1; aLbl[ 1] [ _H ] := nH2; aLbl[ 1] [ _H ] := nH3

SergKis: SergKis пишет:aLbl[ 1] [ _H ] := nH1; aLbl[ 1] [ _H ] := nH2; aLbl[ 1] [ _H ] := nH3 Скопровал, а исправить забыл. Надо: aLbl[ 1] [ _H ] := nH1; aLbl[ 2] [ _H ] := nH2; aLbl[ 3] [ _H ] := nH3

Andrey: Понял. все получилось. Еще добавил исправление координат по ROW. Только не полностью работают: @ 40, 70 BUTTON Button_Style CAPTION 'Label Style' ; ACTION ( MyBorder(cWnd, aLbl[1][ _N ]), ; MyBorder(cWnd, aLbl[2][ _N ]), ; MyBorder(cWnd, aLbl[3][ _N ]) ) @ 80, 70 BUTTON Button_Edge CAPTION 'Label Edge' ; ACTION ( MyEdge(cWnd, aLbl[1][ _N ]), ; MyEdge(cWnd, aLbl[2][ _N ]), ; MyEdge(cWnd, aLbl[3][ _N ]) ) Скорее всего там тоже надо ставить сразу изменение 3-х объектов ? Правильно ? И еще, подправьте пожалуйста 11 строчку ! Почти готовый пример .... http://files.mail.ru/5F3EA2EABBE647E38CF1718BEA943D3C

SergKis: Andrey пишет:Скорее всего там тоже надо ставить сразу изменение 3-х объектов ? Правильно ? Да. Но все не так просто. Что бы менять resize во всех трех Label одновременно, надо придумать алгоритм расчета размеров (по % например): - Left, Top, Right, Bottom - отступы от краев Label до контролов - nGapsWidth, nGapsHeight - расстояния по горизонтали, вертикали между контролами - nBtnWidth, nBtnHeight - размеры Button - nGetWidth, nGetHeight - размеры GetBox - и т.д. - размеры фонтов учитывать или нет после получения размеров контролов, можно располагать их в своем Label и ... все равно всего не учтешь, 5 GetBox или Button как не располагай, а во весь экран смотреться не будут. Словом, как бы весь пар в свисток не вышел. И еще, подправьте пожалуйста 11 строчку ! Это я не понял - в какой функции ?

Andrey: SergKis пишет: Да. Но все не так просто. Что бы менять resize во всех трех Label одновременно, надо придумать алгоритм расчета размеров (по % например): - Left, Top, Right, Bottom - отступы от краев Label до контролов Давайте пока без отступов ! Просто: nCliH := GetClientHeight(hWnd) nH1 := int(nCliH/3) nH2 := nH1*2 nH3 := nCliH If aLbl == NIL aLbl := {} aAdd( aLbl, { 0, 0, nCliW, nH1, "LabelColor_1", cWnd+"_Frame_Text1" } ) aAdd( aLbl, { nH1, 0, nCliW, nH2, "LabelColor_2", cWnd+"_Frame_Text2" } ) aAdd( aLbl, { nH2, 0, nCliW, nH3, "LabelColor_3", cWnd+"_Frame_Text3" } ) И еще, подправьте пожалуйста 11 строчку ! Это просто 11 строка в файле, с самого начала PRG !!!

SergKis: Andrey пишет:Это просто 11 строка в файле, с самого начала PRG !!! Я совсем туплю - как она хоть выглядит ? В Почти готовый пример это комментарий. В предыдущем скрытом тексте это #define ...

Andrey: SergKis пишет: Я совсем туплю - как она хоть выглядит ? * Copyright ..... SergKis <????????> Ваши данные нужны.

SergKis: Andrey пишет:Ваши данные нужны Смело удаляйте эту строку !



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