On-line: гостей 0. Всего: 0 [подробнее..]
АвторСообщение
постоянный участник


Пост 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 
ПрофильЦитата Ответить
Ответов - 148 , стр: 1 2 3 4 5 6 7 8 All [только новые]


постоянный участник




Пост N: 3850
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 18.12.14 19:13. Заголовок: Dima пишет: А Григо..


Dima пишет:

 цитата:
А Григорий что говорит по этому поводу ?


Не знает. Сказал обращаться к Haz ....
Цвета задаю после объявления TBROWSE:
END TBROWSE
// 1 , "Цвет текста в ячейках таблицы"
oBrwLic:SetColor( { 1 }, { { || CLR_WHITE }})
// 2 , "Цвет фона в ячейках таблицы"
oBrwLic:SetColor( { 2 }, { { || CLR_HBLUE }})
// 3 , "Цвет текста шапки таблицы"
oBrwLic:SetColor( { 3 }, { { || CLR_YELLOW }})
// 4 , "Цвет фона шапка таблицы"
oBrwLic:SetColor( { 4 }, { { || { RGB( 43, 149, 168 ), RGB( 0, 54, 94 )}}})
// 5 , "Цвет текста курсора, текст в ячейках с фокусом"
oBrwLic:SetColor( { 5 }, { { || CLR_BLACK }})
// 6 , "Цвет фона курсора"
oBrwLic:SetColor( { 6 }, { { || { 4915199,255} } } )
// 7 , "Цвет текста редактируемого поля"
oBrwLic:SetColor( { 7 }, { { || CLR_RED }})
// 8 , "Цвет фона редактируемого поля"
oBrwLic:SetColor( { 8 }, { { || CLR_YELLOW }})
// 9 , "Цвет текста подвала таблицы"
oBrwLic:SetColor( { 9 }, { { || CLR_YELLOW }})
// 10 , "Цвет фона подвала таблицы"
oBrwLic:SetColor( { 10 }, { { || { RGB( 43, 149, 168 ), RGB( 0, 54, 94 )}}})
// 11 , "Цвет текста неактивного курсора (selected cell no focused)"
oBrwLic:SetColor( { 11 }, { { || CLR_GRAY }})
// 12 , "Цвет фона неактивного курсора (selected cell no focused)"
oBrwLic:SetColor( { 12 }, { { || { RGB( 255, 255, 74 ), RGB( 240, 240, 0 )}}})
// 13 , "Цвет текста шапки выбранного индекса"
// 14 , "Цвет фона шапки выбранного индекса"
// 15 , "Цвет линий между ячейками таблицы"


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




Пост N: 448
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 19.12.14 00:04. Заголовок: Andrey цвет окну не..


Andrey
цвет окну не пробовал устанавливать или label сцветной по tsb ?

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




Пост N: 3851
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 19.12.14 00:11. Заголовок: SergKis пишет: цвет..


SergKis пишет:

 цитата:
цвет окну не пробовал устанавливать или label сцветной по tsb ?


Не догадался. Сделаю, отпишусь.

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




Пост N: 3852
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 19.12.14 02:56. Заголовок: Блин, а ларчик откры..


Блин, а ларчик открывался просто...
DEFINE TBROWSE oBrwLic ;
........
BACKCOLOR BLUE ;
.........
END TBROWSE

Спасибо за подсказку !


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




Пост N: 3855
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 19.12.14 13:56. Заголовок: Мучаюсь с цветами в ..


Мучаюсь с цветами в TBROWSE. Как то по хитрому устроено с цветами, не ко всем есть доступ.
Вот еще не знаю как закрасить ДВА квадратика 1) и 2). Подскажите кто знает ?


Хотя один нашел:
// Левый верхний уголок - specialаselector header background color
oBrw:nClrSelectorHdBack := CLR_HMAGENTA

Цвета нужны для примера MiniGUI\SAMPLES\Advanced\Tsb_config

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4365
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 19.12.14 15:16. Заголовок: переменных по цветам..


переменных по цветам там не так много
 

DATA nClrHeadBack, nClrHeadFore // headers colors
DATA nClrFocuBack, nClrFocuFore // focused cell colors
DATA nClrEditBack, nClrEditFore // editing cell colors
DATA nClrFootBack, nClrFootFore // footers colors
DATA nClrSeleBack, nClrSeleFore // selected cell no focused
DATA nClrOrdeBack, nClrOrdeFore // order control column colors
DATA nClrSpcHdBack,nClrSpcHdFore,nClrSpcHdActive // special headers colors
DATA nClrSelectorHdBack // specialаselector header background color



Поиграйся методом научного тыка ;)

У Define TBROWSE тож есть цвета

 
..........
[ BACKCOLOR <backcolor> ] ;
[ FONTCOLOR <fontcolor> ] ;
[ <color: COLOR, COLORS> <aColors,...> ] ;



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




Пост N: 3856
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 19.12.14 18:19. Заголовок: Dima пишет: Поиграй..


Dima пишет:

 цитата:
Поиграйся методом научного тыка ;)


Поигрался. Не нашёл. Из-за этого и написал.

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




Пост N: 3867
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.12.14 13:18. Заголовок: Как можно получить в..


Как можно получить высоту таблицы уже нарисованной на экране ?
Нужно рядом с таблицей, с такой же высотой нарисовать прямоугольник.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 404
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 20.12.14 14:43. Заголовок: Andrey пишет: Как м..


Andrey пишет:

 цитата:
Как можно получить высоту таблицы уже нарисованной на экране ?



local aPos := {0,0,0,0}

GetWindowRect(oBrw:oWnd:hWnd, aPos)
Height := aPos [4] - aPos [2]



Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4370
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 20.12.14 15:15. Заголовок: oBrw:nBottom - oBrw:..


CLASS TSBrowse FROM TControl

вероятно сработает oBrw:nBottom - oBrw:nTop не ?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 405
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 20.12.14 15:37. Заголовок: Dima пишет: вероятн..


Dima пишет:

 цитата:
вероятно сработает oBrw:nBottom - oBrw:nTop не ?



точно, но простые пути нам не интересны

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4371
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 20.12.14 15:47. Заголовок: Haz :sm12: ..


Haz

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4372
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 20.12.14 16:07. Заголовок: Andrey что касается..


Andrey
что касается цветов вот еще 2 из TCONTROL nClrText ,nClrPane


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




Пост N: 3868
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.12.14 18:50. Заголовок: Нашел еще лучше - oB..


Нашел еще лучше - oBrw:nHeightHead !

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




Пост N: 3869
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.12.14 18:56. Заголовок: Dima пишет: что кас..


Dima пишет:

 цитата:
что касается цветов вот еще 2 из TCONTROL nClrText ,nClrPane



Нет это не то ! Не перекрашивают то что нужно.


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4376
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 20.12.14 18:57. Заголовок: Andrey пишет: oBrw:..


Andrey пишет:

 цитата:
oBrw:nHeightHead


так это высота заголовка , не ?

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




Пост N: 3870
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.12.14 19:06. Заголовок: Точно, высота заголо..


Точно, высота заголовка. Я что-то не то увидел...

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




Пост N: 3871
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.12.14 19:09. Заголовок: Переношу цвета с одн..


Переношу цвета с одного бровса в другой. Если цвет - число, то переноситься, а если блок кода, то не переноситься.
Как сделать перенос цвета (блока кода) ?
nCol := 2 // или 3 колонка с цветом
oCol := oBrw9:aColumns[ nCol ] // считаем цвет с oBrw9
oCol:SaveColor()
aColor := oCol:aColorsBack

FOR nI := 1 TO 15
IF VALTYPE(aColor[nI]) == "B"
// Здесь как сделать ?
ELSE
oBrw8:Setcolor( { nI }, { aColor[nI] }, 1 ) // 1-я колонка
oBrw8:Setcolor( { nI }, { aColor[nI] }, 2 ) // 2-я колонка
ENDIF
NEXT




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




Пост N: 3873
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 23.12.14 23:36. Заголовок: Andrey пишет: Блин,..


Andrey пишет:

 цитата:
Блин, а ларчик открывался просто...
DEFINE TBROWSE oBrwLic ;
........
BACKCOLOR BLUE ;
.........
END TBROWSE



Цвет окна (где НЕТ записей) в таблице установил, а по ходу в задаче НЕ МОГУ исправить цвет:
// ------ Установить фон окна таблицы ----------
Form_0.oBrw.BackColor := n2RGB(M->nTbrwColorPane)

Что не так делаю ?

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




Пост N: 3875
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 29.12.14 14:01. Заголовок: Всем привет. Вот но..


Всем привет.

Вот новая проблема.
У меня в TBROWSE есть поиск, т.е. при нажатии анг. или русских букв включается фильтр и отбираются записи.
Так вот после отбора, НАЧИНАЕТСЯ СРАЗУ редактирование первой записи попавшей по условию !!!
Мне это не нужно. Нужно убрать это редактирование и поставить редактирование ТОЛЬКО после нажатия клавиши ENTER или по двойному клику мышки.
Как это сделать ?

У себя в коде делаю так:
// обработка нажатий клавиш, включая ENTER
&cBrw:bKeyDown := { | nKey , nFalgs| MyKeyAction(nKey,nFalgs) }
// Двойной клик мышки на МАРКЕРЕ
&cBrw:bLDblClick:= { || MyKey_Edit() }
// ---------- назначить обработку клавиши F9 на первую колонку -----------
&cBrw:nFireKey := VK_F9
&cBrw:bUserKeys := { |a,b,c| MyKey_F9(a,b,c) }
................


Функция MyKeyAction():
Скрытый текст




Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4382
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 29.12.14 14:20. Заголовок: Andrey пишет: Так в..


Andrey пишет:

 цитата:
Так вот после отбора, НАЧИНАЕТСЯ СРАЗУ редактирование первой записи попавшей по условию


Очищай буфер после нажатия


Спасибо: 0 
ПрофильЦитата Ответить
moderator




Пост N: 703
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 29.12.14 15:04. Заголовок: Andrey пишет: Как э..


Andrey пишет:

 цитата:
Как это сделать ?


Попробуй перенести обработку нажатий клавиш для поиска из функции MyKeyAction() в обработчик bUserKeys

Примерно это будет выглядеть так:

STATIC FUNCTION MyKey_F9((nKey,nFlags)

IF !Alltrim(cStSearchValue) == Form_Spr.Text_1.Value
cStSearchValue := Form_Spr.Text_1.Value
ENDIF

DO CASE
CASE nKey == VK_F9
MsgInfo("VK_F9 !")
CASE nKey > 31 .AND. nKey < 254
// добавить символ в поиск
cStSearchValue := cStSearchValue + KeyToChar(nKey)
Form_Spr.Text_1.Value := cStSearchValue
RefreshBrowse()

Return .F. // <----------- важно вернуть здесь FALSE

ENDCASE

Return .T.

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




Пост N: 3876
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 29.12.14 16:48. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Попробуй перенести обработку нажатий клавиш для поиска из функции MyKeyAction() в обработчик bUserKeys


А от MyKeyAction() тогда отказаться вообще ?

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




Пост N: 3877
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 30.12.14 07:39. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Попробуй перенести обработку нажатий клавиш для поиска из функции MyKeyAction() в обработчик bUserKeys


Перенес. От MyKeyAction() отказался вообще,
т.е. &cBrw:bKeyDown := { | nKey , nFalgs| MyKeyAction(nKey,nFalgs) } убрал.

Перестали работать клавиши управления маркером - стрелки (вверх, вниз и т.д.)
Как быть ?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 409
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 31.12.14 12:27. Заголовок: Andrey пишет: Перес..


Andrey пишет:

 цитата:
Перестали работать клавиши управления маркером



сам их наверное и отключил вернув .F. из bUserkey

Andrey пишет:

 цитата:
Как быть ?



смотреть как обрабатывается bUserKey в h_browse.prg

строка 6197

If ::bUserKeys != Nil

uReturn := Eval( ::bUserKeys, nKey, nFlags, Self )

If uReturn != Nil .and. ValType( uReturn ) == "N" .and. uReturn < 200 // interpreted as a virtual key code to
nKey := uReturn //V90 // change the original key pressed
ElseIf uReturn != Nil .and. ValType( uReturn ) == "L" .and. ! uReturn
::nUserKey := 255 // want to inhibit the KeyDown and KeyChar Methods for key pressed
Return 0
EndIf
EndIf


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




Пост N: 3879
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 03.01.15 15:43. Заголовок: Haz пишет: сам их н..


Haz пишет:

 цитата:
сам их наверное и отключил вернув .F. из bUserkey


Да вроде не отключал.

Модифицировал пример из \MiniGUI\SAMPLES\Advanced\Tsb_config
т.е. поставил функцию обработки MyKeyEdit() и MyFieldEdit() и добавил фильтр по текстовому полю.
Клавиши управления стрелок не работают.
Помогите пожалуйста разобраться ?
Пример Tsb_config-1.1.7z тут - https://cloud.mail.ru/public/5d315f972a72/MiniGui-Error



Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 410
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 04.01.15 11:40. Заголовок: Andrey пишет: Да вр..


Andrey пишет:

 цитата:
Да вроде не отключал.



Ну-ну

CASE nKey > 31 .AND. nKey < 254
cStaticSearch := cStaticSearch + KeyToChar(nKey)
Form_0.Text_Seek.Value := cStaticSearch
RefreshBrowse()
xRet := .F.


вот коды кнопок со стрелками
#define VK_NEXT 34
#define VK_END 35
#define VK_HOME 36
#define VK_LEFT 37
#define VK_UP 38
#define VK_RIGHT 39
#define VK_DOWN 40
#define VK_SELECT 41
#define VK_EXECUTE 43
#define VK_SNAPSHOT 44
#define VK_INSERT 45
#define VK_DELETE 46
#define VK_HELP 47


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




Пост N: 3880
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 04.01.15 19:42. Заголовок: Haz пишет: вот коды..


Haz пишет:

 цитата:
вот коды кнопок со стрелками


Спасибо БОЛЬШОЕ !
Я сделал как в терминалке. Ошибся. Как правильно сделать ?

Достаточно ли сделать:
CASE nKey > 47 .AND. nKey < 254
или еще что-то нужно сделать

Так уже сделал - работает !

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




Пост N: 3892
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 11.01.15 16:52. Заголовок: Всем привет. Как при..


Всем привет.
Как при показе таблицы обойтись без дополнительных баз с SET RELATION.

Есть массив aDim := {"---","город","село"}
Создаю колонку:
ADD COLUMN TO oBrw9 HEADER "Группа" + CRLF + "местности" ;
DATA FieldWBlock( "KGROUP", Select() ) ;
SIZE 150 ;
ALIGN DT_CENTER,DT_CENTER,DT_RIGHT ;
EDITABLE
oBrw9:aColumns[6]:bPrevEdit := { || MyDimGroup(), FALSE }

Как вместо кодов в базе выводить значения из массива ?
Т.е. если в базе 0 - выводить aDim[1] := "---"? 1 - aDim[2] := "город" и т.д.

Или ткните в пример, если он есть ?




Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4399
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 11.01.15 17:13. Заголовок: Andrey пишет: Как в..


Andrey пишет:

 цитата:
Как вместо кодов в базе выводить значения из массива ?


Этот вопрос ты уже задавал и тебе ответили , поройся в своей старой теме.

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




Пост N: 3893
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 11.01.15 17:25. Заголовок: Dima пишет: Этот во..


Dima пишет:

 цитата:
Этот вопрос ты уже задавал и тебе ответили , поройся в своей старой теме.


Не помню, покажи пожалуйста.
Я тогда не сделал, а сейчас нужно сделать.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4400
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 11.01.15 17:52. Заголовок: Andrey Да мне тоже ..


Andrey
Да мне тоже лень вместо тебя рыться в твоей старой теме
см. MiniGUI\SAMPLES\Advanced\Tsb_array\

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 412
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 11.01.15 18:56. Заголовок: Andrey пишет: Как в..


Andrey пишет:

 цитата:
Как вместо кодов в базе выводить значения из массива ?
Т.е. если в базе 0 - выводить aDim[1] := "---"? 1 - aDim[2] := "город" и т.д.

Или ткните в пример, если он есть ?




См. в примерах TsBrowse как использовать :bData или :SetData
:bData - определяет кодовый блок выборки/записи в колонке TsBrowse
:SetData - чуть сложнее и работает с двумя массивами aData и aValue , работает так - если значение в колонке будет найдено в aData то в ячейке отобразится соответствующее из aValue ( тут же в примерах использование ComboWBlock в :SetData - редактирование кода через выбор его соответствия из комбика )



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




Пост N: 3894
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 11.01.15 19:57. Заголовок: Haz Спасибо БОЛЬШОЕ ..


Haz Спасибо БОЛЬШОЕ !
Буду рыться...

Dima Где ты взял такого классного пирата ?


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4401
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 11.01.15 22:31. Заголовок: Andrey пишет: Dima ..


Andrey пишет:

 цитата:
Dima Где ты взял такого классного пирата ?


В форме ответа слева есть смайлы а под ними цифирки
Не пробовал на них нажимать ?

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




Пост N: 3895
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 12.01.15 00:00. Заголовок: Dima пишет: В форме..


Dima пишет:

 цитата:
В форме ответа слева есть смайлы а под ними цифирки
Не пробовал на них нажимать ?


Я пирата раньше не видел ....

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




Пост N: 3906
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 19.01.15 00:15. Заголовок: Всем доброй ночи......


Всем доброй ночи....

Вот что-то не идет у меня контекстное меню для TBROWSE...

Объявил окно
DEFINE WINDOW Form_5 ;
..........................
ОN INIT MyTbr2()

END WINDOW
///////
Function MyTbr2()
...............
DEFINE TBROWSE oBrw_1 ;
.................
END TBROWSE

DEFINE CONTEXT MENU CONTROL oBrw_1
MENUITEM "Включить показ удаленных записей" ...
............................
END MENU // строка 794

Выдает ошибку:
Error BASE/1132 Переполнение массива: Неверное количество аргументов
Called from _ENDMENU(517)
Called from SPRCREATEBROWSE(794)


Подскажите пожалуйста, что не так делаю ?




Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 413
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 19.01.15 10:07. Заголовок: Andrey пишет: что н..


Andrey пишет:

 цитата:
что не так



DEFINE CONTEXT MENU CONTROL oBrw_1 OF Form_5

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




Пост N: 3907
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 19.01.15 14:57. Заголовок: Haz пишет: OF Form_..


Haz пишет:

 цитата:
OF Form_5


Спасибо ! Заработало !

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




Пост N: 3919
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 26.01.15 01:06. Заголовок: Поймал глюк... Очере..


Поймал глюк... Очередной...
Если в моём справочнике несколько записей то в TBROWSE если раз 10 - колёсиком мышки покрутить, то база отсоединяется от TBROWSE ... пропадает соединение и всё....
После этого на экране можно листать базу вверх-вниз, но если попробовать редактировать, то вылет по ошибке:
Error DBCMD/2001 Файл не открыт:

Вот так выглядит это на экране:


Как с этим бороться ?



Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 415
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 26.01.15 11:38. Заголовок: Andrey пишет: если..


Andrey пишет:

 цитата:
если раз 10 - колёсиком мышки покрутить,


минут 10 крутил колесиком , палец уже устал а база никак не хочет отсоединяться и все работает как положено Andrey пишет:


 цитата:
Как с этим бороться ?


смотреть чего понаписал в исходнике

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




Пост N: 3920
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 26.01.15 11:54. Заголовок: Haz пишет: смотреть..


Haz пишет:

 цитата:
смотреть чего понаписал в исходнике


Отдельно программа работает КАК ЧАСЫ (ни как не убивается....) ! Занимает 2,5 Мб - на диске и в памяти.

Включаю эту же программу в свою систему (5.5Мб на диске и 4.8 Мб в памяти) и на этой же базе получаю вылет.
Колесиком вверх-вниз секунд 20 и вылет. Я понимаю, что не каждый юзер так будет делать, но у меня и быстрей иногда сваливается с такой же ошибкой: Error DBCMD/2001 Файл не открыт:

При создании TBROWSE открываю всю базу. Потом по кнопке делаю условную индексацию (этой базы) по городу и уменьшаю список показа записей.
Может в этом дело ? При большом ехе-нике перестает работать ?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 416
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 26.01.15 12:06. Заголовок: Andrey пишет: Включ..


Andrey пишет:

 цитата:
Включаю эту же программу в свою систему (5.5Мб) и на этой же базе получаю вылет



1 Возможно в большой системе другие установки или есть конфликт имен .. от размера исполняемого модуля это точно не зависит
2 Смотреть что висит на ON CHANGE и ON DRAW твоего справочника

Andrey пишет:

 цитата:
При создании TBROWSE открываю всю базу. Потом по кнопке делаю условную индексацию (этой базы) по городу и уменьшаю список показа записей.
Может в этом дело ?


Может и в этом , нужно как минимум oBrw:Reset() после того как была изменена рабочая область

PS/ а если не делать условную индексацию - эффект отключения наблюдяется ?


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




Пост N: 3921
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 26.01.15 12:36. Заголовок: Haz пишет: 1 Возмож..


Haz пишет:

 цитата:
1 Возможно в большой системе другие установки или есть конфликт имен ..


А какие другие установки ?
Конфликта имен точно нет. Переменные все переискал в других исходниках - таких нет. Были, уже удалил.

Haz пишет:

 цитата:
2 Смотреть что висит на ON CHANGE и ON DRAW твоего справочника


ON GOTFOCUS ( MyChangeBrowse(cAlias), Form_Spr.oBrw_1.Setfocus) ;
ON CHANGE (CorrectionFirstLast("oBrw_1"),MyChangeBrowse(cAlias), Form_Spr.oBrw_1.Setfocus)

Функция MyChangeBrowse(cAlias) Скрытый текст


Функция CorrectionFirstLast("oBrw_1") не моя, брал и примеров:
Скрытый текст


Haz пишет:

 цитата:
Может и в этом , нужно как минимум oBrw:Reset() после того как была изменена рабочая область


Да я рабочую область и не меняю. Алиас тот же самый.
Скрытый текст



Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 417
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 26.01.15 13:17. Заголовок: ОТКЛЮЧИ ON CHSNGE и ..


ОТКЛЮЧИ ON CHANGE и попробуй без него

Andrey пишет:

 цитата:
RefreshBrowse()



Это что делает ?



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




Пост N: 3922
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 26.01.15 13:55. Заголовок: Haz пишет: Это что ..


Haz пишет:

 цитата:
Это что делает ?


Поиск по введенным буквам:
Скрытый текст


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




Пост N: 3923
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 26.01.15 13:59. Заголовок: Haz пишет: ОТКЛЮЧИ ..


Haz пишет:

 цитата:
ОТКЛЮЧИ ON CHANGE и попробуй без него


Так же вылетает после 20-30 секундного мышка-колёсико....
Error DBCMD/2001 Файл не открыт:

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 418
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 26.01.15 15:03. Заголовок: Andrey пишет: Так ж..


Andrey пишет:

 цитата:
Так же вылетает после 20-30 секундного мышка-колёсико..



после каждого "мышка-колёсико" вызывается ON CHANGE, можно предположить что проблема в нем. Отключи и проверь
Явно база нигде не закрывается , может уперся в максимальное число открытых баз/индексов ?



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




Пост N: 3925
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 26.01.15 15:20. Заголовок: Haz пишет: может уп..


Haz пишет:

 цитата:
может уперся в максимальное число открытых баз/индексов ?



Да там только эти справочники и открываются. Еще только оболочку сделал и менюшку справочники.
И десяти баз открытых не будет....

Haz пишет:

 цитата:
после каждого "мышка-колёсико" вызывается ON CHANGE, можно предположить что проблема в нем. Отключи и проверь



Проверил, только что еще раз. Убрал вообще ON CHANGE и ON GOTFOCUS
Так же вылетает после 20-30 секундного мышка-колёсико....
Error DBCMD/2001 Файл не открыт:

Может неправильно написал, хотя из примеров брал:
// создать объект TBROWSE
SprCreateBrowse( cSection, "oBrw_1", 'Form_Spr', nBrwTop+2, nBrwLeft, nBrwWdth, nBwrHght-2-nHB, ALIAS() )

ниже в программе:
PUBLIC &cBrw

DEFINE TBROWSE &cBrw ;
AT nRow, nCol ;
ALIAS cAlias ;
OF &cParent ;
WIDTH nWidth ;
HEIGHT nHeight ;
COLORS { CLR_BLACK, CLR_BLUE } ;
BACKCOLOR aBackColor ;
FONT 'Tahoma' SIZE ModeSizeFont()
//ON GOTFOCUS ( MyChangeBrowse(cAlias), Form_Spr.oBrw_1.Setfocus)
//ON CHANGE (CorrectionFirstLast("oBrw_1"),MyChangeBrowse(cAlias), Form_Spr.oBrw_1.Setfocus)

END TBROWSE


Есть какая нибудь функция показывающая открытые базы ?
Или самому писать надо ? У меня такая в терминалке была...


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 419
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 26.01.15 15:49. Заголовок: Andrey пишет: Или с..


Andrey пишет:

 цитата:
Или самому писать надо


имеется ввиду список Алиасов ?
готовой нет или бровс по алиасу - такая есть внутри h_tbrowse.prg

Function SBrowse( uAlias, cTitle, bSetUp, aCols, nWidth, nHeight, lSql )
можно вызвать с одним параметром uAlias

// создать объект TBROWSE
SprCreateBrowse( cSection, "oBrw_1", 'Form_Spr', nBrwTop+2, nBrwLeft, nBrwWdth, nBwrHght-2-nHB, ALIAS() )

PS попробуй Alias() явно задать ввиде символьного значения. такое впечатление что бровс его забывает

PPS проверь чему равно значение &cBrw:cAlias

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4423
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 26.01.15 15:53. Заголовок: Haz пишет: имеется ..


Haz пишет:

 цитата:
имеется ввиду список Алиасов ?



Pasha пишет:

 цитата:
Оказывается, в харборе есть функция

hb_waEval( bBlock )

Блок кода bBlock вызывается для каждой открытой рабочей области. Т.е. массив алиасов или номеров р/о можно получить так:

aAlias := {}
hb_waEval( {|| AADD(aAlias, Alias())} )

или
aSelect := {}
hb_waEval( {|| AADD(aSelect, Select())} )



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




Пост N: 466
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 26.01.15 15:57. Заголовок: Andrey может так на..


Andrey
может так надо:
DEFINE TBROWSE &cBrw ;
AT nRow, nCol ;
ALIAS &cAlias ;
OF &cParent ;

 цитата:
Или самому писать надо ?


a := {}; AEval(array(50), {|x,e| iif( (e)->( used() ), aAdd(a, (e)->( alias() ), nil) })
msgDebug(a)


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




Пост N: 3926
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 26.01.15 16:34. Заголовок: SergKis пишет: може..


SergKis пишет:

 цитата:
может так надо:
DEFINE TBROWSE &cBrw ;
AT nRow, nCol ;
ALIAS &cAlias ;



Делал и так тоже.
у Григория пример брал из \MiniGUI\SAMPLES\Advanced\Tsb_filter\demo.prg


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




Пост N: 3927
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 26.01.15 16:45. Заголовок: SergKis пишет: AEva..


SergKis пишет:

 цитата:
AEval(array(50), {|x,e| iif( (e)->( used() ), aAdd(a, (e)->( alias() ), nil) })



Error E0030 Syntax error "syntax error at '}'"


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




Пост N: 3928
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 26.01.15 16:58. Заголовок: Haz пишет: PS попро..


Haz пишет:

 цитата:
PS попробуй Alias() явно задать ввиде символьного значения. такое впечатление что бровс его забывает

PPS проверь чему равно значение &cBrw:cAlias


Для проверки сделал отдельное меню:
MENUITEM "Алиас этой БД" ACTION { || MyGetUse("oBrw_1") }
SEPARATOR
MENUITEM "Список открытых БД" ACTION { || MyGetAllUse() }

После потери связи с базой выдает что база открыта: "STREET"
А если опросить все базы то показывает что 3 базы открыты !!!
Получается TBROWSE сам теряет связь с базой....
Что делать ?



Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 420
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 26.01.15 17:19. Заголовок: Andrey пишет: Получ..


Andrey пишет:

 цитата:
Получается TBROWSE сам теряет связь с базой....
Что делать ?



Скорре всего слетат ( а точнее становится невыполнимым ) условие в блоке выборки/записи по колонке( или колонкам ) и уверен слетает не само а какой то кусок кода ему помогает.
нужно проверить до слета и сразу после
1. oBrw:cAlias - должно быть "STREET"
2. oBrw:aColumns[x]:cData должно быть что то типа "STREET->имя поля или FieldGet(). "
3. Eval( oBrw:aColumns[x]:bData) должно вернуть значение из текущей записи для колонки х

ЗЫ
в функции RefreshBrowse() есть вызов Alias() ? Андрей ты уверен в том что при выполнении RefreshBrowse() ВСЕГДА Alias() == "STREET" ?

и что там с тассировкой ошибки - на какую строку из h_browse.prg ругается ?








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




Пост N: 3930
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 26.01.15 18:14. Заголовок: Слетает всегда в одн..


Слетает всегда в одном месте, когда редактировать начинаешь. После того как колёсиком поездишь, кол-во записей становится 0/0 и начинаешь редактировать.
Я назначил свою функцию обработки и в зависимости условий, разрешаю/запрещаю редактировать ячейки или вызываю справочник (отдельный):
For nI := 1 to Len(aPoleField)
ADD COLUMN TO TBROWSE &cBrw // добавить новую колонку в TBROWSE
.....
IF cTypeField # "+" // кроме - автоинкремент поля
&cBrw:aColumns[nI]:lEdit := .T.
oBrw_1:aColumns[nI]:bPrevEdit := {|| MyFieldEdit( oBrw_1:aColumns[oBrw_1:nCell]:Cargo ) }
ENDIF
Next

Вылет всегда в:
Error DBCMD/2001 Файл не открыт: RLOCK
Called from RLOCK(0)
Called from RECLOCK(31) // это моя функция
Called from MYFIELDEDIT(1471) // это моя функция
Called from (b)SPRCREATEBROWSE(964)
Called from TSBROWSE:KEYDOWN(6329)
Called from TSBROWSE:HANDLEEVENT(7084)
Called from EVENTS(76)


RECLOCK(31) // это моя функция из терминалки
Скрытый текст



Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 421
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 26.01.15 18:25. Заголовок: Andrey пишет: Calle..


Andrey пишет:

 цитата:
Called from TSBROWSE:KEYDOWN(6329)



похоже что то с блоком выборки не алё вот тут спотыкается при редактировании

TSBROWSE:KEYDOWN(6329
проверив что есть bPrevEdit и бровс не по массиву пытается выполнить блок и вылетает с ошибкой

If ::aColumns[ nCol ]:bPrevEdit != Nil

If ::lIsArr .and. ( ::lAppendMode .or. ::nAt > Len( ::aArray ) ) // append mode for arrays
Else // GF 16-05-2008
uVal := Eval( ::aColumns[ nCol ]:bData )
uVal := Eval( ::aColumns[ nCol ]:bPrevEdit, uVal )

If ValType( uVal ) == "L" .and. ! uVal
Return 0
EndIf
EndIf

EndIf


ЗЫ
MYFIELDEDIT в студию

ЗЫЫ И все же мне кажется что где то меняется рабочая область ! в bPrevEdit тыкни MsgDebug( Alias() )


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




Пост N: 3931
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 26.01.15 18:31. Заголовок: Сделал новый тест в ..


Сделал новый тест в функции MyFieldEdit() до начала редактирования при слёте базы:

MsgDebug(oBrw_1:nLen, ALIAS(), oBrw_1:cAlias )
MsgDebug( "RLock()=", (oBrw_1:cAlias)->(RLock()) )

Т.е. колёсиком подергал вверх-вниз на 5 записях, функция MyChangeBrowse(cAlias) показывает 0/0
начинаю редактировать:
1. MsgDebug показывает 5, "", "STREET"
2. MsgDebug показывает "RLock()=" .T.

Т.е. АЛИАС по всей задачи ALIAS() = "" - убит !!! Кем ?
На экране таблица есть (в объекте) а все связи разорваны !

Еще раз пишу, отдельная задача работает как часы, а в сборке с другими (там только еще один TBROWSE есть) начинает вылетать.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4425
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 26.01.15 18:39. Заголовок: Haz пишет: MYFIELDE..


Haz пишет:

 цитата:
MYFIELDEDIT в студию


+1

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




Пост N: 468
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 26.01.15 19:29. Заголовок: Andrey AEval(array(..


Andrey
AEval(array(50), {|x,e| iif( (e)->( used() ), aAdd(a, (e)->( alias() )), nil) })

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 422
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 26.01.15 20:37. Заголовок: SergKis пишет: Т.е...


пишет:

 цитата:
Т.е. АЛИАС по всей задачи ALIAS() = "" - убит !!! Кем ?



не убит, где-то сработал Select(0) вот и стал текущим пустой алиас. На 99% уверен что если твой RecLock() вызывать из алиасного выражения STREET->(RecLock()) то ошибка уйдет. Но это костыль, а не исправление ошибки. По уму надо найти "виновника"

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




Пост N: 3932
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 26.01.15 21:00. Заголовок: Haz пишет: MYFIELDE..


Haz пишет:

 цитата:
MYFIELDEDIT в студию



Да вот она, с терминалки перетащил, еще не вычищал...
Скрытый текст


Только до редактирования же НЕ ДОХОДИТ !!! Я колёсиком вверх-вниз и алиас уже слетает !!!
Т.е. стоя на 5-7 записях в справочнике уже видно что база отвалилась !!!

Andrey пишет:

 цитата:
Сделал новый тест в функции MyFieldEdit() до начала редактирования при слёте базы:

MsgDebug(oBrw_1:nLen, ALIAS(), oBrw_1:cAlias )
MsgDebug( "RLock()=", (oBrw_1:cAlias)->(RLock()) )

Т.е. колёсиком подергал вверх-вниз на 5 записях, функция MyChangeBrowse(cAlias) показывает 0/0
начинаю редактировать:
1. MsgDebug показывает 5, "", "STREET"
2. MsgDebug показывает "RLock()=" .T.

Т.е. АЛИАС по всей задачи ALIAS() = "" - убит !!! Кем ?
На экране таблица есть (в объекте) а все связи разорваны !



А вот еще облом, если записей много колёсиком-мышки нужно подергать вверх-вниз (просто на экране, не на всю длину) и то же вылетает .... 0/0 записей....


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




Пост N: 3933
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 26.01.15 21:28. Заголовок: Haz пишет: в bPrev..


Haz пишет:

 цитата:
в bPrevEdit тыкни MsgDebug( Alias() )


Где поставить проверку ?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 423
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 26.01.15 21:54. Заголовок: Andrey пишет: Где п..


Andrey пишет:

 цитата:
Где поставить проверку ?



так уже поставил , выяснил что текущий алиас меняется .

поставь первой строкой в MyFieldEdit dbSelectArea("STREET")


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




Пост N: 3934
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 26.01.15 23:08. Заголовок: Haz пишет: поставь ..


Haz пишет:

 цитата:
поставь первой строкой в MyFieldEdit dbSelectArea("STREET")



Понял, СПАСИБО БОЛЬШОЕ !

Только я через статик переменную это поставил в MyChangeBrowse() и в MyFieldEdit()
IF LEN(ALIAS()) == 0
dbSelectArea( cStaticAliasMain )
ENDIF

Спасибо БОЛЬШОЕ всем кто помогал !!!

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 424
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 27.01.15 09:26. Заголовок: Andrey пишет: Тольк..


Andrey пишет:

 цитата:
Только я через статик переменную



а лучше так
dbSelectArea( oBrw:cAlias ) ты ж бровс редактируешь а в нем алиас и так есть

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




Пост N: 3939
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 10.02.15 18:01. Заголовок: Опять :sm183: Как..


Опять

Как создать колонку для показа/редактирования записей из массива ?
Т.е. в базе содержится поле KGROUP и взамен его значения нужно показывать значение из массива MyDimGroup()
ADD COLUMN TO oBrw9 HEADER CRLF + "Группа" SIZE 150 ;
ALIGN DT_CENTER,DT_CENTER,DT_RIGHT ;
DATA FieldWBlock( "KGROUP", Select() ) ; // как здесь определить ?
EDITABLE
oBrw9:aColumns[6]:bPrevEdit := { || MyDimGroup(), FALSE } // как здесь сделать вызов ?


Если делаю напрямую, без oBrw9:aColumns[6]:bPrevEdit := ....
......
EDITABLE
MyDimGroup()

то справочник вызывается....

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 455
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 10.02.15 18:29. Заголовок: Andrey пишет: Как с..


Andrey пишет:

 цитата:
Как создать колонку для показа/редактирования записей из массива



Вот стандартный из TSCOLUMN для понимания как работает

Function ArrayWBlock( oBrw, nEle )
Return {|x| If(PCount() > 0, oBrw:aArray[ oBrw:nAt, nEle ] := x, oBrw:aArray[ oBrw:nAt, nEle ] ) }

Вообще любой блок выборки записи упрощенно работает так
1. Если ему передают параметр - присваивает значение этого параметра ( запись)
2. Если не передают - читает ( выборка )


т.е. выборка должна быть типа aArray[ Ascan( aArray, (Alias())->KGROUP )] , при этом учитывать что если не найдет - будет вылет по ошибке aArray[0]

ЗЫ. Пример условный т.к. не ясно что за массив

ЗЫЫ Или опять тот же совет - смотреть как используется ::SetData() в исходниках tsBrowse - 100% твой случай

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




Пост N: 3940
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 10.02.15 18:40. Заголовок: Haz пишет: Пример у..


Haz пишет:

 цитата:
Пример условный т.к. не ясно что за массив


Приблизительно так:
AADD( aDim, { 0 , "---" } )
AADD( aDim, { 1 , "Новичок" } )
AADD( aDim, { 2 , "Руководство" } )
AADD( aDim, { 3 , "Специалисты" } )
AADD( aDim, { 4 , "Опытные пользователи" } )
AADD( aDim, { 5 , "Администратор БД" } )
AADD( aDim, { 90, "Уволенные с фирмы" } )
AADD( aDim, { 99, "Удаленные записи" } )

FOR nI := 1 TO LEN(aDim)
AADD( aCod, aDim[nI,1] )
AADD( aNum, aDim[nI,2] )
NEXT


DATA FieldWBlock( "KGROUP", Select() ) ; // как здесь определить ?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 456
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 10.02.15 18:48. Заголовок: для колонки 1 по пол..


для колонки 1 по полю KGROUP примерно так

oBrw:SetData( 1, ComboWBlock( oBrw, "KGROUP", 1, aArr ) )

в бровсе будет отображаться значение из массива только aArr := { aNom, aCod } нужно заменить на aArr := { aCod, aNom }

все ж есть в примерах



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




Пост N: 3941
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 10.02.15 19:05. Заголовок: Haz пишет: все ж ес..


Haz пишет:

 цитата:
все ж есть в примерах


Спасибо БОЛЬШОЕ !
Кое что не получалось....

А как назначить блок выбора из массива ?
oBrw9:aColumns[6]:bPrevEdit := { || MyDimGroup(), FALSE } // как здесь сделать вызов ?

Если делаю напрямую, без oBrw9:aColumns[6]:bPrevEdit := ....
......
EDITABLE
MyDimGroup()
то справочник вызывается....


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 457
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 10.02.15 21:40. Заголовок: Andrey пишет: А как..


Andrey пишет:

 цитата:
А как назначить блок выбора из массива ?
oBrw9:aColumns[6]:bPrevEdit := { || MyDimGroup(), FALSE } // как здесь сделать вызов ?



А какова цель этого ^^^ ?
При чем тут блок выбора и :bPrevEdit ?


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




Пост N: 3942
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 10.02.15 23:40. Заголовок: Haz пишет: А какова..


Haz пишет:

 цитата:
А какова цель этого ^^^ ?


Хочу при нажатии на этой колонке, осуществлять выбор из справочника.
Я не понимаю как делать отдельный выбор (вызов функции обработки) по колонке.
Для мемо-поля (или другой отдельной функции) такой вариант проходит,
а для выбора из ComboWBlock( oBrw, "KGROUP", 1, aArr ) почему то нет.

Вот например эти функции нормально вызываются (по клавише ENTER):
oBrw9:aColumns[4]:bPostEdit := {|| SeekLogin(), FALSE } // проверка после ввода
oBrw9:aColumns[7]:bPrevEdit := { || SavePassword(), FALSE } // запись пароля


А так не вызывается: (почему ? )
ADD COLUMN TO oBrw9 HEADER "Группа" ;
ALIGN DT_CENTER,DT_CENTER,DT_RIGHT ;
EDITABLE
oBrw9:aColumns[6]:bPrevEdit := { || MyDimGroup(), FALSE } // вызов справочника


Нужно делать только так (без блока):
......
EDITABLE
MyDimGroup()


Функция MyDimGroup() - переделана из примера \MiniGUI\SAMPLES\Advanced\Tsb_config
Скрытый текст





Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 458
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 11.02.15 10:40. Заголовок: Andrey пишет: Функц..


Andrey пишет:

 цитата:
Функция MyDimGroup() - переделана из примера



С этого и надо было начинать ... (с исходника)
Вот это тоже переделано от туда же -> oBrw9:aColumns[6]:bPrevEdit := { || MyDimGroup(), FALSE }
Тогда какого художника там делает FALSE ?

Читаем справку по TSBrowse из поставки Minigui

============== читаем ОТ сюда ========================
<bPrevEdit> ( OPTIONAL ) Code Block that will be evaluated before starting the bData editing. This Code Block combined with bPostEdit, will be of great help when need to update the variable used in the Footer of the column, without going through the entire database. It also conditions the editing during run time, if it returns a False value, then the cell editing does not take place.
TSBrowse passes as parameter to this Block the value of the variable before editing.
============== читаем ДО сюда ========================

И осмысливаем почему редактирования не происходит

Andrey пишет:

 цитата:
Для мемо-поля (или другой отдельной функции) такой вариант проходит,а для выбора из ComboWBlock( oBrw, "KGROUP", 1, aArr ) почему то нет.



Потому что там редактирование у тебя сделано не в самой ячейке а во внешней фунции, а непосредственного редактирования ячейки также не происходит.

PS. месье знает толк в извращениях. Сначала сам себе создает проблему на ровном месте, а потом трахается с ней неделю и тже сам


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




Пост N: 3957
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 18.02.15 00:16. Заголовок: Всем привет ! Подска..


Всем привет !
Подскажите пожалуйста как сделать следующее:
1) Редактирование ячейки по формату (см.картинку)


2) При нажатие редактирования 8-строки сделать вызов отдельной функции, которая прописана в поле PICTURE ?


Файл программы 2DBF.7z здесь - https://cloud.mail.ru/public/5d315f972a72/MiniGui-Error

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4507
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 18.02.15 10:08. Заголовок: picture "@R 9(99..


picture "@R 9(999) 999-999-99"
picture "@R 999.999.999.999.999"


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




Пост N: 3958
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 18.02.15 11:28. Заголовок: Dima пишет: picture..


Dima пишет:

 цитата:
picture "@R 9(999) 999-999-99"
picture "@R 999.999.999.999.999"


Не всё так просто. Если сразу добавить, то и отображаться так будет. А мне надо только при редактировании.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4508
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 18.02.15 11:33. Заголовок: Andrey пишет: А мне..


Andrey пишет:

 цитата:
А мне надо только при редактировании.


 
proc main
local a:=space(12)
local b:=space(15)
cls
@ 10,10 get a picture "@R 9(999) 999-999-99"
@ 11,10 get b picture "@R 999.999.999.999.999"
read


return


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




Пост N: 3959
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 18.02.15 11:50. Заголовок: Dima пишет: @ 10,10..


Dima пишет:

 цитата:
@ 10,10 get a picture "@R 9(999) 999-999-99"
@ 11,10 get b picture "@R 999.999.999.999.999"


Dima это для терминалки подойдет. А для МиниГуи нет.
См. пример:
Файл программы 2DBF.7z здесь - https://cloud.mail.ru/public/5d315f972a72/MiniGui-Error



Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4510
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 18.02.15 11:51. Заголовок: Andrey Ну видать в ..


Andrey
Ну видать в Минигуи такие шаблоны не реализованы

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 461
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 18.02.15 12:26. Заголовок: Dima пишет: Ну вида..


Dima пишет:

 цитата:
Ну видать в Минигуи такие шаблоны не реализованы


Дима , вопрос про TsBrowse и там ( и в MiniGui ) все реализовано более того там шаблоны можно задавать не только символьной строкой , но и блоком кода ( который оценивается во время выполнения и возвращает нужную строку)

Andrey
Задача решается как два пальца ... ...
Если нужен шаблон на просмотр и редактирование то oBrw:aColumns[x]:cPicture := "какой то шаблон" ( или := { || какой-то блок который вернет нужный шаблон } )
Если нужен особый шаблон только редактирование то перед тем как это редактирование начнется (создастся Get и получит фокус ввода ) в Классе предусмотрен блок DATA bPrevEdit // Action to be performed before editing cell. в котором можно переопределять шаблон на нужный ( не забывая его потом восстанавливать на общий для показа в блоке bPostEdit или bEditEnd ).
Короче выше тут описал алгоритм , и он займет всего две строки кода
:bPrevEdit := {|| :cPicture := ....}
:bPostEdit := {|| :cPicture := ....}

Второй вопрос (тоже bPrevEdit) уже раз сто в ветке обсуждался


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




Пост N: 3961
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 18.02.15 12:41. Заголовок: Haz пишет: Задача р..


Haz пишет:

 цитата:
Задача решается как два пальца ...


Это для тебя как два пальца... А я еще не въеду в это (часть понял, часть не понял)...
Из-за этого и маленький пример сделал, чтобы понять можно было бы.
Если есть возможность, то большая просьба показать на этом примере как это делается.
Заранее БОЛЬШОЕ СПАСИБО !

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 462
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 18.02.15 13:31. Заголовок: Andrey пишет: Если ..


Andrey пишет:

 цитата:
Если есть возможность, то большая просьба показать на этом примере как это делается.




подмена шаблона для редактирования ( примерно так )

oBrw_2:aColumns[3]:cPicture := Replicate("X", 80)
oBrw_2:aColumns[3]:bPrevEdit := { || oBrw_2:aColumns[3]:cPicture := Alltrim((Alias())->PICTURE ), .T.}
oBrw_2:aColumns[3]:bPostEdit := { || oBrw_2:aColumns[3]:cPicture := Replicate("X", 80))}

и что тут такого невероятного

Есть правда одно НО ..
нужно определиться что храним в поле PICTURE - или шаблон в виде строки ? или вызываемую функцию
соответственно будет или
oBrw_2:aColumns[3]:bPrevEdit := { || oBrw_2:aColumns[3]:cPicture := Alltrim((Alias())->PICTURE ), .T.}
или
oBrw_2:aColumns[3]:bPrevEdit := { || oBrw_2:aColumns[3]:cPicture := Alltrim(Eval((Alias())->PICTURE )), .T.}


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




Пост N: 3962
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 18.02.15 15:08. Заголовок: Haz пишет: Есть пра..


Haz пишет:

 цитата:
Есть правда одно НО ..


Вот и я о том же. Можно выкрутиться тогда с помощью функции без параметров - типа: MyFunc() и анализировать тогда строку на "()":
oBrw_2:aColumns[3]:bPrevEdit := { || oBrw_2:aColumns[3]:cPicture := IIF(AT("()",(Alias())->PICTURE)>0, ;
Alltrim(Eval((Alias())->PICTURE )),;
Alltrim((Alias())->PICTURE ), .T.}

Haz пишет:

 цитата:
и что тут такого невероятного



Для тебя просто, а я пока туплю, опыта нет...

Спасибо БОЛЬШОЕ !

А можно скрыть показ в таблице aColumns[4] ?
Т.е. типа виртуальный 4-столбец.

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




Пост N: 3963
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 18.02.15 15:28. Заголовок: Труба ! Не работает...


Труба ! Не работает.... Опять не работает...
Исправленный файл программы 2DBF.7z здесь - https://cloud.mail.ru/public/5d315f972a72/MiniGui-Error


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 463
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 18.02.15 16:45. Заголовок: Andrey пишет: А мож..


Andrey пишет:

 цитата:
А можно скрыть показ в таблице aColumns[4] ?
Т.е. типа виртуальный 4-столбец.



Что имеешь ввиду ? Есть же метод obrw:HideColumns()

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 464
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 18.02.15 16:55. Заголовок: Haz пишет: Труба ! ..


Haz пишет:

 цитата:
Труба ! Не работает.... Опять не работает...



Работает

oBrw_2:aColumns[3]:cPicture := Replicate("X", 80)
oBrw_2:aColumns[3]:bPrevEdit := { || oBrw_2:aColumns[4]:cPicture := Alltrim((Alias())->PICTURE ), .T.}
oBrw_2:aColumns[3]:bPostEdit := { || oBrw_2:aColumns[4]:cPicture := Replicate("X", 80))}

1) в момент инициализации бровса это была колонка 3 , после появилась колонка SELECTOR и твое поле стало колонкой 4
2) Выше же писал что Replicate("X", 30) это НЕ шаблон. а ФУНКЦИЯ которую надо еще и вызвать. Правильный шаблон "XXXXXXXXXXXXXXXXXXXXXXXXXXXX"


ЗЫ Вообще там этот селектор и обращение к массиву aColumns по номеру не очень дружат
У себя определяю в классе TSCOLUMN новое поле данных DATA cName и присваиваю ему имя поля потом индекс колонки получаю косвенно через это имя . Криво ... зато таких сюрпризов нет

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




Пост N: 3964
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 18.02.15 18:57. Заголовок: Haz пишет: Работает..


Haz пишет:

 цитата:
Работает


СПАСИБО !
1) Понял, где пролетел.
2) Я в новой базе подправил (убрал эту функцию и поставил шаблон).

Haz пишет:

 цитата:
Вообще там этот селектор и обращение к массиву aColumns по номеру не очень дружат
У себя определяю в классе TSCOLUMN новое поле данных DATA cName и присваиваю ему имя поля потом индекс колонки получаю косвенно через это имя . Криво ... зато таких сюрпризов нет


А код для этого примера можешь привести ?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 465
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 18.02.15 20:35. Заголовок: Andrey пишет: А код..


Andrey пишет:

 цитата:
А код для этого примера можешь привести ?



сначала

FOR n := 1 TO Len(oBrw:aColumns)
oCol := oBrw:aColumns[n]
IF ! __objHasData(oCol, 'cName')
__objAddData (oCol, 'cName' )
oCol:cName:= (oBrw:cAlias)->(Field(n))
END
END

потом вместо oBrw:aColumns[n] примерно так ... oBrw:aColumns[ aScan( oBrw:aColumns, {|e| е:cName == Field(n)} )) ]:cPicture := "XXX"
PS писал по памяти , не проверял но смысл понятен




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




Пост N: 3965
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 18.02.15 22:34. Заголовок: Haz пишет: PS писал..


Haz пишет:

 цитата:
PS писал по памяти , не проверял но смысл понятен


Спасибо !

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




Пост N: 3966
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 18.02.15 23:34. Заголовок: Опять :sm183: Вро..


