Автор | Сообщение |
Vlad04
|
| постоянный участник
|
Пост N: 420
Зарегистрирован: 13.10.05
|
|
Отправлено: 19.12.13 18:16. Заголовок: TsBrowse в Минигуи (продолжение)
TsBrows определяется в виде строки ПАРМЕТРОВ объекта и их значений К примеру цитата: | DEFINE TBROWSE oBrw2 ; AT 60,450 ; ALIAS cAlias ; OF Form1 ; WIDTH 330 ; HEIGHT 340 ; FONT "Verdana" ; SIZE 9 ; ON DBLCLICK CopyRec(); ON GOTFOCUS fModelo_Hab(2) ; AUTOFILTER ; CELLED EDIT; VALUE nRec; GRID |
| Здесь я собрал параметры из разных tBrows Можно или нет и какие парметры заменить выражением ( и каким) ? oBrw2:.... oBrw2:....
| |
|
Ответов - 300
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[только новые]
|
|
SergKis
|
| постоянный участник
|
Пост N: 3834
Зарегистрирован: 17.02.12
|
|
Отправлено: 23.08.21 17:55. Заголовок: Haz пишет вот на вся..
Haz пишет цитата: | вот на всякий последние исходники теста |
| Игорь, можешь забросить на ftp, что менял в TsBrowse и окончательный пример ? Похоже завтра (может и дальше) еще на опытной экспл. сдаваемого проекта, а выглядывать и выкусывать изменения с темы не хочется, скорее вытащу что то не так. Спасибо.
| |
|
Haz
|
| |
Пост N: 1742
Зарегистрирован: 20.02.11
|
|
Отправлено: 23.08.21 17:59. Заголовок: SergKis пишет: Игор..
SergKis пишет: цитата: | Игорь, можешь забросить на ftp, что менял в TsBrowse и окончательный пример ? |
|
у меня сейчас другой комп , учетка ftp затерялась Выложу сюда ссылку на архив со всеми изменениями и описанием
| |
|
Haz
|
| |
Пост N: 1743
Зарегистрирован: 20.02.11
|
|
Отправлено: 23.08.21 18:58. Заголовок: Haz пишет: Выложу с..
| |
|
SergKis
|
| постоянный участник
|
Пост N: 3837
Зарегистрирован: 17.02.12
|
|
Отправлено: 23.08.21 19:08. Заголовок: Haz Спасибо :sm36:..
Haz Спасибо
| |
|
SergKis
|
| постоянный участник
|
Пост N: 3838
Зарегистрирован: 17.02.12
|
|
Отправлено: 25.08.21 09:34. Заголовок: Haz пишет Сергей все..
Haz пишет цитата: | Сергей все тут, в комплекте Readme.txt |
| Сделал правку, убрал только +1 iFree = rct.bottom - rct.top - iSupH - iHead - iFoot - iSpcH; Примеры работают нормально, затыков не выявил, но в них нет динамических изменений высот, у меня их нигде нет. Проверил, сделав правку, версию unicode то же. Пример "TsBrowse hole test " погонял, но не азартно, т.к. считаю этот режим экстремальным использованием тсб и клиенту не предложу, без особой надобности, скорее крайний случай. А с примером тоже все ok! В свою версию тсб 7.0, изменения вносить не буду, т.к. там добавлены свои сопли по борьбе с затыком отображения
| |
|
gfilatov2002
|
| moderator
|
Пост N: 1915
Зарегистрирован: 11.02.10
|
|
Отправлено: 25.08.21 09:51. Заголовок: SergKis пишет: Прим..
SergKis пишет: цитата: | Примеры работают нормально, затыков не выявил, но в них нет динамических изменений высот, у меня их нигде нет. Проверил, сделав правку, версию unicode то же. |
| Благодарю за помощь У меня получились такие же результаты... Эта правка будет включена в 3-й апдейт сборки 21.07, которая выйдет завтра.
| |
|
Haz
|
| |
Пост N: 1745
Зарегистрирован: 20.02.11
|
|
Отправлено: 25.08.21 09:54. Заголовок: SergKis пишет: Сдел..
SergKis пишет: цитата: | Сделал правку, убрал только +1 iFree = rct.bottom - rct.top - iSupH - iHead - iFoot - iSpcH; |
| не принципиально, тк rct.top всегда == 0 Но если кто- то потом полезет в исходник , то в голове будет каша ( не ясно зачем минусуем ) У себя проекты все пересобрал с iFree = rct.bottom - iSupH - iHead - iFoot - iSpcH; полет нормальный
| |
|
SergKis
|
| постоянный участник
|
Пост N: 3839
Зарегистрирован: 17.02.12
|
|
Отправлено: 25.08.21 10:27. Заголовок: Haz пишет Но если кт..
Haz пишет цитата: | Но если кто- то потом полезет в исходник , то в голове будет каша ( не ясно зачем минусуем ) |
| Оставил rct.top т.к. без нее, когда смотрю, кажется чего то не хватает. Выше GetClientRect и понятно становится. Смотрел др. места с GetClientRect, в целом не складывается впечатление, что человек перепутал применение ф-ии, скорее ошибся с +1, т.к. есть места где играется +-1 в высотах, в тех же scroll. Без +1 точнее расчет в этом месте
| |
|
Haz
|
| |
Пост N: 1746
Зарегистрирован: 20.02.11
|
|
Отправлено: 25.08.21 11:33. Заголовок: SergKis пишет: что ..
SergKis пишет: цитата: | что человек перепутал применение ф-ии, скорее ошибся с +1, |
| Ну мы можем только гадать выискивая тут умысел этой +1 Возможно сначала было GetWindowRect() и тогда +1 оправдана, в бровсе 5 строк , начинается с 10 строки экрана и заканчивается на 14 ( 1=10, 2=11, 3=12,4=13, 5=14 ) , как узнать высоту всего бровса ? правильно, nBottom - nTop + 1 или 14 - 10 + 1 = 5 потом автор наткнулся на Hscroll и изменил на GetClientRect(). Я бы тоже не обратил внимание в таком случае на +1 , тк возвращаемая структура путает названиями nTop и nBottom, хотя в них уже совсем другие сущности. при GetClientRect() высоту считать не надо, она уже есть в nBottom, поэтому nBottom - nTop + 1 нужно заменить на nBottom цитата: | есть места где играется +-1 в высотах |
| но это не то место. Как посчитать сколько строк поместиться в окно бровса целиком ? Надо взять общую высоту и отнять все высоты занятые НЕ строками , результат поделить на высоту строки и выделить целое. все значения достоверно известны, играть тут нечем отдельно про Scroll. В окне бровса он реализуется вызовом ScrollWindowEx() , который меняет стиль окна и создает скролл в клиентской области ( уменьшая ее ) https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-scrollwindowex Скрытый текст
HB_FUNC( TSBRWSCROLL ) { HWND hWnd = ( HWND ) HB_PARNL( 1 ); int iRows = hb_parni( 2 ); HFONT hFont = ( HFONT ) HB_PARNL( 3 ); int nHeightCell = hb_parni( 4 ); int nHeightHead = hb_parni( 5 ); int nHeightFoot = hb_parni( 6 ); int nHeightSuper = hb_parni( 7 ); int nHeightSpecHd = hb_parni( 8 ); HFONT hOldFont = NULL; HDC hDC = GetDC( hWnd ); RECT rct; if( hFont ) hOldFont = ( HFONT ) SelectObject( hDC, hFont ); GetClientRect( hWnd, &rct ); rct.top += ( nHeightHead + nHeightSuper - ( nHeightSuper ? 1 : 0 ) + nHeightSpecHd - ( nHeightSpecHd ? 1 : 0 ) ); // exclude heading from scrolling rct.bottom -= nHeightFoot; // exclude footing from scrolling rct.bottom -= ( ( rct.bottom - rct.top ) % nHeightCell ); // exclude unused portion at bottom if( iRows > 0 ) rct.bottom -= nHeightCell; else rct.top += nHeightCell; ScrollWindowEx( hWnd, 0, ( int ) -( nHeightCell * iRows ), 0, &rct, 0, 0, 0 ); if( hFont ) SelectObject( hDC, hOldFont ); ReleaseDC( hWnd, hDC ); }
| и кстати автор тут +1 не использует хотя видно что тексты копипастились скорее всего именно миграция c GetWindowRect() на GetClientRect() и была т.к. rct.top остался рудиментом
| |
|
SergKis
|
| постоянный участник
|
Пост N: 3840
Зарегистрирован: 17.02.12
|
|
Отправлено: 25.08.21 13:31. Заголовок: Haz пишет Ну мы може..
Haz пишет цитата: | Ну мы можем только гадать выискивая тут умысел этой +1 |
| Согласен. цитата: | кстати автор тут +1 не использует хотя видно что тексты копипастились |
| но правка на -1 есть, хотя линии прорисовываются внутри, как выясняли rct.top += ( nHeightHead + nHeightSuper - ( nHeightSuper ? 1 : 0 ) + nHeightSpecHd - ( nHeightSpecHd ? 1 : 0 ) ); // exclude heading from scrolling для вычисления rct.bottom -= ( ( rct.bottom - rct.top ) % nHeightCell ); // exclude unused portion at bottom В COUNTROWS сейчас все по делу PS. Использовать в расчете rct.top скорее привычка, т.е. y := 0 ; h := This.ClientHeight - y * 2 // т.е. y := This.ClientRow ; x := This.ClientCol h -= GetWindowHeight(hSplit) ...
| |
|
Andrey
|
| постоянный участник
|
Пост N: 7030
Зарегистрирован: 12.09.06
|
|
Отправлено: 25.08.21 13:38. Заголовок: Haz пишет: отдельно..
Haz пишет: цитата: | отдельно про Scroll. В окне бровса он реализуется вызовом ScrollWindowEx() |
| А можно как то цвет этого поменять на свой ? А то серый не очень красиво смотрится....
| |
|
|
Haz
|
| |
Пост N: 1747
Зарегистрирован: 20.02.11
|
|
Отправлено: 25.08.21 17:59. Заголовок: Andrey пишет: А мож..
Andrey пишет: цитата: | А можно как то цвет этого поменять на свой ? |
| Скорее всего можно CLASS TSBScrlBar FROM TControl DATA lVertical, lReDraw, lIsChild, nMin, nMax, nPgStep DATA bGoUp, bGoDown, bGoTop, bGoBottom, bPageUp, bPageDown, bPos DATA bTrack DATA l32Bit DATA lShowDisabled, hWnd, oWnd DATA lUpdate AS LOGICAL // TControl DATA bWhen // TWindow DATA bValid // TWindow CLASSDATA aProperties INIT { "cVarName", "nMin", "nMax",; "nPgStep", "nTop", "nLeft", "Cargo" } METHOD New( nRow, nCol, nMin, nMax, nPgStep, lVertical, oWnd, nWidth, nHeight,; bUpAct, bDownAct, bPgUp, bPgDown, bPos, lPixel, nClrText,; nClrBack, cMsg, lUpdate, bWhen, bValid, lDesign ) CONSTRUCTOR METHOD WinNew( nMin, nMax, nPgStep, lVertical, oWnd, bUpAction,; bDownAction, bPgUp, bPgDown, bPos, nClrText, nClrBack,; lUpdate, bWhen, bValid ) CONSTRUCTOR и далее nClrText := GetSysColor( COLOR_WINDOW ),; nClrBack := GetSysColor( COLOR_SCROLLBAR ),; но эти переменные нигде не используются ....
| |
|
Haz
|
| |
Пост N: 1748
Зарегистрирован: 20.02.11
|
|
Отправлено: 25.08.21 20:19. Заголовок: SergKis пишет: но п..
SergKis пишет: Ты про это rct.top += ( nHeightHead + nHeightSuper - ( nHeightSuper ? 1 : 0 ) ... мож кто то объяснит тут синтаксис .... мне кажется это тоже самое hb_default(@nHeightSuper , 0) но будем считать разобрались, понаблюдаем за результатами, может кто сюда отпишет
| |
|
SergKis
|
| постоянный участник
|
Пост N: 3841
Зарегистрирован: 17.02.12
|
|
Отправлено: 25.08.21 21:12. Заголовок: Haz пишет мож кто то..
Haz пишет цитата: | мож кто то объяснит тут синтаксис .... |
| Это если есть nHeightSuper, т.е > 0, то будет -1, иначе 0, так же и с наличием SupHd, Для чего это, не понимаю. Т.к. Если для красоты (WScroll красиво вписывался в клиентскую область), то -1 сверху и с низу можно делать не зависимо от наличия SuperHd и SuperHeader, а та к как написано .. , я не понимаю почему
| |
|
Haz
|
| |
Пост N: 1749
Зарегистрирован: 20.02.11
|
|
Отправлено: 25.08.21 22:21. Заголовок: SergKis пишет: я не..
SergKis пишет: В такой постановке тоже не понимаю
| |
|
Haz
|
| |
Пост N: 1753
Зарегистрирован: 20.02.11
|
|
Отправлено: 08.09.21 16:47. Заголовок: ::CellInfo() непонятка
Сергей Возник вопрос о координатe oCell:nRow из ::GetCellInfo() никак не пойму что не так в примере , почему не совпадает с ячейкой. Может не правильно метод использую ? Пример простой в бровсе по bPrevEdit стоит показ окна в координатах ячейки и потом отказ в редактировании. Окно открывается ниже чем нужно на величину ::nTop вот пример Скрытый текст #include "minigui.ch" #include "tsbrowse.ch" #include "common.ch" #include "hmg.ch" #include "i_winuser.ch" static oMain static hMain Func Main() SET OOP ON DEFINE WINDOW Form_0 ; AT 0,0 ; WIDTH GetDeskTopWidth() ; HEIGHT GetDesktopHeight() - GetTaskBarHeight() ; TITLE "Test ::CellInfo" ; MAIN ; ON INIT {|| nil } ; NOTIFYICON "CRANE" ; NOTIFYTOOLTIP "TestCell" ; oMain :=This.Object hMain := ThisWindow.Handle DEFINE STATUSBAR Font "ARIAL" SIZE 9 BOLD STATUSITEM '' WIDTH 100 ACTION Nil STATUSITEM '' WIDTH 150 ACTION Nil STATUSITEM '' ACTION Nil STATUSITEM '' WIDTH 80 ACTION Nil STATUSITEM '' WIDTH 400 ACTION Nil DATE CLOCK END STATUSBAR DEFINE SPLITBOX HANDLE hSpl DEFINE TOOLBAR ToolBar_1 CAPTION "" BUTTONSIZE 60,32 FLAT BUTTON 01 ; CAPTION 'Справочники' ; PICTURE 'NEWSUPLOAD16' ; BUTTON 02 ; CAPTION 'Портфель' ; PICTURE 'n2' ; WHOLEDROPDOWN SEPARATOR DEFINE DROPDOWN MENU BUTTON 02 ITEM "Моделирование" IMAGE 'factory16' ACTION _wPost(11) NAME 100 END MENU END TOOLBAR DEFINE TOOLBAR ToolBar_2 CAPTION "" BUTTONSIZE 42,32 FLAT BUTTON 99 CAPTION 'Выход' PICTURE 'exit' ACTION {|| oMain:Release()} END TOOLBAR END SPLITBOX This.Height := GetDeskTopHeight() - This.StatusBar.Height - GetBorderHeight() END WINDOW DoMethod("Form_0", "maximize") oBrw := CreateBrowse( oMain ) Form_0.Activate CUSTOMER->(dbClosearea()) Return nil FUNCTION CreateBrowse( oWnd ) LOCAL i LOCAL aDatos := {} FOR i := 1 TO 1000 AAdd( aDatos, { i, RandStr( 30 ), Date() - i, if( i % 2 == 0, TRUE, FALSE ) } ) NEXT if isControlDefined( "oBrw", "Form_0" ) doMethod( "Form_0" , "oBrw", "Release") end DEFINE TBROWSE oBrw AT 50, 2 ; OF Form_0 ; WIDTH oWnd:ClientWidth() - 4 ; HEIGHT oWnd:ClientHeight() - GetProperty( "Form_0", "StatusBar", "Height" ) - 52 ; GRID ; FONT "Arial" SIZE 12 oBrw:SetArray( aDatos, .T. ) oBrw:nWheelLines := 1 oBrw:nClrLine := COLOR_GRID oBrw:lNoChangeOrd := TRUE oBrw:lCellBrw := TRUE oBrw:hBrush := CreateSolidBrush( 242, 245, 204 ) oBrw:lNoVScroll := TRUE oBrw:nHeightCell := 22 oBrw:nHeightHead := 22 oBrw:nLineStyle := 6 // prepare for showing of Double cursor AEval( oBrw:aColumns, {| oCol| oCol:lFixLite := oCol:lEdit := TRUE , oCol:bPrevEdit := {|xVal, oBrw| PrevEdit(xVal, oBrw) }} ) // assignment of column's names oBrw:aColumns[ 1 ]:cName := "NUMBER" oBrw:aColumns[ 2 ]:cName := "TEXT" oBrw:aColumns[ 3 ]:cName := "DATE" oBrw:aColumns[ 4 ]:cName := "LOGIC" // the reference to columns by names oBrw:SetColSize( "NUMBER", 100 ) oBrw:SetColSize( "TEXT", 500 ) oBrw:SetColSize( "DATE", 200 ) // Checking the method nColumn() oBrw:SetColSize( oBrw:nColumn( "LOGIC" ), 300 ) oBrw:GetColumn( 'NUMBER' ):nAlign := DT_CENTER oBrw:GetColumn( 'TEXT' ):nAlign := DT_LEFT oBrw:GetColumn( 'DATE' ):nAlign := DT_CENTER oBrw:GetColumn( 'LOGIC' ):nAlign := DT_CENTER oBrw:SetColor( { 1 }, { RGB( 0, 12, 120 ) } ) oBrw:SetColor( { 2 }, { RGB( 242, 245, 204 ) } ) oBrw:SetColor( { 5 }, { RGB( 0, 0, 0 ) } ) oBrw:SetColor( { 6 }, { {|a, b, c| IF( c:nCell == b, { RGB( 66, 255, 236 ), RGB( 111, 183, 155 ) }, ; { RGB( 255, 255, 255 ), RGB( 200, 200, 200 ) } ) } } ) // cursor backcolor END TBROWSE RETURN oBrw FUNCTION RandStr( nLen ) LOCAL cSet := "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM" LOCAL cPass := "" LOCAL i := 0 FOR i := 1 TO nLen cPass += SubStr( cSet, Random( 52 ), 1 ) NEXT RETURN cPass Func PrevEdit(xVal, oBrw) LOCAL oCell LOCAL oWnd, hWnd LOCAL aRect := {0,0,0,0} GetWindowRect( oBrw:hWnd, aRect ) SET OOP ON oCell := oBrw:GetCellInfo(oBrw:nRowPos) DEFINE WINDOW Cell ; AT oCell:nRow + aRect[2] + 1 , oCell:nCol + aRect[1] +1 ; // aRect добавлено чтоб перейти в физические координаты , иначе при перемещении окна координаты не меняются WIDTH oCell:nWidth - 2 ; HEIGHT oCell:nHeight -2 ; NOCAPTION ; MODAL ; oWnd := ThisWindow.Object hWnd := oWnd:Handle() END WINDOW SetWindowLong(hWnd, GWL_STYLE, WS_BORDER) _DefineHotKey ( "CELL" , 0 , VK_ESCAPE , {|| oWnd:Release() } ) _DefineHotKey ( "CELL" , 0 , VK_RETURN , {|| oWnd:Release() } ) Cell.Activate oBrw:DrawSeLect() return .F.
| это смещение получается из ::GetcellInfo() Скрытый текст ix := GetControlIndex( cBrw, cForm ) IF _HMG_aControlContainerRow[ ix ] == -1 nRow += ::nTop - 1 nCol += ::nLeft ELSE nRow += _HMG_aControlRow[ ix ] - 1 nCol += _HMG_aControlCol[ ix ] ENDIF
|
| |
|
SergKis
|
| постоянный участник
|
Пост N: 3859
Зарегистрирован: 17.02.12
|
|
Отправлено: 08.09.21 18:21. Заголовок: Haz пишет Может не п..
Haz пишет цитата: | Может не правильно метод использую ? |
| Так и есть. Твой пример, немного поправил (как я делаю) Скрытый текст
#include "minigui.ch" #include "tsbrowse.ch" #include "common.ch" #include "hmg.ch" #include "i_winuser.ch" static oMain static hMain FUNCTION Main() LOCAL nBtnW, nBtnH, nEndW, oBrw SET DATE GERMAN SET OOP ON SET FONT TO "Arial", 12 // кнопки toolbar от размера фонта nBtnW := App.Object:W(1.5) nBtnH := App.Object:H1 + 16 + 2 // 16 - это размер по высоте bmp nEndW := App.Object:W(0.7) DEFINE WINDOW Form_0 AT 0,0 WIDTH Sys.ClientWidth HEIGHT Sys.ClientHeight ; TITLE "Test ::CellInfo" ; MAIN ; ON INIT NIL ; ON RELEASE dbCloseAll() ; NOTIFYICON "CRANE" ; NOTIFYTOOLTIP "TestCell" ; oMain := This.Object hMain := ThisWindow.Handle //DEFINE STATUSBAR /*Font "ARIAL" SIZE 9*/ BOLD DEFINE STATUSBAR FONT App.FontName SIZE iif( App.FontSize > 11, 11, App.FontSize ) BOLD STATUSITEM '' WIDTH 100 ACTION Nil STATUSITEM '' WIDTH 150 ACTION Nil STATUSITEM '' ACTION Nil STATUSITEM '' WIDTH 80 ACTION Nil STATUSITEM '' WIDTH 400 ACTION Nil DATE CLOCK END STATUSBAR DEFINE SPLITBOX HANDLE hSpl DEFINE TOOLBAR ToolBar_1 CAPTION "" BUTTONSIZE nBtnW, nBtnH FLAT BUTTON 01 CAPTION 'Справочники' PICTURE 'NEWSUPLOAD16' SEPARATOR BUTTON 02 CAPTION 'Портфель' PICTURE 'n2' WHOLEDROPDOWN SEPARATOR DEFINE DROPDOWN MENU BUTTON 02 ITEM "Моделирование" IMAGE 'factory16' ACTION _wPost(11) NAME 100 END MENU END TOOLBAR DEFINE TOOLBAR ToolBar_2 CAPTION "" BUTTONSIZE nEndW, nBtnH FLAT BUTTON 99 CAPTION 'Выход' PICTURE 'exit' ACTION {|| oMain:Release()} END TOOLBAR END SPLITBOX END WINDOW DoMethod(oMain:Name, "maximize") oBrw := CreateBrowse( oMain, GetWindowHeight(hSpl) + 2, 2 ) ACTIVATE WINDOW &(oMain:Name) //Form_0.Activate Return nil FUNCTION CreateBrowse( oWnd, nY, nX ) LOCAL i, oBrw LOCAL aDatos := {} FOR i := 1 TO 1000 AAdd( aDatos, { i, RandStr( 30 ), Date() - i, if( i % 2 == 0, TRUE, FALSE ) } ) NEXT if isControlDefined( "oBrw", oWnd:Name ) doMethod( oWnd:Name , "oBrw", "Release") end DEFINE TBROWSE oBrw AT nY, nX OF &(oWnd:Name) ; WIDTH oWnd:ClientWidth() - nX * 2 ; HEIGHT oWnd:ClientHeight() - oWnd:StatusBar:Height - nY ; GRID //FONT "Arial" SIZE 12 :SetArray( aDatos, .T. ) :nWheelLines := 1 :nClrLine := COLOR_GRID :lNoChangeOrd := TRUE :lCellBrw := TRUE :hBrush := CreateSolidBrush( 242, 245, 204 ) :lNoVScroll := TRUE :nHeightCell := 22 :nHeightHead := 22 :nLineStyle := 6 // prepare for showing of Double cursor AEval( :aColumns, {| oCol| oCol:lFixLite := oCol:lEdit := TRUE , oCol:bPrevEdit := {|xVal, oBrw| PrevEdit(xVal, oBrw) }} ) // assignment of column's names :aColumns[ 1 ]:cName := "NUMBER" :aColumns[ 2 ]:cName := "TEXT" :aColumns[ 3 ]:cName := "DATE" :aColumns[ 4 ]:cName := "LOGIC" // the reference to columns by names :SetColSize( "NUMBER", 100 ) :SetColSize( "TEXT", 500 ) :SetColSize( "DATE", 200 ) // Checking the method nColumn() :SetColSize( oBrw:nColumn( "LOGIC" ), 300 ) :GetColumn( 'NUMBER' ):nAlign := DT_CENTER :GetColumn( 'TEXT' ):nAlign := DT_LEFT :GetColumn( 'DATE' ):nAlign := DT_CENTER :GetColumn( 'LOGIC' ):nAlign := DT_CENTER :SetColor( { 1 }, { RGB( 0, 12, 120 ) } ) :SetColor( { 2 }, { RGB( 242, 245, 204 ) } ) :SetColor( { 5 }, { RGB( 0, 0, 0 ) } ) :SetColor( { 6 }, { {|a, b, c| IF( c:nCell == b, { RGB( 66, 255, 236 ), RGB( 111, 183, 155 ) }, ; { RGB( 255, 255, 255 ), RGB( 200, 200, 200 ) } ) } } ) // cursor backcolor END TBROWSE RETURN oBrw FUNCTION RandStr( nLen ) LOCAL cSet := "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM" LOCAL cPass := "" LOCAL i := 0 FOR i := 1 TO nLen cPass += SubStr( cSet, Random( 52 ), 1 ) NEXT RETURN cPass FUNCTION PrevEdit(xVal, oBrw) LOCAL oCell := oBrw:GetCellInfo(oBrw:nRowPos) LOCAL nY := oCell:nRow + oBrw:nHeightHead + 4 LOCAL nX := oCell:nCol LOCAL nW := oCell:nWidth LOCAL nH := oCell:nHeight LOCAL oWnd, hWnd DEFINE WINDOW Cell AT nY,nX WIDTH nW - 2 HEIGHT nH - 2 MODAL NOCAPTION ; ON LOSTFOCUS oWnd:Release() oWnd := ThisWindow.Object hWnd := oWnd:Handle END WINDOW SetWindowLong(hWnd, GWL_STYLE, WS_BORDER) _DefineHotKey ( "CELL" , 0 , VK_ESCAPE , {|| oWnd:Release() } ) _DefineHotKey ( "CELL" , 0 , VK_RETURN , {|| oWnd:Release() } ) Cell.Activate oBrw:DrawSeLect() return .F.
| Поправки координаты nY тоже делаю
| |
|
SergKis
|
| постоянный участник
|
Пост N: 3860
Зарегистрирован: 17.02.12
|
|
Отправлено: 08.09.21 19:02. Заголовок: PS Добавляю в modal ..
PS Добавляю в modal окно Cell еще такое (выделил цветом) PS2 не забываем делать FUNCTION PrevEdit(xVal, oBrw) ... LOCAL oWnd, hWnd LOCAL hOld := _HMG_InplaceParentHandle LOCAL oParent := _WindowObj(oBrw:cParentWnd) _HMG_InplaceParentHandle := oParent:Handle DEFINE WINDOW Cell AT nY,nX WIDTH nW - 2 HEIGHT nH - 2 MODAL NOCAPTION ; ... oBrw:DrawSeLect() ; DO EVENTS _HMG_InplaceParentHandle := hOld ... PS3 Создание контролов и тсб делаю до END WINDOW, т.е. END SPLITBOX This.Maximize oBrw := CreateBrowse( This.Object, GetWindowHeight(hSpl) + 2, 2 ) END WINDOW //DoMethod(oMain:Name, "maximize") //oBrw := CreateBrowse( oMain, GetWindowHeight(hSpl) + 2, 2 ) ACTIVATE WINDOW &(oMain:Name) Тогда не надо писать для контролов окна OF &(oWnd:Name), т.е. имеем куски кода с привязкой к тек. окну. Их можно комбинировать на разных окнах PS4 Не стал править в исходнике, думаю и так знаешь. Просто вариант DEFINE SPLITBOX HANDLE hSpl DEFINE TOOLBAR ToolBar_1 CAPTION "" BUTTONSIZE nBtnW, nBtnH FLAT BUTTON 01 CAPTION 'Справочники' PICTURE 'NEWSUPLOAD16' ACTION _wPost(01) SEPARATOR BUTTON 02 CAPTION 'Портфель' PICTURE 'n2' WHOLEDROPDOWN SEPARATOR DEFINE DROPDOWN MENU BUTTON 02 ITEM "Моделирование 1" IMAGE 'factory16' ACTION _wPost(02,, This.Name) NAME 201 ITEM "Моделирование 2" IMAGE 'factory16' ACTION _wPost(02,, This.Name) NAME 202 ITEM "Моделирование 3" IMAGE 'factory16' ACTION _wPost(02,, This.Name) NAME 203 END MENU END TOOLBAR DEFINE TOOLBAR ToolBar_2 CAPTION "" BUTTONSIZE nEndW, nBtnH FLAT BUTTON 99 CAPTION 'Выход' PICTURE 'exit' ACTION _wPost(99) END TOOLBAR END SPLITBOX This.Maximize oBrw := CreateBrowse( This.Object, GetWindowHeight(hSpl) + 2, 2 ) WITH OBJECT This.Object :Event(01, {| | Nil }) :Event(02, {|ow,ky,cItm| Local cBtn := StrZero(ky, 2), nItm, oBrw This.&(cBtn).Enabled := .F. oBrw := This.oBrw.Object nItm := Val(cItm) - ky * 100 IF nItm == 1 // ... ELSEIF nItm == 2 // ... ELSEIF nItm == 3 // ... ENDIF SetProperty(ow:Name, cBtn, "Enabled", .T.) Return Nil }) :Event(99, {|ow| ow:Release() }) END WITH END WINDOW PS5 убрал в CreateBrowse() лишнее oBrw между DEFINE TBROWSE и END TBROWSE, т.е. oBrw:SetArray( aDatos, .T. ) oBrw:nWheelLines := 1 ... на :SetArray( aDatos, .T. ) :nWheelLines := 1 ...
| |
|
Haz
|
| |
Пост N: 1754
Зарегистрирован: 20.02.11
|
|
Отправлено: 08.09.21 23:07. Заголовок: SergKis пишет: Твой..
SergKis пишет: цитата: | Твой пример, немного поправи |
|
спасибо, посмотрю завтра. Сегодня целый день был посвящён совещаниям ни о чем. Только приехал, голова пустая совершенно
| |
|
Andrey
|
| постоянный участник
|
Пост N: 7039
Зарегистрирован: 12.09.06
|
|
Отправлено: 09.09.21 04:58. Заголовок: Haz пишет: А можно ..
Haz пишет: цитата: | А можно как то цвет Scroll поменять на свой ? Скорее всего можно и далее nClrText := GetSysColor( COLOR_WINDOW ),; nClrBack := GetSysColor( COLOR_SCROLLBAR ),; но эти переменные нигде не используются .... |
| А как его поменять можно ? Т.е. допустим в последнем примере который дал Сергей - Пост N: 3859 можешь показать ? А то я не знаю как это сделать, давно очень хотел поменять.
| |
|
Ответов - 300
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[только новые]
|
|
|