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 [только новые]


gfilatov2002
moderator




Пост N: 1078
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 15.03.17 14:42. Заголовок: SergKis пишет: там ..


SergKis пишет:

 цитата:
там убрать над лишнее


Почистил также и другие неиспользуемые переменные,
и добавил в заголовке следующие строки для подавления ненужных предупреждений
 
FIELD KODS, NAME, ID

MEMVAR oBrw, aResult


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




Пост N: 1389
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 15.03.17 15:13. Заголовок: gfilatov2002 :sm36:..


gfilatov2002

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




Пост N: 1390
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 17.03.17 12:25. Заголовок: gfilatov2002 Может ..


gfilatov2002
Может в пример добавить использование функции ShowGetValid(...) (сообщение в getbox valid об ошибке) ?
Изменения такие
 
STATIC FUNC VldNewRec()
...
If lSek
Tone(500, 1)
ShowGetValid(GetControlHandle(cGkd, cWnd), "Kod dublicate", "Error", 'E') // можно 'E'\'I'\'W'
InkeyGui(4000)

_SetValue(cGkd, cWnd, GetNewKod())
_SetFocus(cGkd, cWnd)
...
и добавить
#pragma BEGINDUMP

#define _WIN32_WINNT 0x0600

#include <windows.h>

#include "hbapi.h"
#include "hbapicdp.h"

#include <commctrl.h>

typedef struct _tagEDITBALLOONTIP
{
DWORD cbStruct;
LPCWSTR pszTitle;
LPCWSTR pszText;
INT ttiIcon; // From TTI_*
} EDITBALLOONTIP, *PEDITBALLOONTIP;
#define EM_SHOWBALLOONTIP (ECM_FIRST + 3) // Show a balloon tip associated to the edit control
#define Edit_ShowBalloonTip(hwnd, peditballoontip) \
(BOOL)SNDMSG((hwnd), EM_SHOWBALLOONTIP, 0, (LPARAM)(peditballoontip))
#define EM_HIDEBALLOONTIP (ECM_FIRST + 4) // Hide any balloon tip associated with the edit control
#define Edit_HideBalloonTip(hwnd) \
(BOOL)SNDMSG((hwnd), EM_HIDEBALLOONTIP, 0, 0)

// ToolTip Icons (Set with TTM_SETTITLE)
#define TTI_NONE 0
#define TTI_INFO 1
#define TTI_WARNING 2
#define TTI_ERROR 3
#if (_WIN32_WINNT >= 0x0600)
#define TTI_INFO_LARGE 4
#define TTI_WARNING_LARGE 5
#define TTI_ERROR_LARGE 6
#endif // (_WIN32_WINNT >= 0x0600)

#define ECM_FIRST 0x1500 // Edit control messages

/*
ShowGetValid( hWnd, cText [ , cTitul ] [ , cTypeIcon ] )
*/

#if ( HB_VER_MAJOR == 3 )
#define _hb_cdpGetU16( cdp, fCtrl, ch) hb_cdpGetU16(cdp, ch )
#define _hb_cdpGetChar(cdp, fCtrl, ch) hb_cdpGetChar(cdp, ch)
#else
#define _hb_cdpGetU16( cdp, fCtrl, ch) hb_cdpGetU16(cdp, fCtrl, ch )
#define _hb_cdpGetChar(cdp, fCtrl, ch) hb_cdpGetChar(cdp, fCtrl, ch)
#endif

HB_FUNC( SHOWGETVALID )
{
int i,k;
char *tp, *s;
WCHAR Text[512];
WCHAR Title[512];

EDITBALLOONTIP bl;

PHB_CODEPAGE s_cdpHost = hb_vmCDP();

HWND hWnd = ( HWND ) hb_parnl( 1 );

if( ! IsWindow( hWnd ) ) return;


bl.cbStruct = sizeof( EDITBALLOONTIP );
bl.pszTitle = NULL;
bl.pszText = NULL;
bl.ttiIcon = TTI_NONE;

if( HB_ISCHAR( 2 ) ){

ZeroMemory( Text, sizeof(Text) );

k = hb_parclen(2);
s = (unsigned char *) hb_parc(2);
for(i=0;i<k;i++) Text = _hb_cdpGetU16( s_cdpHost, TRUE, s );
bl.pszText = Text;
}

if( HB_ISCHAR( 3 ) ){

ZeroMemory( Title, sizeof(Title) );

k = hb_parclen(3);
s = (unsigned char *) hb_parc(3);
for(i=0;i<k;i++) Title = _hb_cdpGetU16( s_cdpHost, TRUE, s );
bl.pszTitle = Title;
}


tp = ( char * ) hb_parc(4);

switch( *tp ){
case 'E' : bl.ttiIcon = TTI_ERROR_LARGE; break;
case 'e' : bl.ttiIcon = TTI_ERROR; break;

case 'I' : bl.ttiIcon = TTI_INFO_LARGE; break;
case 'i' : bl.ttiIcon = TTI_INFO; break;

case 'W' : bl.ttiIcon = TTI_WARNING_LARGE; break;
case 'w' : bl.ttiIcon = TTI_WARNING; break;

}


Edit_ShowBalloonTip( hWnd, &bl );

}