Haz пишет:

 цитата:
Задача решается как два пальца ...



Опять
Вроде сделал, работает... Только после вызова внешней функции - вылет:
Error BASE/1122 Неверный аргумент: TRANSFORM
Called from TRANSFORM(0)
Called from TSBROWSE:DRAWLINE(2862)
Called from TSBROWSE:GOUP(6049)
Called from TSBROWSE:KEYDOWN(6377)
Called from TSBROWSE:HANDLEEVENT(7084)
Called from EVENTS(75)
Called from _DOMESSAGELOOP(0)
Called from _ACTIVATEWINDOW(1374)
Called from HANDBOOKS(80)
Called from (b)MAIN(43)


С такой ошибкой точно не справлюсь !
Исправленный исходник 2DBF-2.7z здесь - https://cloud.mail.ru/public/5d315f972a72/MiniGui-Error

Может вообще обработку сделать в отдельной функции ?
Типа - oBrw_2:aColumns[3]:bPrevEdit := { || MyEditCol3() }
Только как в этой функции задавать форматы на обработку - не представляю....
Вообще то задачка становиться не совсем простой....


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 466
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 19.02.15 09:48. Заголовок: Andrey пишет: Вообщ..


Andrey пишет:

 цитата:
Вообще то задачка становиться не совсем простой....



