On-line: гостей 0. Всего: 0 [подробнее..]
АвторСообщение
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:....



Спасибо: 0 
Профиль
Ответов - 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 + высоты заголовков\подвалов (что бы те было фантомной строки).


Спасибо: 0 
Профиль
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() ? Какого художника ... он вообще нужен ? Это была не совсем удачная попытка избавиться от залипания последней строки, как показала практика - не помогает. В теме про дырку , все расписали как надо с этим бороться и Сергей и Дима там все доступно рассказали

Резюме
Убрать неправильные комменты
вместо паинта и дисплая поставить рефреш( Т)
и чуть не забыл ... повыкидывать везде этот корректфёстласт

Спасибо: 0 
Профиль
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, как, я описал


Спасибо: 0 
Профиль
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 это код видимо с тебя списан , как и написал Андрей - в этом же примере приводит к залипанию футингов. При замене на банальный рефреш - залип исчезает

Спасибо: 0 
Профиль
SergKis
постоянный участник




Пост N: 842
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 25.01.16 21:37. Заголовок: Haz пишет:банальный ..


Haz пишет:
 цитата:
банальный рефреш - залип исчезает


работает
я пробнул display() - не то (а с фантомной решалось через это), а Paint() перерисовал, но криво, на рефреш и не подумал - оказывается зря

Спасибо: 0 
Профиль
Andrey
постоянный участник




Пост N: 4670
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 25.01.16 23:42. Заголовок: Haz пишет: Сергей, ..


Haz пишет:

 цитата:
Сергей, в примере у Андрея Tsb_config это код видимо с тебя списан


Мне этот код Григорий помогал писать.
Если окно MAIN - работает без проблем.
Я сделал окно WINDOWTYPE STANDARD - появился этот эффект.
CorrectionFirstLast() убрал совсем, я Григорию предлагал новую версию этого примера для библиотеки, он не захотел.
Из-за этого в старом примере и делал этот эффект, чтобы всем другим было понятней, от чего я исходил.

Haz пишет:

 цитата:
При замене на банальный рефреш - залип исчезает



Да действительно исчез. Спасибо БОЛЬШОЕ !

Спасибо: 0 
Профиль
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.)







Спасибо: 0 
Профиль
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 ( новичку понятней буде как можно делать)

Спасибо: 0 
Профиль
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



Уточни пожалуйста для чего это нужно ?


Спасибо: 0 
Профиль
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 указывать если окно не объявлено выше по тексту ), но это дело привычки

Спасибо: 0 
Профиль
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



Спасибо: 0 
Профиль
Haz
администратор




Пост N: 771
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 12.02.16 17:05. Заголовок: Andrey пишет: Указа..


Andrey пишет:

 цитата:
Указатель записи нужно поставить на следующую запись.


Посмотри как это делает TSBrowse при удалении записи , т.к. суть одинакова

Спасибо: 0 
Профиль
Andrey
постоянный участник




Пост N: 4689
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 12.02.16 19:25. Заголовок: Haz пишет: Посмотри..


Haz пишет:

 цитата:
Посмотри как это делает TSBrowse при удалении записи



Вот это - METHOD TSBrowse:DeleteRow() ?

Спасибо: 0 
Профиль
Haz
администратор




Пост N: 772
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 13.02.16 11:54. Заголовок: Andrey пишет: Вот э..


Andrey пишет:

 цитата:
Вот это - METHOD TSBrowse:DeleteRow() ?



Да, именно это

Спасибо: 0 
Профиль
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

Можно ли на него создать обработку своей функции ? Как это сделать ?
И как поменять центровку строк в этом суперхидере ?


Спасибо: 0 
Профиль
Haz
администратор




Пост N: 773
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 13.02.16 16:31. Заголовок: Andrey пишет: Можно..


Andrey пишет:

 цитата:
Можно ли на него создать обработку своей функции


какую обработку ? если клик по хидеру - то вроде есть такая
Andrey пишет:

 цитата:
И как поменять центровку строк в этом суперхидере


опять таки какую центровку - горизонтальная есть




Спасибо: 0 
Профиль
Andrey
постоянный участник




Пост N: 4691
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 13.02.16 17:12. Заголовок: Haz пишет: если кли..


Haz пишет:

 цитата:
если клик по хидеру - то вроде есть такая


Да, клик по хидеру.
Я не нашел как повесить, допустим MsgDebug("Мой СУПЕРХИДЕР таблицы") ?

Haz пишет:

 цитата:
опять таки какую центровку - горизонтальная есть


А мне нужно влево центровать, а не по центру.


Спасибо: 0 
Профиль
Haz
администратор




Пост N: 774
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 13.02.16 20:00. Заголовок: Andrey пишет: А мне..


Andrey пишет:

 цитата:
А мне нужно влево центровать, а не по центру.


влево вправо по центру - это все ГОРИЗОНТАЛЬНОЕ выравнивание
По сути вопроса -гляну в исходниках позже

Спасибо: 0 
Профиль
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 := ""
...


Спасибо: 0 
Профиль
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("Мой СУПЕРХИДЕР таблицы") ?




Спасибо: 0 
Профиль
Ответов - 300 , стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 All [только новые]
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 91
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет