Автор | Сообщение |
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: 840
Зарегистрирован: 17.02.12
|
|
Отправлено: 25.01.16 19:41. Заголовок: Andrey пишет: распол..
Andrey пишет: цитата: | расползание подвала таблицы |
| Это эффект фантомной строки (обсуждали в теме о ней), т.е. если строк сделать больше, высоту tsb меньше и увеличивать постепенно, проявляется фант. строка, когда строк становится меньше - остается прорисованный ранее подал, т.е. нет метода очистить часть экрана, после факт. строк :nRowCount() и подвалом. Как лечить ? Не менять высоту tsb, если реальная высота (расчет см. в SetNoHole(oBrw) ) всех строк и заголовков\подвалов меньше\равно new высоте после Resize окна и в расчете new высоты использовать :nRowCount() * :nHeightCell + высоты заголовков\подвалов (что бы те было фантомной строки).
|
|
|
Haz
|
| |
Пост N: 753
Зарегистрирован: 20.02.11
|
|
Отправлено: 25.01.16 20:51. Заголовок: SergKis пишет: Это ..
SergKis пишет: цитата: | Это эффект фантомной строки |
| Сергей, тут другая проблема. Глядя на скрины до фантома еще далеко т.к. строк в таблице мало. Тут лекарство к другому месту прикладывать надо. Andrey пишет: Во первых внимательно посмотреть на код и задать себе вопрос по каждой строке зачем это написано. 1) // По методу Move() запускается ReSize() - описание параметров см. ???, По этому методу никакой Resize() не запускается, в исходниках метод 4 строки , где там Resize()?, кокое описание параметров METHOD Move( nTop, nLeft, nWidth, nHeight, lRepaint ) CLASS TControl MoveWindow( ::hWnd, nTop, nLeft, nWidth, nHeight, lRepaint ) ::CoorsUpdate() return nil 2) это зачем ? есть же простой и понятный метод Refresh(.T.) //oBrw:Display() oBrw:Paint() // Иначе не перерисовываются вертикальные разделители 3) в примере ColorConfig еще какой то вызов CorrectFirstLast() ? Какого художника ... он вообще нужен ? Это была не совсем удачная попытка избавиться от залипания последней строки, как показала практика - не помогает. В теме про дырку , все расписали как надо с этим бороться и Сергей и Дима там все доступно рассказали Резюме Убрать неправильные комменты вместо паинта и дисплая поставить рефреш( Т) и чуть не забыл ... повыкидывать везде этот корректфёстласт
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 841
Зарегистрирован: 17.02.12
|
|
Отправлено: 25.01.16 21:13. Заголовок: Haz Я использовал ..
Haz Я использовал FUNCTION ResizeBrowse() LOCAL cForm := oBrw:cParentWnd LOCAL hWnd := GetFormHandle(cForm) LOCAL nHStBar := GetWindowHeight(GetControlHandle('STATUSBAR', cForm)) // height StatusBar Local actpos:={0,0,0,0} Local i, w, h GetClientRect(hWnd, actpos) w := actpos[3]-actpos[1] h := actpos[4]-actpos[2] - nHStBar - oBrw:nTop IF w !=0 .and. h != 0 SetProperty(oBrw:cParentWnd, oBrw:cControlName, "Enabled", .F.) _SetControlHeight( oBrw:cControlName, oBrw:cParentWnd, h) _SetControlWidth ( oBrw:cControlName, oBrw:cParentWnd, w) oBrw:Paint() SetProperty(oBrw:cParentWnd, oBrw:cControlName, "Enabled", .T.) // oBrw:Display() Endif Return Nil все видно в работе exe, как, я описал
|
|
|
Haz
|
| |
Пост N: 754
Зарегистрирован: 20.02.11
|
|
Отправлено: 25.01.16 21:26. Заголовок: SergKis пишет: oB..
SergKis пишет: цитата: | oBrw:Paint() SetProperty(oBrw:cParentWnd, oBrw:cControlName, "Enabled", .T.) // oBrw:Display() |
| Сергей, в примере у Андрея Tsb_config это код видимо с тебя списан , как и написал Андрей - в этом же примере приводит к залипанию футингов. При замене на банальный рефреш - залип исчезает
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 842
Зарегистрирован: 17.02.12
|
|
Отправлено: 25.01.16 21:37. Заголовок: Haz пишет:банальный ..
Haz пишет: цитата: | банальный рефреш - залип исчезает |
| работает я пробнул display() - не то (а с фантомной решалось через это), а Paint() перерисовал, но криво, на рефреш и не подумал - оказывается зря
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 4670
Зарегистрирован: 12.09.06
|
|
Отправлено: 25.01.16 23:42. Заголовок: Haz пишет: Сергей, ..
Haz пишет: цитата: | Сергей, в примере у Андрея Tsb_config это код видимо с тебя списан |
| Мне этот код Григорий помогал писать. Если окно MAIN - работает без проблем. Я сделал окно WINDOWTYPE STANDARD - появился этот эффект. CorrectionFirstLast() убрал совсем, я Григорию предлагал новую версию этого примера для библиотеки, он не захотел. Из-за этого в старом примере и делал этот эффект, чтобы всем другим было понятней, от чего я исходил. Haz пишет: цитата: | При замене на банальный рефреш - залип исчезает |
| Да действительно исчез. Спасибо БОЛЬШОЕ !
|
|
|
Haz
|
| |
Пост N: 755
Зарегистрирован: 20.02.11
|
|
Отправлено: 26.01.16 10:55. Заголовок: Andrey пишет: Из-за..
Andrey пишет: цитата: | Из-за этого в старом примере и делал этот эффект, чтобы всем другим было понятней, от чего я исходил. |
| Андрей , Вот это главное. Не важно кто кому помогал, но если пример для обучения тех кто вообще впервые минигуи видит , то там не стоит оставлять комментарии которые могут запутать. Пример у тебя получился объемный и сложный, всего не углядишь и косяки могут вылезти внезапно. По мне , так вместо одного глобального примера - лучше 10 маленьких узко тематических И для понимания проще и поиграться проще при изучении. Вот ресайз тока что накидал , ничего лишнего и все понятно #include "minigui.ch" #include "tsbrowse.ch" FUNC Main() Local aArray := { ; {'AAAAAAAAAAAAAAAA', 1, Date() }, ; {'BBBBBBBBBBBBBBBB', 2, Date() }, ; {'CCCCCCCCCCCCCCCC', 3, Date() }, ; {'DDDDDDDDDDDDDDDD', 4, Date() }, ; {'EEEEEEEEEEEEEEEE', 5, Date() }, ; {'FFFFFFFFFFFFFFFF', 6, Date() }, ; {'GGGGGGGGGGGGGGGG', 7, Date() } ; } DEFINE WINDOW Form_1 ; AT 0,0 ; WIDTH 400 ; HEIGHT 300 ; TITLE "TsBrowse ReSize Test" ; MAIN ; FONT 'Tahoma' SIZE 9; ON SIZE { || ResizeBrw( oBrw )} ; ON MINIMIZE { || ResizeBrw( oBrw )} ; ON MAXIMIZE { || ResizeBrw( oBrw )} DEFINE TBROWSE oBrw ; AT 5,5 ; OF Form_1 ; WIDTH GetProperty("Form_1", 'Width') - 25 ; HEIGHT GetProperty("Form_1", 'Height') - 50 ; FONT "Tahoma" ; SIZE 9 ; GRID ; EDIT oBrw:SetArray( aArray, .T. ) oBrw:nAdjColumn := 1 oBrw:aColumns[1]:cFooting := "STRING" oBrw:aColumns[2]:cFooting := "NUM" oBrw:aColumns[3]:cFooting := "DATE" oBrw:aColumns[1]:nFAlign := DT_LEFT oBrw:aColumns[2]:nFAlign := DT_LEFT oBrw:aColumns[3]:nFAlign := DT_CENTER oBrw:lFooting := .T. oBrw:lDrawFooters := .T. oBrw:nHeightFoot := 20 oBrw:DrawFooters() END TBROWSE END WINDOW ACTIVATE WINDOW Form_1 RETURN NIL FUNC ReSizeBrw( oBrw ) local nTop := GetProperty("Form_1", 'Row') + 5, ; nLeft := GetProperty("Form_1", 'Col') + 5, ; nWidth := GetProperty("Form_1", 'Width') - 25, ; nHeight := GetProperty("Form_1", 'Height') - 50 oBrw:Move( nTop,nLeft, nWidth, nHeight, .T. ) Return oBrw:Refresh(.T.)
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 4671
Зарегистрирован: 12.09.06
|
|
Отправлено: 26.01.16 12:46. Заголовок: Haz пишет: По мне ,..
Haz пишет: цитата: | По мне , так вместо одного глобального примера - лучше 10 маленьких узко тематических И для понимания проще и поиграться проще при изучении. Вот ресайз тока что накидал , ничего лишнего и все понятно |
| Пример классный ! То что нужно для изучения новичку ! Когда делал свой пример, много не понимал. Что сделал - то сделал, нужно править. Выкладывал на форуме пробную версию - писал: комментарии и исправления приветствуются ! Haz пишет: цитата: | nTop := GetProperty("Form_1", 'Row') + 5, ; nLeft := GetProperty("Form_1", 'Col') + 5, |
| Только вместо этого лучше oBrw:nLeft ,oBrw:nTop ( новичку понятней буде как можно делать)
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 4672
Зарегистрирован: 12.09.06
|
|
Отправлено: 26.01.16 12:54. Заголовок: SergKis пишет: IF w..
SergKis пишет: цитата: | IF w !=0 .and. h != 0 SetProperty(oBrw:cParentWnd, oBrw:cControlName, "Enabled", .F.) _SetControlHeight( oBrw:cControlName, oBrw:cParentWnd, h) _SetControlWidth ( oBrw:cControlName, oBrw:cParentWnd, w) oBrw:Paint() SetProperty(oBrw:cParentWnd, oBrw:cControlName, "Enabled", .T.) // oBrw:Display() Endif |
| Уточни пожалуйста для чего это нужно ?
|
|
|
Haz
|
| |
Пост N: 756
Зарегистрирован: 20.02.11
|
|
Отправлено: 26.01.16 14:51. Заголовок: Andrey пишет: Уточн..
Andrey пишет: цитата: | Уточни пожалуйста для чего это нужно ? |
| так тут все и так все понятно oBrw:cParentWnd вернет имя формы в которой бровс определен oBrw:cControlName вернет имя самого бровса А дальше если ширина и высота после ресайса больше нуля, то бровсу говорят Enabled := F, затем меняют его размеры, прорисовывают и Enabled := T Видимо так тоже сработает, мне больше через :Move() нравится PS: Andrey пишет: цитата: | Только вместо этого лучше oBrw:nLeft ,oBrw:nTop ( новичку понятней буде как можно делать) |
| В примере nTop , nLeft и пр. это координаты формы Form_1 , а не самого бровса. Тогда уж не oBrw:nTop , а Form_1.Row. Мне больше через GetProperty нравится , т.к. универсально ( не требуется DECLARE WINDOW указывать если окно не объявлено выше по тексту ), но это дело привычки
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 4688
Зарегистрирован: 12.09.06
|
|
Отправлено: 11.02.16 12:48. Заголовок: Привет всем ! Как ра..
Привет всем ! Как работать с TBROWSE при перепоказе записей ? Описание проблемки: Установлен условный индекс по полю метка, меняем это значение, кол-во записей в TBROWSE изменилось. Указатель записи нужно поставить на следующую запись. cAlias := (oBrw:cAlias) .... CASE nKey == VK_SPACE cField := "MARK" IF FIELDNUM(cField) > 0 // есть ли такое поле в БД nRecno := (oBrw:cAlias)->(OrdKeyNo()) xVal := mFieldGet(cField, cAlias) xVal := ! xVal mFieldPut(cField, xVal, cAlias) oBrw:DrawSelect() IF LEN(aCargoFilter) > 0 // если стоит индекс-фильтр по этому полю, то обнулить бровс IF AT( cField, UPPER(aFilter[2]) ) > 0 oBrw:Reset() //oBrw:GoToRec( nRecno-1 ) // вот здесь не знаю как делать.... ENDIF ENDIF oBrw:Refresh(.F.) EndIf
|
|
|
|
Haz
|
| |
Пост N: 771
Зарегистрирован: 20.02.11
|
|
Отправлено: 12.02.16 17:05. Заголовок: Andrey пишет: Указа..
Andrey пишет: цитата: | Указатель записи нужно поставить на следующую запись. |
| Посмотри как это делает TSBrowse при удалении записи , т.к. суть одинакова
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 4689
Зарегистрирован: 12.09.06
|
|
Отправлено: 12.02.16 19:25. Заголовок: Haz пишет: Посмотри..
Haz пишет: цитата: | Посмотри как это делает TSBrowse при удалении записи |
| Вот это - METHOD TSBrowse:DeleteRow() ?
|
|
|
Haz
|
| |
Пост N: 772
Зарегистрирован: 20.02.11
|
|
Отправлено: 13.02.16 11:54. Заголовок: Andrey пишет: Вот э..
Andrey пишет: цитата: | Вот это - METHOD TSBrowse:DeleteRow() ? |
| Да, именно это
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 4690
Зарегистрирован: 12.09.06
|
|
Отправлено: 13.02.16 15:38. Заголовок: Спасибо ! :sm36: ..
Спасибо ! И ещё один вопрос созрел. Делаю: Add Super Header To oBrw1 From Column 1 To Column 8 ; Color CLR_BLACK, { CLR_RED , CLR_YELLOW } ; Title "Мой СУПЕРХИДЕР таблицы" 3DLook Можно ли на него создать обработку своей функции ? Как это сделать ? И как поменять центровку строк в этом суперхидере ?
|
|
|
Haz
|
| |
Пост N: 773
Зарегистрирован: 20.02.11
|
|
Отправлено: 13.02.16 16:31. Заголовок: Andrey пишет: Можно..
Andrey пишет: цитата: | Можно ли на него создать обработку своей функции |
| какую обработку ? если клик по хидеру - то вроде есть такая Andrey пишет: цитата: | И как поменять центровку строк в этом суперхидере |
| опять таки какую центровку - горизонтальная есть
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 4691
Зарегистрирован: 12.09.06
|
|
Отправлено: 13.02.16 17:12. Заголовок: Haz пишет: если кли..
Haz пишет: цитата: | если клик по хидеру - то вроде есть такая |
| Да, клик по хидеру. Я не нашел как повесить, допустим MsgDebug("Мой СУПЕРХИДЕР таблицы") ? Haz пишет: цитата: | опять таки какую центровку - горизонтальная есть |
| А мне нужно влево центровать, а не по центру.
|
|
|
Haz
|
| |
Пост N: 774
Зарегистрирован: 20.02.11
|
|
Отправлено: 13.02.16 20:00. Заголовок: Andrey пишет: А мне..
Andrey пишет: цитата: | А мне нужно влево центровать, а не по центру. |
| влево вправо по центру - это все ГОРИЗОНТАЛЬНОЕ выравнивание По сути вопроса -гляну в исходниках позже
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 852
Зарегистрирован: 17.02.12
|
|
Отправлено: 13.02.16 21:26. Заголовок: Andrey пишет:А мне н..
Andrey пишет: цитата: | А мне нужно влево центровать, а не по центру. |
| #command ADD [ SUPER ] HEADER TO <oBrw> ; FROM [ COLUMN ] <nFrom> ; TO [ COLUMN ] <nTo> ; [ <head:TITLE, HEADER> <cHead> ] ; [ HEIGHT <nHeight> ] ; [ <color:COLOR, COLORS> <aColors,...> ] ; [ <l3dLook: 3DLOOK, LOOK3D> ] ; [ FONT <uFont> ] ; [ <lGrid:NOGRID, NOLINES> ] ; [ BITMAP <uBmp> ] ; [ <lAdj:ADJUST> ] ; [ <lTra:TRANSPARENT> ] ; [ <horz:HORZ, HORZ ALIGN> <nHAlign> ] ; [ <vert:VERT, VERT ALIGN> <nVAlign> ] ; => ; <oBrw>:AddSuperHead( <nFrom>, <nTo>, <cHead>, [ <nHeight> ], ; [ \{<aColors>\} ], <.l3dLook.>, <uFont>, ; <uBmp>, <.lAdj.>, <.lTra.>, <.lGrid.>, ; <nHAlign>, <nVAlign> ) * ============================================================================ * METHOD TSBrowse:AddSuperHead() Version 9.0 Nov/30/2009 * ============================================================================ Method AddSuperHead( nFromCol, nToCol, uHead, nHeight, aColors, l3dLook, uFont, uBitMap, lAdjust, lTransp, ; lNoLines, nHAlign, nVAlign ) CLASS TSBrowse Local cHeading, nAt, nLheight, nOcurs, cRest, nLineStyle, nClrText, nClrBack, nClrLine, ; hFont := If( ::hFont != Nil, ::hFont, 0 ) Default lAdjust := .F., ; l3DLook := ::aColumns[ nFromCol ]:l3DLookHead, ; nHAlign := DT_CENTER, ; nVAlign := DT_CENTER, ; lTransp := .T., ; uHead := "" ...
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 4692
Зарегистрирован: 12.09.06
|
|
Отправлено: 13.02.16 21:55. Заголовок: Делаю: Add Super Hea..
Делаю: Add Super Header To oBrw1 From Column 1 To Column 8 ; Color CLR_BLACK, { CLR_RED , CLR_YELLOW } ; Title "Мой СУПЕРХИДЕР таблицы" 3DLook HORZ DT_LEFT Ура, заработало ! И как еще повесить при нажатии на этот "Super Header", допустим MsgDebug("Мой СУПЕРХИДЕР таблицы") ?
|
|
|
Ответов - 300
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[только новые]
|
|