задачка была и осталась примитивной :
1 перед редактированием присвоить переменной новое значение
2 после редактирования восстановить старое
3 при этом эти значения должны быть в ФОРМАТЕ ПРАВИЛЬНОГО ШАБЛОНА PICTURE

ВСЕ!
ошибка в программе связана с невыполнением п.3


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




Пост N: 3967
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 19.02.15 10:07. Заголовок: Haz пишет: ошибка в..


Haz пишет:

 цитата:
ошибка в программе связана с невыполнением п.3



Понял. Спасибо !

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




Пост N: 3968
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 19.02.15 10:27. Заголовок: Сделал так - Работае..


Сделал так - Работает !

oBrw_2:aColumns[3]:cPicture := Replicate("X", 180)
oBrw_2:aColumns[3]:bPrevEdit := { || MyEditCol3() }
oBrw_2:aColumns[3]:bPostEdit := { || oBrw_2:aColumns[4]:cPicture := Replicate("X", 180) }
..........
////////////////////////////////////////////////////////////
FUNCTION MyEditCol3()
LOCAL lRet := .T. , cPicture

IF (Alias())->KRUN == 1
EVAL( hb_macroBlock( Alltrim( (Alias())->PICTURE ) ) )
cPicture := Replicate("X", 180)
lRet := .F.
ELSE
cPicture := Alltrim( (Alias())->PICTURE )
ENDIF
oBrw_2:aColumns[4]:cPicture := cPicture