#pragma ENDDUMP


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




Пост N: 1391
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 17.03.17 12:29. Заголовок: PS опять пропустил ...


PS
опять пропустил [ i ]. повтор Скрытый текст


Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1079
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 17.03.17 13:50. Заголовок: SergKis пишет: Може..


SergKis пишет:

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


Благодарю за Ваши усилия, но, думаю, что в данном случае нет необходимости в усложнении этого примера

Кстати, эта функция уже использовалась в одном из примеров, которые прислал Андрей:
- в папке Basic\COMM_2


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




Пост N: 1074
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 17.03.17 16:10. Заголовок: SergKis пишет: Goto..


SergKis пишет:

 цитата:
GotoRec работатет нормально в тек. версии, немного не привычно - выталкивает первую строку экрана (привычнее последнюю)




Сергей, посмотрел исходнички и вот чего увидел:
GotoRec ничего не знает о том что сделали с базой ( добавили запись , фильтранули или просто скипнули куда то и пр)., соответственно проблематично отследить что на рабочем поле бровса появилать новая запись и выталкивать нужно вниз от новой записи.
Можно сохранить тот же ::RowPos т.к. он известен достоверно, но корректно сохранить первую строку я не придумал как.
Пример ( база отсортирована по отображаемому полю):
в базе есть пять значений C текущее , в бровсе 4 строки ( видим с A до D )
-----
A
B
C <-
D
-----
E

Добавили значение C1 через dbAppend и оно стало текущей записью вместо С и встало после С
Если сделать у С1 ::RowPos = 3 то вытолкнем А вверх за пределы бровса и проанализировать то нечего т.к. в данном случае мы знаем только
1) номер записи текущей после добавления
2) номер записи С как ::nLastPos
но не знаем какая была первой (если анализировать сверху ) или последней (если снизу) в бровсе, чтобы понять куда и что вытолкнуть , не заем сколько записей добавили или удали.
Все что можно сделать в GoToRec так это на выбор
1) Сохранить ::nRowPos
2) Сделать его = 1
2) Сделать его = ::nRowCount()


PS я бы предпочел вариант 1 и новый метод ::AddRec() который добавляет запись и правильно ее позиционирует с учетом установок до добавления. И то при совместной работе возможны сюрпризы типа ... рассчитал нужный RowPos , а тебя опередил кто то и впихнул пачку записей


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




Пост N: 1392
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 17.03.17 17:35. Заголовок: gfilatov2002 пишет э..


gfilatov2002 пишет
 цитата:
эта функция уже использовалась в одном из примеров, которые прислал Андрей


По тому примеру не очень ясно основное назначение функции - работа в valid GetBox-ов. Но если усложняет, то тогда не надо.

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




Пост N: 1393
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 17.03.17 17:46. Заголовок: Haz пишет возможны с..


Haz пишет
 цитата:
возможны сюрпризы типа ... рассчитал нужный RowPos , а тебя опередил кто то и впихнул пачку записей


Игорь, в тек. версии миниГуи GotoRec работает приемлемо и действительно управляется через установку nRowPos до GotoRec.
Просто в моей версии тсб 7.0 в базе и доводка мной до приближения к тсб 9.0.
Получается при всей похожести кода есть разница, но это уже моя головная боль.
GotoRec у себя уже подправил и управление через nRowPos тоже работает, может, в некоторых случаях, не так как в тсб 9.0, но похоже. Спасибо за участие.


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




Пост N: 1395
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 20.03.17 19:24. Заголовок: Для информации. В пр..


Для информации. В представленном выше примере, после добавления записи для включения Edit на след. колонке надо сделать :
 
If ! empty(aResult)
dbSelectArea(cAls)
dbAppend()
If ! NetErr() .and. RLock()
nRec := RecNo()
REPL KODS with aResult[1], ;
NAME with aResult[2]
if oBrw:nLen == oBrw:nRowCount()
oBrw:oHScroll:SetRange(0,0)
EndIf
oBrw:GotoRec(nRec)
nCol := oBrw:nColumn("NAM")
If nCol != oBrw:nCell
oBrw:nCell := nCol
oBrw:DrawSelect()
EndIf
oBrw:lChanged := .T.
oBrw:PostEdit(aResult[2], nCol, Nil )
DO EVENTS
oBrw:PostMsg(WM_KEYDOWN, VK_F4, 0)