RETURN lRet


Спасибо БОЛЬШОЕ Haz !


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




Пост N: 3971
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 19.02.15 14:55. Заголовок: А как сделать в этом..


А как сделать в этом примере, чтобы формат сразу отображался ?


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




Пост N: 3972
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 19.02.15 14:56. Заголовок: А, просто оказываетс..


А, просто оказывается.
oBrw_2:aColumns[3]:cPicture := { || Alltrim( (Alias())->PICTURE ) }


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




Пост N: 3973
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 19.02.15 15:49. Заголовок: Andrey пишет: А, пр..


Andrey пишет:

 цитата:
А, просто оказывается.


Не фига, не просто. После первой правки - форматы ВСЕ слетают...
Как быть ?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 467
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 19.02.15 16:56. Заголовок: Andrey пишет: Как б..


Andrey пишет:

 цитата:
Как быть



Писать Григорию чтоб в TGetBox METHOD New вставил код
if ValType( cPict ) == "B"
cPict := Eval( cPict )
end

ну или самому ручками т.к. TGetBox:New не понимает если пикча задана блоком, в то время как TsBrows при показе блоки глотает на ура

Спасибо: 0 
ПрофильЦитата Ответить
moderator




Пост N: 723
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 19.02.15 17:45. Заголовок: Haz пишет: TGetBox:..


Haz пишет:

 цитата:
TGetBox:New не понимает если пикча задана блоком


Благодарю за наводку
Поправил для следующей сборки...

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




Пост N: 3974
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 19.02.15 20:56. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Поправил для следующей сборки...


Большое СПАСИБО !

А ПОКА - какой исходник можно самому подправить и к себе в проект поставить ?

Спасибо: 0 
ПрофильЦитата Ответить
moderator




Пост N: 725
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 19.02.15 21:59. Заголовок: Andrey пишет: какой..


Andrey пишет:

 цитата:
какой исходник можно самому подправить


Вот этот:
click here

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




Пост N: 3976
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 19.02.15 23:19. Заголовок: Спасибо БОЛЬШОЕ !!! ..


Спасибо БОЛЬШОЕ !!!

Работает....
2DBF-3.7z - https://cloud.mail.ru/public/5d315f972a72/MiniGui-Error

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




Пост N: 4023
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 02.03.15 20:02. Заголовок: У меня в задаче есть..


У меня в задаче есть меню с ДВУМЯ вкладками
Можно ли объект TBROWSE (созданный на 1-ой вкладке) скопировать на вторую вкладку ?
PAGE ' 1-я вкладка '

DEFINE TBROWSE oBrw8 ;
AT nHTabW,2 ;
WIDTH 510 HEIGHT GetClientHeight(hWnd)-(nHButt-1*2) - nHTabW -3 ;
ON CHANGE { || MyChangeBrowse8("oBrw8") } ;
ON GOTFOCUS MyChangeBrowse8("oBrw8") ;
BACKCOLOR aBackColor ;
SELECTOR .T. ;
CELL

END TBROWSE

END PAGE

PAGE ' 2-я вкладка '
..............

END PAGE



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




Пост N: 4026
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 03.03.15 17:29. Заголовок: Есть ли возможность ..


Есть ли возможность в МиниГуи копировать объект и располагать на другой форме ?
Может мой вопрос неправильный, так скажите пожалуйста...

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4574
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 03.03.15 17:39. Заголовок: Drag and Drop что ли..


Drag and Drop что ли ?

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




Пост N: 4027
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 03.03.15 17:47. Заголовок: Dima пишет: Drag an..


Dima пишет:

 цитата:
Drag and Drop что ли ?


Нет в коде. Чтобы не писать дублирующий код - типа так:
PAGE ' 1-я вкладка '

DEFINE TBROWSE oBrw8 ;
AT nHTabW,2 ;
WIDTH 510 HEIGHT GetClientHeight(hWnd)-(nHButt-1*2) - nHTabW -3 ;
ON CHANGE { || MyChangeBrowse8("oBrw8") } ;
ON GOTFOCUS MyChangeBrowse8("oBrw8") ;
BACKCOLOR aBackColor ;
SELECTOR .T. ;
CELL

END TBROWSE


END PAGE

PAGE ' 2-я вкладка '
DEFINE TBROWSE oBrw7 ;
AT nHTabW,2 ;
WIDTH 510 HEIGHT GetClientHeight(hWnd)-(nHButt-1*2) - nHTabW -3 ;
ON CHANGE { || MyChangeBrowse8("oBrw7") } ;
ON GOTFOCUS MyChangeBrowse8("oBrw7") ;
BACKCOLOR aBackColor ;
SELECTOR .T. ;
CELL

END TBROWSE


END PAGE


Есть ли команды - скопировать объект и разместить на форме ?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 488
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 03.03.15 17:54. Заголовок: Andrey пишет: Чтобы..


Andrey пишет:

 цитата:
Чтобы не писать дублирующий код


оформляй его в виде функции или процедуры один раз и вызывай сколько и где хош

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




Пост N: 4028
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 03.03.15 18:13. Заголовок: А как привязать этот..


А как привязать этот объект из функции на 1-ю и 2-у вкладку.

Спасибо: 0 
ПрофильЦитата Ответить
moderator




Пост N: 733
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 03.03.15 18:18. Заголовок: Andrey пишет: как п..


Andrey пишет:

 цитата:
как привязать этот объект из функции на 1-ю и 2-у вкладку


Посмотри рабочий пример ниже
Скрытый текст


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




Пост N: 4029
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 03.03.15 18:36. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Посмотри рабочий пример ниже


А сразу объект TBROWSE на 1-ю и вторую вкладку можно разместить ?
Без кнопочек открыть ?

Спасибо: 0 
ПрофильЦитата Ответить
moderator




Пост N: 734
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 03.03.15 18:53. Заголовок: Andrey пишет: А сра..


Andrey пишет:

 цитата:
А сразу объект TBROWSE на 1-ю и вторую вкладку


Да, по команде ниже

 цитата:

<Имя формы>.<Имя TAB>.addcontrol(<Имя TBROWSE>,<Номер вкладки TAB>,<Номер ряда>,<Номер колонки>)



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




Пост N: 4030
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 03.03.15 19:05. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Да, по команде ниже


Спасибо БОЛЬШОЕ ! Буду разбираться...

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




Пост N: 4068
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 28.03.15 11:16. Заголовок: Andrey пишет: Тольк..


Andrey пишет:

 цитата:
Только до редактирования же НЕ ДОХОДИТ !!! Я колёсиком вверх-вниз и алиас уже слетает !!!
Т.е. стоя на 5-7 записях в справочнике уже видно что база отвалилась !!!

Andrey пишет:

цитата:
Сделал новый тест в функции MyFieldEdit() до начала редактирования при слёте базы:

MsgDebug(oBrw_1:nLen, ALIAS(), oBrw_1:cAlias )
MsgDebug( "RLock()=", (oBrw_1:cAlias)->(RLock()) )

Т.е. колёсиком подергал вверх-вниз на 5 записях, функция MyChangeBrowse(cAlias) показывает 0/0
начинаю редактировать:
1. MsgDebug показывает 5, "", "STREET"
2. MsgDebug показывает "RLock()=" .T.

Т.е. АЛИАС по всей задачи ALIAS() = "" - убит !!! Кем ?
На экране таблица есть (в объекте) а все связи разорваны !

А вот еще облом, если записей много колёсиком-мышки нужно подергать вверх-вниз (просто на экране, не на всю длину) и то же вылетает .... 0/0 записей....



Возвращаюсь опять к предыдущей теме.
Теперь прога стала "сваливаться" на редактирование базы, то нормально редактирует, то нет. Закономерностей нет.
После некоторого анализа, дошло до меня....
После запуска программы, на главной форме я повесил таймер для перечитывания(открытие/закрытие) базы-журнала работающих в программе...
Может дело в этом ?


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




Пост N: 4069
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 28.03.15 11:21. Заголовок: Haz пишет: не убит,..


Haz пишет:

 цитата:
не убит, где-то сработал Select(0) вот и стал текущим пустой алиас. На 99% уверен что если твой RecLock() вызывать из алиасного выражения STREET->(RecLock()) то ошибка уйдет. Но это костыль, а не исправление ошибки. По уму надо найти "виновника"



Виновник найден !
Совсем мало прошло, чуть больше месяца....

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




Пост N: 627
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 16.05.15 09:54. Заголовок: Простая конструкция ..


Простая конструкция TsBrowse не включает корректировку (удаление работает) :
 
@ 10,10 TBROWSE oBrw5 ALIAS "Test" OF Form_1 ;
WIDTH 350 HEIGHT 380 CELLED;
HEADERS "Code","First","Last","Birth","Bio" ;
WIDTHS 50,150,150,100,200 ;
FIELDS Test->Code,Test->First,Test->Last,Test->Birth,Test->Bio ;
VALUE 1 ;
BACKCOLOR YELLOW ;
FONTCOLOR BLUE ;
LOCK ;
DELETE ;
EDITABLE

добавление доп. манипуляции исправляет ситуацию корректировки:
k := len(oBrw5:aColumns)
FOR i := 1 TO k
oBrw5:aColumns[ i ]:lEdit := ( i < k )
NEXT
но это лишние телодвижения ...
Отключение корректировки - результат не передачи в методе Default() параметра ::lEditable
h_tsbrowse.prg (line 1779)
::AddColumn( TSColumn():New( ::aHeaders[ nI ], bBlock, ::aFormatPic[nI], { ::nClrText, ::nClrPane, ;
::nClrHeadFore, ::nClrHeadBack, ::nClrFocuFore, ::nClrFocuBack }, ;
{aJustify[ nI ], 1}, ::aColSizes[ nI ],::lEditable, ; // здесь не задан параметр
ValType( Eval( ::bLine )[ nI ] ) == "B",,,,,,, ;
5,, {.F., .T.},, Self, cBlock ) )

это неточность или задумано специально ?


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