EndIf
EndIf


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




Пост N: 1397
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 21.03.17 17:11. Заголовок: Сделал Tsb_addrecord..


Сделал Tsb_addrecord_3 с удалением F3. Скрытый текст


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




Пост N: 6336
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 21.03.17 17:56. Заголовок: SergKis пишет: nCo..


SergKis пишет:

 цитата:
nCol := oBrw:nColumn("NAM")


Вероятно нужно oBrw:nColumn("NAME")

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




Пост N: 1398
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 21.03.17 18:30. Заголовок: Dima пишет Вероятно ..


Dima пишет
 цитата:
Вероятно нужно oBrw:nColumn("NAME")


Да, c Григорием уже сегодня cписались http://clipper.borda.ru/?1-1-0-00000495-000-100-0-1490094063
и в пред. посте подправлено тоже

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




Пост N: 5329
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 22.03.17 12:13. Заголовок: Слушайте, а почему б..


Слушайте, а почему бы не добавить возможность в Tsb прорисовку пустой таблицы ?
Или фон таблицы сделать из картинки ?

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


Пост N: 675
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 22.03.17 14:53. Заголовок: пустой таблицы Нет ..



 цитата:
пустой таблицы


Нет данных или структура не определена ?

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




Пост N: 5330
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 22.03.17 16:30. Заголовок: Хочется несколько ва..


Хочется несколько вариантов:
1) Данные есть, структура определена, но при первом показе хочется открывать базу с пустыми графами таблицы.
2) Если нет данных по фильтру по базе - то показывается таблица без граф (разделительных линей нет) - не совсем красиво, юзер не понимает почему таблица пустая... Вот в этом случае и нужно выводить пустую таблицу или картинку-фон в таблице.

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




Пост N: 1075
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 22.03.17 18:04. Заголовок: Andrey пишет: Хочет..


Andrey пишет:

 цитата:
Хочется несколько вариантов:


А как объяснить пользователю почему курсор не идет ниже последней заполненной ??? там же еще много пустых

По сути вопроса сделать то очень легко
 
в METHOD Paint() после этого
If ::lAppendMode .and. ::nLen == ::nRowPos .and. ::nRowPos < nLines
::DrawLine( ++ ::nRowPos )
EndIf

Добавить это
If ::nLen < ::nRowCount()
n := ::nRowPos
m := (::cAlias)->(RecNo())
k := ::nLen
::nRowPos := ::nLen
(::cAlias)->(dbGoBottom())
(::cAlias)->(dbSkip(1))
While ::nRowPos < ::nRowCount()
::nLen++
::DrawLine( ++ ::nRowPos )
END
::nRowPos := n
(::cAlias)->(dbGoto(m))
::nLen := k
EndIf


ЗЫ и не забыть в начале метода объявить переменные local m,n,k
можно еще и флаг добавить ::lPhantomGrid := .F. чтобы код выше выполнялся только когда
obrw:lPhantomGrid := .T.


мне как сейчас больше нравится

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


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




Пост N: 6337
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 22.03.17 18:12. Заголовок: Haz пишет: мне как ..


Haz пишет:

 цитата:
мне как сейчас больше нравится


+1

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




Пост N: 1399
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 23.03.17 10:30. Заголовок: Haz пишет А как объя..


Haz пишет
 цитата:
А как объяснить пользователю почему курсор не идет ниже последней заполненной ??? там же еще много пустых


Полностью согласен
У себя делаю принудительно :nLen := 1 (при пустой базе\выборке) ставлю в колонках
oCol:lEmptyValToChar := .T.
и в процедурах на клавишах (кроме добавления новой записи) делаю проверку
IF (:cAlias)->( BOF() ) .and. (:cAlias)->( EOF() ); RETURN .F.
ENDIF
тогда одна пустая (Selected) линия есть всегда в тсб.
Еще можно оставаться на окне запроса к выборке, выдав сообщение "Нет дааных запроса" и
не входить в процедуру с тсб.

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




Пост N: 5332
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 23.03.17 12:08. Заголовок: Haz , SergKis - СПАС..


Haz , SergKis - СПАСИБО БОЛЬШОЕ !

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




Пост N: 5351
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 14.04.17 15:12. Заголовок: Всем привет ! Вот во..


Всем привет !
Вот возник вопрос - как закрасить виртуальный столбец другим цветом ?
А то этот столбец наверное использует цвет последнего столбца в таблице.




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