Пост N: 628
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 16.05.15 19:36. Заголовок: SergKis пишет:{aJust..


SergKis пишет:
 цитата:
{aJustify[ nI ], 1}, ::aColSizes[ nI ],::lEditable, ; // здесь не задан параметр


немного промахнулся в запятых, надо так:
 
::AddColumn( TSColumn():New( ::aHeaders[ nI ], bBlock, ::aFormatPic[nI], { ::nClrText, ::nClrPane, ;
::nClrHeadFore, ::nClrHeadBack, ::nClrFocuFore, ::nClrFocuBack }, ;
{aJustify[ nI ], 1}, ::aColSizes[ nI ],, ;
(::lEditable .or. ValType( Eval( ::bLine )[ nI ] ) == "B"),,,,,,, ;
5,, {.F., .T.},, Self, cBlock ) )

так работает

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




Пост N: 629
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 16.05.15 20:00. Заголовок: Продолжаю мучить про..


Продолжаю мучить простой вариант TsBrowse, добавил
 
@ 10,10 TBROWSE oBrw5 ALIAS "Test" OF Form_1 ;
WIDTH 350 HEIGHT 380 CELLED;
HEADERS "Code","First","Last","Birth","Bio" ;
WIDTHS 50,150,150,100,200 ;
FIELDS Test->Code,Test->First,Test->Last,Test->Birth,Test->Bio ;
VALUE 1 ;
BACKCOLOR YELLOW ;
FONTCOLOR BLUE ;
READONLY {.T.,.T.,.T.,.T.,.F.} ;
LOCK ;
DELETE ;
EDITABLE

и ... упс ... READONLY подвешен в воздухе, упоминается в Function _DefineTBrowse (...)
как HB_SYMBOL_UNUSED( readonly ) и все, т.е. вынесено из define ... "как трудно жить" (c),
перевести простой browse, на простой TBrowse


Спасибо: 0 
ПрофильЦитата Ответить
moderator




Пост N: 749
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 19.05.15 12:25. Заголовок: SergKis пишет: Прос..


SergKis пишет:

 цитата:
Простая конструкция TsBrowse не включает корректировку


Благодарю за помощь.
Уже включил это исправление в следующую сборку

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




Пост N: 630
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 19.05.15 19:05. Заголовок: SergKis пишет:переве..


SergKis пишет:
 цитата:
перевести простой browse, на простой TBrowse


победил так ( h_tsbrowse.prg):
 
Function _DefineTBrowse ( ... )
...
LOCAL i, j, k, n // BK 18.05.2015
...
if ValType(aColSel) != 'U' .and. ValType(aColSel) =='A'
IF ValType(aColSel[1]) =='A'
aColSel := aColSel[1]
endif
endif

IF valtype(uWhen) == 'B' // BK 18.05.2015
IF valtype(readonly) != 'A' //
readonly := eval(uWhen) //
ENDIF //
uWhen := Nil // иначе снятие
ENDIF //
IF valtype(valid) == 'B' //
valid := eval(valid) //
ENDIF // BK

if ( FontHandle := GetFontHandle( FontName ) ) != 0
...

oBrw := TSBrowse():New( ControlName, nRow, nCol, nWidth, nHeight,;
bFields, aHeaders, aWidths, ParentFormName,;
change , bDblClick, bRClick, fontname, fontsize, ;
hCursor, aTmpColor , aBmp, cMsg, update, uAlias, uWhen, value, cell,;
nStyle, bLClick, aFlds, aHeadClick, nLineStyle, lRePaint,;
Delete, aJust, lock, appendable, lEnum,;
lAutoSearch, uUserSearch, lAutoFilter, uUserFilter, aPicture, ;
lTransparent, uSelector, lEditable, lAutoCol, aColSel, tooltip)

IF ( k := len(oBrw:aColumns) ) > 0 // BK 18.05.2015
IF valtype(readonly) == 'A' // sets oCol:bWhen
n := Min(len(readonly), k) //
FOR i := 1 TO n //
j := readonly[ i ] //
IF valtype(j) == 'B' //
oBrw:aColumns[ i ]:bWhen := j //
ELSEIF j == NIL .or. ! empty(j) //
oBrw:aColumns[ i ]:bWhen := {||.T.} //
oBrw:aColumns[ i ]:cWhen := '{||.T.}' //
ELSE //
oBrw:aColumns[ i ]:bWhen := {||.F.} //
oBrw:aColumns[ i ]:cWhen := '{||.F.}' //
ENDIF //
NEXT //
ENDIF //
IF valtype(valid) == 'A' // sets oCol:bValid
n := Min(len(valid), k) //
FOR i := 1 TO n //
IF valtype(valid[ i ]) == 'B' //
oBrw:aColumns[ i ]:bValid := valid[ i ] //
ENDIF //
NEXT //
ENDIF //
ENDIF // BK
...
ControlHandle := oBrw:hWnd
IF ValType(gotfocus) != "U"
...
Работает:
@ 10,10 TBROWSE oBrw5 ALIAS "Test" OF Form_1 ;
WIDTH 350 HEIGHT 380 CELLED;
HEADERS "Code","First","Last","Birth","Bio" ;
WIDTHS 50,150,150,100,200 ;
FIELDS Test->Code,Test->First,Test->Last,Test->Birth,Test->Bio ;
VALUE 1 ;
BACKCOLOR YELLOW ;
FONTCOLOR BLUE ;
VALID {{|v,o| myValid(1, v, o)}, {|v,o| myValid(2, v, o)} } ;
READONLY {{|o| myROnly(1, o)},.T.,.T.,.T.,.F.} ;
LOCK ;
DELETE ;
EDITABLE

@ 10,10 TBROWSE oBrw5 ALIAS "Test" OF Form_1 ;
WIDTH 350 HEIGHT 380 CELLED;
HEADERS "Code","First","Last","Birth","Bio" ;
WIDTHS 50,150,150,100,200 ;
FIELDS Test->Code,Test->First,Test->Last,Test->Birth,Test->Bio ;
VALUE 1 ;
BACKCOLOR YELLOW ;
FONTCOLOR BLUE ;
WHEN {{|o| myWhen(1, o)}, {|o| myWhen(2, o)}, {|o| myWhen(3, o)}, {|o| myWhen(4, o)}, .F.} ;
VALID {{|v,o| myValid(1, v, o)}, {|v,o| myValid(2, v, o)}, , , } ;
LOCK ;
DELETE ;
EDITABLE


Спасибо: 0 
ПрофильЦитата Ответить
moderator




Пост N: 751
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 20.05.15 12:43. Заголовок: SergKis пишет: Рабо..


SergKis пишет:

 цитата:
Работает:


Все хорошо, но я инвертировал в двух местах логику обработки READONLY, поскольку по определению

 цитата:
readonly := ! eval(uWhen)


Добавил такое описание в текущий changelog:

 цитата:
 * Updated: Adaptation FiveWin Class TSBrowse 9.0 in HMG:  
- Fixed: EDITABLE clause at a simple TBROWSE definition is respected now.
- Updated: Added implementation of READONLY and VALID clauses similar to
a standard BROWSE control.
Contributed by SergKis.
(see proc Brw_5() at demo.prg in folder \samples\Advanced\TSBrowse)



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




Пост N: 4209
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 27.05.15 21:58. Заголовок: Сделал простой тесто..


Сделал простой тестовый пример на TBROWSE из нескольких столбцов.
Делаю так:
oBrw9:lCellBrw := .F. // маркер на всю таблицу

Как назначить ОДНУ функцию по нажатию Enter и мышки ?
Маркер же большой, не известно на каком столбце стоишь..
Все остальные клавиши нужно игнорировать.

Я знаю что нужно вешать обработчик, типа:
oBrw9:bKeyDown := { | nKey | MyKeyAction(nKey,oBrw9, ThisWindow.Name, 0), lOk := nKey != VK_ESCAPE }
oBrw9:bLDblClick:= { || MyAction(oBrw9, ThisWindow.Name, 0) } // Двойной клик мышки на МАРКЕРЕ

А по другому, попроще нельзя ?


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 561
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 28.05.15 12:35. Заголовок: Andrey пишет: Марке..


Andrey пишет:

 цитата:
Маркер же большой, не известно на каком столбце стоишь..


есть же oBrw9:nCell в нем и стоишь .....

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




Пост N: 4212
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 28.05.15 19:23. Заголовок: Haz пишет: есть же ..


Haz пишет:

 цитата:
есть же oBrw9:nCell в нем и стоишь .....


Где прописать обработку ENTER ?

Если на каждом столбце делаешь
ADD COLUMN ....
......
EDITABLE

то НЕТ никакой реакции на весь маркер при нажатии ENTER или мышки !
Получается только просмотр таблицы. Что нужно написать для редактирования по всему маркеру ?

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




Пост N: 642
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 28.05.15 19:36. Заголовок: Andrey пишет: Что ну..


Andrey пишет:
 цитата:
Что нужно написать для редактирования по всему маркеру ?


Т.е. по нескольким колонкам, входящих в маркер ?
Не пробовал, но думаю надо включить режим Cell и с нужной колонки нажать мышу для редактирования и ...
после последнего редактирования Cell выклюить

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 565
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 29.05.15 12:10. Заголовок: SergKis пишет: то Н..


SergKis пишет:

 цитата:
то НЕТ никакой реакции на весь маркер при нажатии ENTER или мышки !


по даблклике мышки работает если обьявить при инициализации бровса

DEFINE TBROWSE ...
...
ON DBLCLICK DblClickProcedurе()
...
END TBROWS

по ENTER если изменить обработку :KeyDown()
я просто добавляю в исходник метода :KeyDown() строки перед Otherwise
Case !::lCellbrw .And. (nKey == 13 .Or. nKey == 32 )
If ::bLDblClick != Nil
Eval( ::bLDblClick )
EndIf
и получаю вызов процедуры даблклика и по ENTER и по SPACE


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




Пост N: 643
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 29.05.15 12:26. Заголовок: Haz пишет:SergKis пи..


Haz пишет:
 цитата:
SergKis пишет:
цитата:
то НЕТ никакой реакции на весь маркер при нажатии ENTER или мышки !


это не я пишу, а Andrey.

Как я понял, он имеет TsBrowse c lCell := .F. (маркер на всю строку) и при нажатии Enter или Click хочет включать корректировку как lCell := .T. с какой то определенной колонки, после всех коректировок опять lCell := .F. (маркер на всю строку) и конечно с обработкой Dn,Up,... и кликом мыши за пределами окна коректировки.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 566
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 29.05.15 12:52. Заголовок: SergKis пишет: это ..


SergKis пишет:

 цитата:
это не я пишу, а Andrey.



Опять цитату не проверил , извиняюсь - конечно это к Андрею

SergKis пишет:

 цитата:
хочет включать корректировку как lCell := .T. с какой то определенной колонки


возможно и так , я подумал он хочет просто подвесить вызов функции на даблклик при длинном маркере. По любому при желании и то и то выполнимо.
Подсвечивать текущую колонку можно меняя цвет фона в колонке :nCell по bOnDraw






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




Пост N: 4213
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 29.05.15 14:20. Заголовок: Haz пишет: возможно..


Haz пишет:

 цитата:
возможно и так , я подумал он хочет просто подвесить вызов функции на даблклик при длинном маркере.


Да, я это имел ввиду.
Haz пишет:

 цитата:
ON DBLCLICK DblClickProcedurе()


Понял, СПАСИБО !

SergKis пишет:

 цитата:
Как я понял, он имеет TsBrowse c lCell := .F. (маркер на всю строку) и при нажатии Enter или Click хочет включать корректировку как lCell := .T.


Нет ! Просто корректировку ТОЛЬКО ОДНОЙ функции ! Допустим MyEditEnter() и всё.
Haz пишет:

 цитата:
по ENTER если изменить обработку :KeyDown()


Кроме как изменения :KeyDown() (это я делал, я помню) можно как то назначить обработку по ENTER или нельзя.
Это как то в ON CHANGE нужно прописывать ?

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




Пост N: 644
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 29.05.15 14:39. Заголовок: Andrey пишет:Нет ! П..


Andrey пишет:
 цитата:
Нет ! Просто корректировку ТОЛЬКО ОДНОЙ функции ! Допустим MyEditEnter() и всё.


раньше:

 цитата:
Сделал простой тестовый пример на TBROWSE из нескольких столбцов.
Делаю так:
oBrw9:lCellBrw := .F. // маркер на всю таблицу

Как назначить ОДНУ функцию по нажатию Enter и мышки ?
Маркер же большой, не известно на каком столбце стоишь..



 цитата:
Если на каждом столбце делаешь
ADD COLUMN ....
......
EDITABLE

то НЕТ никакой реакции на весь маркер при нажатии ENTER или мышки !
Получается только просмотр таблицы. Что нужно написать для редактирования по всему маркеру ?


Как написано, так и понято

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




Пост N: 4214
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 29.05.15 15:05. Заголовок: SergKis пишет: Как ..


SergKis пишет:

 цитата:
Как написано, так и понято


Ну извиняюсь, за своё косноязычие...

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 567
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 29.05.15 15:25. Заголовок: Andrey пишет: Кроме..


Andrey пишет:

 цитата:
Кроме как изменения :KeyDown(

это самый простой способ. а on change отрабатывает когда меняется текущая строка

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




Пост N: 4215
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 29.05.15 15:42. Заголовок: Haz пишет: это самы..


Haz пишет:

 цитата:
это самый простой способ. а on change отрабатывает когда меняется текущая строка


Понял. Спасибо !


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




Пост N: 4219
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 05.06.15 10:28. Заголовок: Всем привет ! Как о..


Всем привет !
Как объединить в одном столбце 3 разных поля базы ?


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 568
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 05.06.15 12:37. Заголовок: Andrey пишет: Как о..


Andrey пишет:

 цитата:
Как объединить в одном столбце 3 разных поля базы ?



:bData
http://clipper.borda.ru/?1-1-0-00000427-000-10001-0-1432482733
твой пост N 4138

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




Пост N: 4223
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 05.06.15 13:25. Заголовок: Haz пишет: твой пос..


Haz пишет:

 цитата:
твой пост N 4138


Это через кодовый блок. Я это помню.
bBlock := "{ || MEMOLINE("+ALIAS()+"->"+cField+","+HB_NTOS(LEN(cStr))+",1) }"
oBrw:aColumns[nJ]:bData := &( bBlock )

А как написать для такой конструкции, которая в примерах (хотя потом там тоже будет кодовый блок):
// создать 2-ю колонку
ADD COLUMN TO oBrw3 HEADER "Номер" + CRLF + "заказа" ;
DATA FieldWBlock( "NNZA", Select() ) ;
PICTURE "@Z 9999/99" ;
SIZE 100 ;
ALIGN DT_CENTER,DT_CENTER,DT_RIGHT ; // cells, header, footer
COLORS CLR_BLACK, MyRGB(aBack2)

// создать 3-ю колонку
ADD COLUMN TO oBrw3 HEADER "Дата" + CRLF + "заказа" ;
DATA FieldWBlock( "DATEZA", Select() ) ;
PICTURE "99.99.99" ;
SIZE 90 ;
ALIGN DT_CENTER,DT_CENTER,DT_RIGHT ; // cells, header, footer
COLORS CLR_BLACK, MyRGB(aBack2)

// создать 4-ю колонку
ADD COLUMN TO oBrw3 HEADER "Время" + CRLF + "заказа" ;
DATA FieldWBlock( "TIMEZA", Select() ) ;
PICTURE "99:99" ;
SIZE 80 ;
ALIGN DT_CENTER,DT_CENTER,DT_RIGHT ; // cells, header, footer
COLORS CLR_BLACK, MyRGB(aBack2)


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 569
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 05.06.15 13:50. Заголовок: Andrey пишет: А как..


Andrey пишет:

 цитата:
А как написать для такой конструкции


так и писать - через блок кода

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




Пост N: 4224
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 05.06.15 17:25. Заголовок: Сделал так: ADD..


Сделал так:
ADD COLUMN TO oBrw3 HEADER "Номер" + CRLF + "Дата" + CRLF + "Время" ;
SIZE 120 ;
ALIGN DT_CENTER,DT_CENTER,DT_RIGHT ; // cells, header, footer
COLORS CLR_BLACK, MyRGB(aBack2) ;
DATA { || TRANSFORM( (Alias())->NNZA, "9999/99" ) + CRLF + ;
DTOC( (Alias())->DATEZA ) + CRLF + ;
TRANSFORM( (Alias())->TIMEZA, "99:99" ) + CRLF } // multi-line feature on cells

Почему то третью строчку не показывает ?
Может еще что-то включить нужно ?

PS. TIMEZA - это числовое поле, 4 знака чч:мм

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4874
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 05.06.15 17:34. Заголовок: Andrey пишет: Почем..


Andrey пишет:

 цитата:
Почему то третью строчку не показывает ?


не влезла видимо , поширше сделай высоту строки.

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




Пост N: 4225
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 05.06.15 17:45. Заголовок: Dima пишет: не влез..


Dima пишет:

 цитата:
не влезла видимо , поширше сделай высоту строки.


Не знаю как ?
Там только ширину можно делать: SIZE 120
Где в TBROWSE задается высота строк ?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4875
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 05.06.15 17:59. Заголовок: возможно это oBrw:nH..


возможно это oBrw:nHeightCell

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




Пост N: 4226
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 05.06.15 18:04. Заголовок: Dima пишет: возможн..


Dima пишет:

 цитата:
возможно это oBrw:nHeightCell


Точно ! Нашел у себя в коде, добавил 50 и всё показывается !
Спасибо Дима, выручил !

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




Пост N: 4235
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 10.06.15 12:50. Заголовок: Всем привет ! Работа..


Всем привет !
Работаю с Excel из Tbrowse.
// вызов стандартой функции МиниГуи \MiniGUI\SOURCE\TsBrowse\h_tbrowse.prg
&oBrw:Excel2(cFile, lActivate, NIL, "_"+Space(70)+cTitle, lSave )
Как получить высоту строки таблицы и изменить её на нужную ?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 571
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 10.06.15 13:28. Заголовок: так nHeight := oSh..


так
nHeight := oSheet:Rows(1):RowHeight
oSheet:Rows(1):RowHeight := 40

PS: Правда это касается Excel объекта открытого по OLE

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




Пост N: 4236
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 10.06.15 14:20. Заголовок: А как достучаться до..


А как достучаться до этого oSheet: ?

&oBrw:Excel2(cFile, lActivate, NIL, "_"+Space(70)+cTitle, lSave )
в этой функции Excel2() файл автоматом открывается:
If lActivate
ShellExecute( 0, "Open", If( lSave, cFile, cWork ),,, 3 )
EndIf

Т.е. я к нему доступ уже не имею ?
Как тогда поступить ?



Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 572
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 10.06.15 14:22. Заголовок: Andrey пишет: Как т..


Andrey пишет:

 цитата:
Как тогда поступить


не открывать автоматом, а просто сохранять
сохраненный файл открыть олей

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




Пост N: 4237
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 10.06.15 14:35. Заголовок: Спасибо Haz ! :sm20..


Спасибо Haz !

Там еще есть интересный метод ExcelOle(). Буду пробовать его....

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 573
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 10.06.15 15:16. Заголовок: Andrey пишет: Там е..


Andrey пишет:

 цитата:
Там еще есть интересный метод ExcelOle()



Интересен в нем подход, позволяющий существенно ускорить вывод. Сам по себе ОLE сильно задумчивый если по одной ячейке обрабатывать , этот метод работает блоками, т.е. за один вызов оля обрабатывает много ячеек.
В остальном - обычная работа через олю



Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 148 , стр: 1 2 3 4 5 6 7 8 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 28
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет