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




Пост N: 251
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 14.02.07 15:01. Заголовок: Нужен обработчик TBROWSE


Всем привет и всех с прадником !

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

Заранее спасибо за ответ.

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 9 [только новые]


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




Пост N: 252
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 15.02.07 15:32. Заголовок: Re:


Если жалко, то дайте пожалуйста пример для работы с мышкой в TBROWSE.

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




Пост N: 519
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 17.03.08 23:11. Заголовок: Так что никто не раб..


Так что никто не работает с мышкой в TBROWSE ?
А то нашел один пример, только там нельзя мышкой скакать по столбцам !


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


Пост N: 108
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 18.03.08 08:55. Заголовок: Как найдешь, сообщи...


Как найдешь, сообщи. Мне то же надо. Паша как то выкладывал подходы к решению проблемы

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




Пост N: 854
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 18.03.08 11:37. Заголовок: CASE ( nKe..


CASE ( nKey == K_LBUTTONDOWN .or. nKey == K_LDBLCLK )
mBrowse(oB)
...

STATIC FUNCTION mBrowse(oB)
// -------------------------------------------------------------
// Обработка нажатия мышки для TBrowse - обьекта oB
// -------------------------------------------------------------
Local rowMouse := MRow(), colMouse := MCol()
Local cCol := Col(), cRow := Row()
Local newCol, newRow

IF rowMouse >= oB:nTop .and. rowMouse <= oB:nBottom .and.;
colMouse >= oB:nLeft .and. colMouse <= oB:nRight

WHILE colMouse < cCol .or. colMouse > cCol + oB:colWidth(oB:colPos) + 1
IF colMouse < cCol
IF oB:colPos == 1
EXIT
ENDIF
cCol -= oB:colWidth(oB:colPos - 1) + 1
oB:left()
ELSE
IF oB:colPos == oB:colCount
EXIT
ENDIF
cCol += oB:colWidth(oB:colPos) + 1
oB:right()
ENDIF
ENDDO

IF rowMouse != cRow
oB:deHilite()
oB:rowPos += rowMouse - cRow
#ifdef __HARBOUR__
if oB:rowPos < 1
oB:rowPos := 1
endif
#endif
ELSE
Keyboard CHR(K_ENTER)
ENDIF

ELSEIF colMouse == oB:nRight + 1
IF rowMouse == oB:nTop + 2
oB:up()
ELSEIF rowMouse == oB:nBottom - 2
oB:down()
ENDIF

ENDIF
RETURN NIL


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




Пост N: 520
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 21.03.08 16:42. Заголовок: Спасибо Павел !..


Спасибо Павел !

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




Пост N: 521
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 21.03.08 16:54. Заголовок: После глобального по..


После глобального поиска по архивам, сетям и консультаций собрал наконец-то рабочий Tbrowse&Mouse !
Кому нужно вышлю мылом вместе с bat-никами для сборки, а так выкладываю здесь.
Пришлось еще и кучу дополнительных функций тащить. Кому они не понадобится, сами отрезайте.

Спасибо всем живущим на этом сайте за помощь !

//////////////////////////////////////////////////////////////////////
//
// Tbrows-Demo.PRG
//
// Copyright:
// Verchenko Andrey, 30195@mail.ru , (c) 2008. All rights reserved.
// Adaptation demo Tbrowse and mouse for console of [x]Harbour.
//
// Contents:
// Tbrowse&Mouse demo-application for Clipper, [x]Harbour
//
//////////////////////////////////////////////////////////////////////
// Собрана из различных источников.
// Отдельное спасибо Сидорову Александру.
//////////////////////////////////////////////////////////////////////

#include "inkey.ch"
#include "setcurs.ch"
#include 'tbrowse.CH'
#include "set.ch"
#include "button.ch"

MEMVAR num_color, i_color, nColorBrowse
FIELD FirstName, LastName, Age, Date, Rate, Logik

FUNCTION MAIN()
LOCAL nI, aPoleField, aPoleName, aPolePict, aWinTbrow
LOCAL cColWin , cColSpr , cColTbrow, cColScroll, cTemp, nRet
LOCAL aKeyMouse := {}, aColorUsl := {}, nWidth
PUBLIC SetLang

// Для GTWVT - терминала раскоментировать эти строки,
// а для GTWIN - наоборот закоментировать.
/*
if hb_gt_version() = 'WVT'

nWidth := Wvt_GetScreenWidth()
// Установить по умолчанию
DO CASE
CASE nWidth >= 1024
Wvt_SetFont( "Lucida Console", 18 )
//Wvt_SetFont( 'Courier New', 18 )
//Wvt_SetFont('Terminal',18,10)
CASE nWidth >= 800
Wvt_SetFont('System',16,-8)
OTHERWISE
Wvt_SetFont('Terminal',12,6)
ENDCASE
Wvt_SetCodePage(255) // #define OEM_CHARSET 255 - from wingdi.h

//---------- windows title and icon for xHarbour -----------
GTInfo( 26, "Tbrowse and mouse" )
//GTInfo( 28, "Main_ICO" )
endif
*/
#ifndef __HARBOUR__
M->SetLang := "CLIPPER"
#else
M->SetLang := "HARBOUR"
#endif

SET SCOREBOARD OFF
SET TALK OFF
SET DELETED ON
SETMODE(24,80)
SETCOLOR("15/1")
CLEAR SCREEN
?? " Верченко Андрей, 30195@mail.ru , (c) 2008. All rights reserved."
? " Adaptation demo Tbrowse and mouse for console of [x]Harbour."

aWinTbrow := { 3, 10, 21, 69 } // Координаты DbEdit
cColTbrow := "14/0,0/12" // Цвет DbEdit в GET'e
cColSpr := "15/2" // Цвет окна и символов DbEdit
cColWin := "0/15" // Цвет заголовка окна
cColScroll:= "0/15" // Цвет бегунков
SetColor( cColSpr )
@ aWinTbrow[ 1 ], aWinTbrow[ 2 ], aWinTbrow[ 3 ], aWinTbrow[ 4 ] BOX "╔═╗║╝═╚║ "
@ aWinTbrow[ 1 ], aWinTbrow[ 2 ] SAY PadC( "Пример редактирования Tbrowse", ;
aWinTbrow[ 4 ] - aWinTbrow[ 2 ]+1 ) COLOR( cColWin )

LINE23() // строка-помощь клавиш управления
// Описание координат кнопок для мышки внизу экрана
AAdd( aKeyMouse, { MaxRow(), 2, MaxRow(), 4, K_DEL } )
AAdd( aKeyMouse, { MaxRow(), 6, MaxRow(), 8, K_INS } )
AAdd( aKeyMouse, { MaxRow(), 32, MaxRow(), 40, K_F5 } )
AAdd( aKeyMouse, { MaxRow(), 42, MaxRow(), 54, K_F8 } )
AAdd( aKeyMouse, { MaxRow(), 70, MaxRow(), 78, K_ESC } )

// Цвет условия в Tbrowse
AAdd( aColorUsl, { { || Age == 0 }, "12/2" } ) // неопред.
AAdd( aColorUsl, { { || Age > 0 .AND. Age <= 8 }, "10/2" } ) // дошколник
AAdd( aColorUsl, { { || Age > 8 .AND. Age <= 17 }, "14/2" } ) // школьник
AAdd( aColorUsl, { { || Age > 17 .AND. Age <= 50 }, "15/2" } ) // работает
AAdd( aColorUsl, { { || Age > 50 }, "0/2" } ) // пенсионер

aPoleField := { "FirstName" , "LastName" , "Age" , "Date" , "Rate" , "Logik" }
aPoleName := { ";Фамилия" , ";Имя" , ";Возраст" , "Дата;рождения", ";???" , ";Да или нет" }
aPolePict := { "@S15 "+REPLICATE("x",20),"@S12 "+REPLICATE("x",20), "@Z 999", "99.99.99" , "@Z 9999.99", "x" }

FOR nI := 1 TO Len( aPoleName )
// специально для Харбора, т.к. не выводит заголовок,
// если 1-знак ";"
cTemp := SubStr( aPoleName[ nI ] , 1 , 1 )
IF cTemp == ";"
aPoleName[ nI ] := " " + aPoleName[ nI ]
ENDIF
NEXT

// создадим тестовую базу
Create_Test_DBF()

USE TEST NEW
// следующие две строчки подключают мышку
Set( _SET_EVENTMASK, INKEY_ALL )
MSETCURSOR( .T. )

/* Синтаксис стандартного DbEdit'a
Dbedit(aWinTbrow[1]+1,aWinTbrow[2]+1,aWinTbrow[3]-1,aWinTbrow[4]-2,;
aPoleField, 'FuncUSER',aPolePict, aPoleName,"┬─","│")
*/
// Реализация DbEdit'a через Tbrowse с мышкой
nRet := MyDbEdit( aWinTbrow[ 1 ] + 1, aWinTbrow[ 2 ] + 1, aWinTbrow[ 3 ] - 1, aWinTbrow[ 4 ] - 2, ;
aPoleField, "Not-Func", aPolePict, aPoleName, "┬─", "│", ;
{ cColSpr, cColTbrow,cColScroll },;
aKeyMouse, aColorUsl )

USE
RETURN NIL
*= == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == FUNCTION MyDbEdit( nTop, nLeft, nBottom, nRight, aFields, cFuncEdit, aFieldPict, aFieldName,;
cSepar1, cSepar2, aColor, aKeyMouse , aColorUsl )
LOCAL cScr := SaveScreen(,,,, ), nCursor := SetCursor( SC_NONE )
LOCAL oBrowse, oColumn, nKey, cStatus, lCont, nColPair, nColPair2
LOCAL nTemp, nI, bTemp, nRec, nBarScll
LOCAL aScroll, aScrollGrz, cUslColor
LOCAL nRet, cTekCol, y, x, nRetMouse, GETLIST:={}
LOCAL cTbrColor := aColor[ 1 ], cGetColor := aColor[ 2 ] // Цвет GETa
LOCAL cColScroll := aColor[ 3 ] // Цвет бегунков
PRIVATE num_color, i_color, nColorBrowse

/* задание символов рамки" */
oBrowse := TBrowseDB( nTop, nLeft, nBottom, nRight )
//oBrowse:colSep := " "
oBrowse:colSep := cSepar2
oBrowse:headSep := cSepar1
//oBrowse:headSep := "──"
//oBrowse:border := '─│─└│'

/* задание цветов TBrowse-объекта */
oBrowse:colorSpec := cTbrColor + "," + cGetColor + ", 0/14 " //, W+/N, GR+/B, R+/B"+cUslColor

// создание цвета для кодоблока по условию
cUslColor := ""
IF LEN( aColorUsl ) > 0
FOR nI := 1 TO Len( aColorUsl )
cUslColor := cUslColor + aColorUsl[ nI, 2 ] + ","
NEXT
ENDIF
// подсчет уже существующего кол-ва цветов в массиве
nColorBrowse := NUMAT( "/", oBrowse:colorSpec )
oBrowse:colorSpec := oBrowse:colorSpec + ", " + cUslColor

DBGoTop()
FOR nI := 1 TO Len( AFields )
bTemp := AFields[ nI ]
oColumn := TBCOLUMNNEW( aFieldName[ nI ], { || &bTemp } )
oColumn:Picture := aFieldPict[ nI ]
IF LEN( aColorUsl ) > 0
// назначение цветов по кодоблоку
oColumn:colorBlock := { || i_color := 0, num_color := 1, ;
AEval( aColorUsl, { | x | i_color ++, IIf( Eval( x[ 1 ] ), num_color := i_color, ) } ), { num_color + nColorBrowse, 2 } }
ENDIF
oBrowse:addColumn( oColumn )
NEXT

/* задание бегунков TBrowse-объекта */
nTemp := 0
// подсчет кол-ва строк в заголовке полей
FOR nI := 1 TO Len( aFieldName )
nTemp := Max( NUMAT( ";", aFieldName[ nI ] ), nTemp )
NEXT
aScroll := ScrollBarNew( oBrowse:nTop + nTemp + 1, oBrowse:nRight + 2, oBrowse:nBottom , cColScroll, 1 )
ScrollBarDisplay( aScroll )

nTemp := 0
// подсчет кол-ва столбцов для формата
FOR nI := 1 TO oBrowse:freeze
nTemp := nTemp + Len( aFieldPict[ nI ] ) + 1
NEXT
aScrollGrz := ScrollBagNew( oBrowse:nBottom + 1 , oBrowse:nLeft + nTemp , oBrowse:nRight, cColScroll, 1 )
// Рисуем нижний индикатор, если кол-во полей > 3
IF Len( aFields ) > 3
ScrollBagDisplay( aScrollGrz )
ENDIF

CLEAR TYPEAHEAD

// назначаем на нажатие левой кнопки мышки блок кода,
// который будет отработан по этому событию
oBrowse:SetKey( K_LBUTTONDOWN ;
, { | o | ( myMouseTB( o, MROW(), MCOL() ) ):refreshAll(), TBR_CONTINUE } )

oBrowse:SetKey( K_LDBLCLK ;
, { | o | ( myMouseTB( o, MROW(), MCOL() ) ):refreshCurrent(), TBR_EXIT } )

oBrowse:SetKey( K_ENTER ;
, { | o | ( myMouseTB( o, MROW(), MCOL() ) ):refreshCurrent(), TBR_EXIT } )

oBrowse:SetKey( K_ESC ;
, { | o | ( myMouseTB( o, MROW(), MCOL() ) ):refreshCurrent(), TBR_EXIT } )

//oBrowse:SETKEY(K_ENTER , { |oBrowse, nKey| TBR_EXCEPTION } )
oBrowse:SetKey( K_ENTER , { | oBrowse, nKey | TBR_EXIT } )
oBrowse:SetKey( K_ESC , { | oBrowse, nKey | TBR_EXIT } )
oBrowse:SetKey( K_F5 , { | oBrowse, nKey | K_F5 } )
oBrowse:SetKey( K_F8 , { | oBrowse, nKey | K_F8 } )
oBrowse:SetKey( K_F9 , { | oBrowse, nKey | K_F9 } )
oBrowse:SetKey( K_F10 , { | oBrowse, nKey | K_F10 } )
oBrowse:SetKey( K_F11 , { | oBrowse, nKey | K_F11 } )
oBrowse:SetKey( K_F12 , { | oBrowse, nKey | K_F12 } )
oBrowse:SetKey( K_INS , { | oBrowse, nKey | K_INS } )
oBrowse:SetKey( K_DEL , { | oBrowse, nKey | K_DEL } )
oBrowse:SetKey( K_F1 , { | oBrowse, nKey | K_F1 } )
oBrowse:SetKey( K_ALT_X , { | oBrowse, nKey | K_ALT_X } )
oBrowse:SetKey( K_ALT_M , { | oBrowse, nKey | K_ALT_M } )

// Хочу чтоб при открытии базы КУРСОР стоял на 2 колонке
#ifndef __HARBOUR__
KEYBOARD Chr( K_RIGHT )
#else
HB_KeyPut( K_RIGHT )
#endif

/* главный цикл просмотра */
lCont := .T.
DO WHILE lCont
/* Устанавливает текущей строке стандартные цвета */
oBrowse:refreshCurrent()

DispBegin()
/* стабилизация */
DO WHILE ! oBrowse:stabilize()
ENDDO
//oBrowse:forceStable()

// Выделение цветом текущей строки
nColPair := 2
nColPair2 := 4

oBrowse:colorRect( { oBrowse:rowPos, 1, oBrowse:rowPos, oBrowse:colCount }, ;
{ nColPair, nColPair2 } )
oBrowse:hilite()

// Повторная стабилизация
//DO WHILE .NOT. oBrowse:stabilize()
//ENDDO
//oBrowse:ForceStable()
DispEnd()

/* сигналы о начале и конце базы */
IF oBrowse:hitBottom.OR.oBrowse:hitTop
Tone( 500, 3 )
ENDIF

/* строка состояния */
x := Col() ; y := Row()
cStatus := "─" + LTrim( Str( ORDKEYNO() ) ) + '/' + LTrim( Str( ORDKEYCOUNT( 1 ) ) ) + "─"
cTekCol := NTOCOLOR( SCREENATTR( nTop - 1, nRight - Len( cStatus ) - 2 ) )
@ nTop - 1, nRight - Len( cStatus ) - 2 SAY cStatus COLOR ( cTekCol )
// Полоски индикации
// Перерисовать указатель индикации
ScrollBarUpdate( aScroll, ORDKEYNO(), ORDKEYCOUNT(), .T. , cColScroll )
// Рисуем нижнию индикатор, если кол-во полей > 3
IF Len( aFieldName ) > 3
ScrollBagUpdate( aScrollGrz, oBrowse:colPos - oBrowse:freeze, oBrowse:colCount - oBrowse:freeze, .T. )
ENDIF
@ y, x SAY ""

/* Определение нажатия клавиши или мышки */
nKey := oBrowse:applykey( Inkey( 0, INKEY_ALL ) )

/* доп.обработка нажатий клавиш мышки */
IF LastKey() > 999
nRetMouse := Ask2Mouse( aKeyMouse, MROW(), MCOL() )
IF LEN(aKeyMouse) > 0
nRetMouse := Ask2Mouse( aKeyMouse, MROW(), MCOL() )
IF nRetMouse # 0
nKey := aKeyMouse[ nRetMouse, 5 ]
Inkey( 0.1 )
ENDIF
ENDIF
ENDIF

/* обработка нажатых клавиш */
DO CASE
CASE nKey == K_UP
oBrowse:up()
CASE nKey == K_DOWN
oBrowse:down()
CASE nKey == K_LEFT
oBrowse:Left()
CASE nKey == K_RIGHT
oBrowse:Right()
CASE nKey == K_PGUP
oBrowse:pageUp()
CASE nKey == K_PGDN
oBrowse:pageDown()
CASE nKey == K_HOME
//oBrowse:home() // - закоментировано, чтоб курсор не прыгал в 1 столбец
CASE nKey == K_END
oBrowse:END()
CASE nKey == K_CTRL_PGUP
oBrowse:goTop()
CASE nKey == K_CTRL_PGDN
oBrowse:goBottom()
CASE nKey == K_CTRL_LEFT
oBrowse:panLeft()
CASE nKey == K_CTRL_RIGHT
oBrowse:panRight()
CASE nKey == K_CTRL_HOME
oBrowse:panHome()
CASE nKey == K_CTRL_END
oBrowse:panEnd()

/* Обработка собственных клавиш */
CASE nKey == K_ESC .OR. ( nKey == - 1 .AND. LastKey() == K_ESC )
nKey := K_ESC
lCont := .F.

CASE nKey == K_F1
// Help()

CASE nKey == K_ALT_X
// QuitDos()

CASE nKey == K_ALT_M
// KeyMem()

CASE nKey == K_ENTER .OR. LastKey() == K_ENTER .OR. ;
( nKey == - 1 .AND. LastKey() == K_LDBLCLK )
nKey := K_ENTER
nI := oBrowse:colPos
// Можно воспользоваться станд. обработчиком - см. примеры Tbrowsa
// DoGet( oBrowse, cGetColor, { | oGet | EditIt( oGet ) } )
nRet := myKey_Edit( nI, aFields[ nI ], aFieldPict[ nI ], cGetColor )
IF nRet > 0
oBrowse:RefreshAll()
oBrowse:RefreshCurrent()
oBrowse:configure()
oBrowse:invalidate()
ENDIF
STABL_SP_POS( oBrowse ) // установка курсора на найденую запись !!!!

CASE nKey == K_INS
nRet := MyKey_INS()
IF nRet > 0
oBrowse:RefreshAll()
oBrowse:RefreshCurrent()
oBrowse:configure()
oBrowse:invalidate()
ENDIF
STABL_SP_POS( oBrowse ) // установка курсора на найденую запись !!!!

CASE nKey == K_DEL
nRet := MyKey_DEL()
IF nRet > 0
WHILE eof().OR.!DELETED()
EVAL(oBrowse:skipBlock,1)
ENDDO
STABL_SP_POS(oBrowse)
oBrowse:configure()
oBrowse:invalidate()
ENDIF

CASE nKey == K_F5
MyKey_F5()

CASE nKey == K_F8
MyKey_F8() // Сортировка.
STABL_SP_POS( oBrowse ) // установка курсора на найденую запись !!!!

CASE nKey == K_F9 // Любая ваша функция
//nRet := MyKey_F9()

CASE nKey == K_F10 // Любая ваша функция
//nRet := myKey_F10()

CASE nKey == K_F11 // Дубль
nRec := RecNo()
nRet := MyKey_F11()
IF nRet > 0
oBrowse:RefreshAll()
DBGoTo( nRec )
oBrowse:RefreshCurrent()
oBrowse:configure()
oBrowse:invalidate()
ENDIF
STABL_SP_POS( oBrowse ) // установка курсора на найденую запись !!!!

CASE nKey == K_F12 // Любая ваша функция
//nRet := myKey_F10()
ENDCASE
ENDDO

/* Восстановление курсора */
SetCursor( nCursor )
MSETCURSOR( .F. )

RETURN nKey
*= == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == STATIC FUNCTION myMouseTB ( o, r, c )
LOCAL nPos := o:hittest( r, c )
//@ 24, 0 say nPos
IF nPos == HTNOWHERE //мышь вне окна BROWSE
//tone(300,10)
ELSEIF nPos == HTTOPLEFT //верхний левый угол
o:panHome()
ELSEIF nPos == HTTOP //верхняя горизонтальная линия окна
o:up()
ELSEIF nPos == HTTOPRIGHT //и так далее
o:gotop()
ELSEIF nPos == HTRIGHT
o:Right()
ELSEIF nPos == HTBOTTOMRIGHT
o:gobottom()
ELSEIF nPos == HTBOTTOM
o:down()
ELSEIF nPos == HTLEFT
o:Left()
//elseif nPos==HTCELL
//o:()
ELSE
//эта системная функция вызывается по умолчанию
//она работает только внутри BROWSE окна и переводит курсор
//на нужную позицию
tbMouse( o, r, c )
ENDIF
RETURN o
// End of static Function
*= == == == == == == == == == == == == == == == == == == == == == == == == == == == == == ==
STATIC FUNCTION Ask2Mouse( aMenu, nYMouse, nXMouse )
LOCAL nRet := 0, nJM, nIM, aYMouse := { }, aXMouse := { }, nJ, nI
LOCAL nYtmp, nXtmp, lMouse := .F.

FOR nJM := 1 TO Len( aMenu )
IF nYMouse >= aMenu[ nJM, 1 ] .AND. nYMouse <= aMenu[ nJM, 3 ]
AAdd( aYMouse, nJM )
ENDIF
NEXT
FOR nIM := 1 TO Len( aMenu )
IF nXMouse >= aMenu[ nIM, 2 ] .AND. nXMouse <= aMenu[ nIM, 4 ]
AAdd( aXMouse, nIM )
ENDIF
NEXT
IF Len( aYMouse ) > 0 .AND. Len( aXMouse ) > 0
FOR nI := 1 TO Len( aYMouse )
nYtmp := aYMouse[ nI ]
FOR nJ := 1 TO Len( aXMouse )
nXtmp := aXMouse[ nJ ]
IF nYtmp == nXtmp
lMouse := .T.
nRet := nYtmp
ENDIF
NEXT
NEXT
ENDIF
RETURN nRet
*= == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == * Добавил Сидоров Александр
*= == == == == == == == == == == == == == == == == == == == == == == == == == == == == == ==
STATIC FUNCTION Stabl_sp_pos( b ) // установка курсора на найденую запись !!!!
LOCAL File_Pos := RecNo()
b:rowPos = 1 - Eval( b:skipBlock, 1 - b:RowPos ) //Выполнить любой Skipper(b:RowPos-b:RowCount)
goto File_Pos
b:RefreshAll()
DO WHILE ! b:stabilize()
ENDDO
RETURN NIL
*= == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == =
* Эта функция только в качестве примера
*= == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == STATIC FUNCTION MyKey_Edit( nI, cPoleField, cPolePict, cGetColor )
LOCAL cPoleEdit, GETLIST := {}, nRet := 1
LOCAL x, y, cTekColor := SetColor()

SetColor( cGetColor )
x := Col() ; y := Row()
LINE23EDIT()
cPoleEdit := FieldGet( FIELDNUM( cPoleField ) )
Set CURSOR ON
@ y, x GET FIELD->&cPoleField PICTURE cPolePict
READ
Set CURSOR OFF
LINE23()
IF LASTKEY() == K_ESC
nRet := 0
ENDIF

SetColor( cTekColor )
RETURN nRet
*= == == == == == == == == == == == == == == == == == == == == == == == == == == == == == ==
STATIC FUNCTION MyKey_F5()
LOCAL nRet := 0, cScr0 := SaveScreen(,,,,)

Alert( " Меню печати !" )

RestScreen(,,,, cScr0 )
RETURN nRet
*= == == == == == == == == == == == == == == == == == == == == == == == == == == == == == ==
STATIC FUNCTION MyKey_F8()
LOCAL nRet := 0, aMenu := { }, cScr0 := SaveScreen(,,, )

AAdd( aMenu, " 1-Сортировка " )
AAdd( aMenu, " 2-Сортировка " )
AAdd( aMenu, " Выход " )

nRet := Alert( " Выберите сортировку !;", aMenu )
IF nRet == 0 .OR. nRet == Len( aMenu )
nRet := ""
ELSE
ENDIF

RestScreen(,,,, cScr0 )
RETURN nRet
*= == == == == == == == == == == == == == == == == == == == == == == == == == == == == == ==
STATIC FUNCTION MyKey_INS()
LOCAL nK, nRet := 0

nK := Alert( "Вы хотите вставить новую запись?", { "[ Да ]", "[ Нет ]" } )
IF nK == 1
DBAppend()
nRet := 1
ELSE

ENDIF

RETURN nRet
*= == == == == == == == == == == == == == == == == == == == == == == == == == == == == == ==
STATIC FUNCTION MyKey_DEL()
LOCAL nK, nRet := 0

nK := ALERT( "Вы хотите удалить эту запись ?", { "[ Да ]", "[ Нет ]" } )
IF nK == 1
DELETE
nRet := 1
ELSE
ENDIF

RETURN nRet
*= == == == == == == == == == == == == == == == == == == == == == == == == == == == == == ==
STATIC FUNCTION MyKey_F9()
LOCAL nRet := 0
RETURN nRet
*= == == == == == == == == == == == == == == == == == == == == == == == == == == == == == ==
STATIC FUNCTION MyKey_F10( nI, cPoleField, cPolePict, cGetColor )
LOCAL nRet := 0
RETURN nRet
*= == == == == == == == == == == == == == == == == == == == == == == == == == == == == == ==
STATIC FUNCTION MyKey_F11()
LOCAL nK, nRet := 0

nK := ALERT( "Вы хотите продублировать эту запись?", { "[ Да ]", "[ Нет ]" } )
IF nK == 1
Tone( 800, 2 )
Alert( "Сделайте сами обработку !" )
ENDIF // K

RETURN nRet
*= == == == == == == == == == == == == == == == == == == == == == == == == == == == == == ==
STATIC FUNCTION MyKey_F12()
LOCAL nRet := 0
RETURN nRet
*= == == == == == == == == == == == == == == == == == == == == == == == == == == == == == ==
FUNCTION Line23Edit()
LOCAL cColor := SetColor()
LOCAL nY := MaxRow() , nX := 0 , nLen := MaxCol()
SetColor( "0/12" )
@ nY, nX SAY PadC( "", nLen+1 ) COLOR( "0/12" )
@ nY, nX SAY " ВВОДИТЕ. Ins-вставка Del-удаление <- -Удаление слева Enter <┘-конец ввода"
SetColor( "N*/R" )
@ nY, nX SAY " ВВОДИТЕ!"
SetColor( "GR+/R" )
@ nY, nX + 10 SAY "Ins"
@ nY, nX + 23 SAY "Del"
@ nY, nX + 37 SAY " <-"
@ nY, nX + 57 SAY "Enter <╜ "
SetColor( cColor )
RETURN NIL
*= == == == == == == == == == == == == == == == == == == == == == == == == == == == == == ==
FUNCTION LINE23()
LOCAL cColor := SetColor()
LOCAL nY := MaxRow() , nX := 0 , nLen := MaxCol()
SetColor( "0/15" )
@ nY, nX SAY PadC( "", nLen+1 ) color( "0/15" )
@ nY, nX SAY " Del/Ins-удаление/новая запись F5-Печать F8-сортировка F9/10/11/12 Esc-Выход"
@ nY, nX + 1 SAY "Del" COLOR( "GR+/R" )
@ nY, nX + 5 SAY "Ins" COLOR( "GR+/R" )
@ nY, nX + 31 SAY "F5" COLOR( "GR+/R" )
@ nY, nX + 41 SAY "F8" COLOR( "GR+/R" )
@ nY, nX + 56 SAY "F9/10/11/12" COLOR( "GR+/R" )
@ nY, nX + 69 SAY "Esc" COLOR( "GR+/R" )
SetColor( cColor )
RETURN NIL
*= == == == == == == == == == == == == == == == == == == == == == == == == == == == == == ==
* От: Alexander S.Kresin http://kresin.belgorod.su/rus/index.html
*= == == == == == == == == == == == == == == == == == == == == == == == == == == == == == ==
FUNCTION Create_Test_DBF()
LOCAL cTable := "test.dbf", aDbf, nI, n1, n2

aDbf := { { "FirstName", "C", 20, 0 }, ;
{ "LastName" , "C", 20, 0 }, ;
{ "Age" , "N", 3, 0 }, ;
{ "Date" , "D", 8, 0 }, ;
{ "Rate" , "N", 6, 2 }, ;
{ "Logik" , "L", 1, 0 } }

IF !FILE(cTable)
// если нет базы, то создать ее
DBCreate( cTable, aDbf )
USE ( cTable ) NEW
FOR nI := 1 TO 100

APPEND BLANK
n1 := hb_RandomInt( 80 )
n2 := hb_RandomInt( 50 )
REPLACE FIELD->Age WITH n1, ;
FIELD->Date WITH Date() - 365 * n2 + n1, ;
FIELD->Rate WITH 56.5 - n1 / 2
REPLACE FIELD->FirstName WITH "A" + Chr( 64 + n2 ) + PadL( nI, 10, '0' ), ;
FIELD->LastName WITH "B" + Chr( 70 + n2 ) + PadL( nI, 12, '0' ), ;
FIELD->Logik WITH ( ( FIELD->Age % 2 ) == 1 )
NEXT
USE
ENDIF

RETURN NIL
*= == == == == == == == == == == == == == == == == == == == == == == == == == == == == == ==
* Функция для совместимости с Clipper 5.3 добавил Павел Царенко
*= == == == == == == == == == == == == == == == == == == == == == == == == == == == == == ==
Function SETRC( nOldRow, nOldCol )
LOCAL nRow, nCol
if nRow == nil
nRow := Row()
endif
if nCol == nil
nCol := Col()
endif
SetPos(nRow, nCol)
RETURN NIL
*= == == == == == == == == == == == == == == == == == == == == == == == == == == == == == ==
*
* Далее для простоты включена программа Scrolbar.prg из
* стандартной поставки Clipper 5.3 и немного модифицированная
*
*= == == == == == == == == == == == == == == == == == == == == == == == == == == == == == ==
/***
*
* Scrolbar.prg
*
* Implements a scroll bar that can be updated as the cursor moves down
* in a TBrowse object, ACHOICE(), DBEDIT(), or MEMOEDIT()
*
* Copyright (c) 1993, Computer Associates International Inc.
* All rights reserved.
*
* NOTE: Compile with /n /w
*/

//start #include "Fileman.ch"

/***
*
* Fileman.ch
*
* Include file for Fileman.prg
*
* Copyright (c) 1993, Computer Associates International.
* All rights reserved.
*
*/

// The elements in aFileMan
#define FM_ROWTOP 1
#define FM_COLTOP 2
#define FM_ROWBOTTOM 3
#define FM_COLBOTTOM 4
#define FM_COLOR 5
#define FM_PATH 6
#define FM_RETURNFILE 7
#define FM_OLDCOLOR 8
#define FM_OLDSCREEN 9
#define FM_OLDSELECT 10
#define FM_ELEMENTS 10
// Для имени внешнего редактора ( 10-10-94 05:02pm )
#define FM_EDITOR "wd.com"

// The elements in aTab
#define TB_ROWTOP 1
#define TB_COLTOP 2
#define TB_ROWBOTTOM 3
#define TB_COLBOTTOM 4
#define TB_COLOR 5
#define TB_POSITION 6

#define TB_ELEMENTS 6

// Для горизонтального меню ( 07-24-94 12:10pm )
#define TB_LEFTROW 1
#define TB_LEFTCOL 2
#define TB_RIGHTROW 3
#define TB_RIGHTCOL ...

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




Пост N: 521
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 21.03.08 16:54. Заголовок: После глобального по..


... 4

// The main menu items
#define MN_LOOK 1
#define MN_COPY 2
#define MN_RENAME 3
#define MN_DELETE 4
#define MN_PRINT 5
#define MN_OPEN 6

// The Up and Down arrows, highlight and background char's for the thumb tab
#define TB_UPARROW Chr( 24 )
#define TB_DNARROW Chr( 25 )
#define TB_HIGHLIGHT Chr( 219 )
#define TB_BACKGROUND Chr( 176 )
// Для горизонтального меню ( 07-24-94 12:10pm )
#define TB_LEFTARROW Chr( 27 )
#define TB_RIGHTARROW Chr( 26 )

// The checkmark for the tagged files
#define FM_CHECK Chr( 251 )

// Other definitions
#define FM_SINGLEFRAME "┌─┐│┘─└│"
#define FM_SINGLEBORDER "├┤┬┴"
#define FM_DOUBLEFRAME "╔═╗║╝═╚║"
#define FM_DOUBLEBORDER "╠╣╦╩"
#define FM_LEFT 1
#define FM_RIGHT 2
#define FM_TOP 3
#define FM_BOTTOM 4
#define FM_HORIZONTAL 2
#define FM_VERTICAL 4

//end #include "Fileman.ch"



/***
*
* ScrollBarNew( <nTopRow>, <nTopColumn>, <nBottomRow>,
* <cColorString>, <nInitPosition> ) --> aScrollBar
*
* Create a new scroll bar array with the specified coordinates
*/
FUNCTION ScrollBarNew( nTopRow, nTopColumn, nBottomRow, ;
cColorString, nInitPosition ;
)

LOCAL aScrollBar := Array( TB_ELEMENTS )

aScrollBar[ TB_ROWTOP ] := nTopRow
aScrollBar[ TB_COLTOP ] := nTopColumn
aScrollBar[ TB_ROWBOTTOM ] := nBottomRow
aScrollBar[ TB_COLBOTTOM ] := nTopColumn

// Set the default color to White on Black if none specified
IF ( cColorString == NIL )
cColorString := "W/N"
ENDIF

aScrollBar[ TB_COLOR ] := cColorString

// Set the starting position
IF ( nInitPosition == NIL )
nInitPosition := 1
ENDIF

aScrollBar[ TB_POSITION ] := nInitPosition

RETURN ( aScrollBar )

/***
*
* ScrollBarDisplay( <aScrollBar> ) --> aScrollBar
*
* Display a scoll bar array to the screen
*
*/
FUNCTION ScrollBarDisplay( aScrollBar )

LOCAL cOldColor, cTop, cBottom
LOCAL nRow, nOldRow, nOldCol

cOldColor := SetColor( aScrollBar[ TB_COLOR ] )
nOldRow := Row()
nOldCol := Col()

IF M->SetLang == "HARBOUR"
cTop := "^" ; cBottom := "v"
ELSE
cTop := Chr( 30 ) ; cBottom := Chr( 31 )
ENDIF

// Draw the arrows
@ aScrollBar[ TB_ROWTOP ], aScrollBar[ TB_COLTOP ] SAY cTop // стрелка вверх
@ aScrollBar[ TB_ROWBOTTOM ], aScrollBar[ TB_COLBOTTOM ] SAY cBottom // стрелка вниз
// Draw the background
FOR nRow := ( aScrollBar[ TB_ROWTOP ] + 1 ) TO ;
( aScrollBar[ TB_ROWBOTTOM ] - 1 )
@ nRow, aScrollBar[ TB_COLTOP ] SAY Chr( 176 ) // линия прокрутки
NEXT

SetColor( cOldColor )
SETRC( nOldRow, nOldCol )

RETURN ( aScrollBar )

/***
*
* ScrollBarUpdate( <aScrollBar>, <nCurrent>, <nTotal>,
* <lForceUpdate> ) --> aScrollBar
*
* Update scroll bar array with new tab position and redisplay tab
**/
FUNCTION ScrollBarUpdate( aScrollBar, nCurrent, nTotal, lForceUpdate , cNewColor )

LOCAL cOldColor, nOldRow, nOldCol
LOCAL nNewPosition
LOCAL nScrollHeight := ( aScrollBar[ TB_ROWBOTTOM ] - ;
aScrollBar[ TB_ROWTOP ] ;
) - 1

IF ( nTotal < 1 )
nTotal := 1
ENDIF

IF ( nCurrent < 1 )
nCurrent := 1
ENDIF

IF ( nCurrent > nTotal )
nCurrent := nTotal
ENDIF

IF ( lForceUpdate == NIL )
lForceUpdate := .F.
ENDIF

IF ( cNewColor == NIL )
cNewColor := ""
ENDIF

cOldColor := SetColor( aScrollBar[ TB_COLOR ] )
nOldRow := Row()
nOldCol := Col()

// Determine the new position
nNewPosition := Round( ( nCurrent / nTotal ) * nScrollHeight, 0 )

// Resolve algorythm oversights
nNewPosition := IF( nNewPosition < 1, 1, nNewPosition )
nNewPosition := IF( nCurrent == 1, 1, nNewPosition )
nNewPosition := IF( nNewPosition == 1 .AND.nCurrent <> 1, 2, nNewPosition )
nNewPosition := IF( nCurrent == nTotal, nScrollHeight , nNewPosition )
nNewPosition := IF( nNewPosition >= nScrollHeight .AND.nCurrent <> nTotal, ;
nScrollHeight - 1, nNewPosition )

// Overwrite the old position (if different), then draw in the new one
IF ( nNewPosition <> aScrollBar[ TB_POSITION ] .OR. lForceUpdate )
@ ( aScrollBar[ TB_POSITION ] + aScrollBar[ TB_ROWTOP ] ), ;
aScrollBar[ TB_COLTOP ] SAY Chr( 176 ) // линия прокрутки
@ ( nNewPosition + aScrollBar[ TB_ROWTOP ] ), aScrollBar[ TB_COLTOP ] SAY ;
Chr( 219 )
// CHR( 254 )
IF Len( cNewColor ) > 0
@ ( nNewPosition + aScrollBar[ TB_ROWTOP ] ), aScrollBar[ TB_COLTOP ] SAY ;
Chr( 254 ) COLOR( cNewColor )
ENDIF

aScrollBar[ TB_POSITION ] := nNewPosition
ENDIF

SetColor( cOldColor )
SETRC( nOldRow, nOldCol )

RETURN ( aScrollBar )
/***
*
* ScrollBagNew( <nLeftRow>, <nLeftColumn>, <nRightColumn>,
* <cColorString>, <nInitPosition> ) --> aScrollBar
*
* Создает массив для полосы скролирования с необходимыми параметрами
*/
/***********************************************************
* ScrollBagNew() --> aScrollBar
* Параметры : nLeftRow - номер строки, в которой будет полоса скрол.
nLeftColumn - номер начального столбца полосы скрол.,
nRightColumn - номер конечного столбца полосы скрол.
cColorString - строка цвета, в кот. изображается полоса
nInitPosition - начальная позиция "бегунка"
* Возвращает: Массив
*/
FUNCTION ScrollBagNew( nLeftRow, nLeftColumn, nRightColumn, ;
cColorString, nInitPosition ;
)

LOCAL aScrollBar := Array( TB_ELEMENTS )

aScrollBar[ TB_LEFTROW ] := nLeftRow
aScrollBar[ TB_LEFTCOL ] := nLeftColumn
aScrollBar[ TB_RIGHTROW ] := nLeftRow
aScrollBar[ TB_RIGHTCOL ] := nRightColumn

// Set the default color to White on Black if none specified
IF ( cColorString == NIL )
cColorString := "W/N"
ENDIF

aScrollBar[ TB_COLOR ] := cColorString

// Set the starting position
IF ( nInitPosition == NIL )
nInitPosition := 1
ENDIF

aScrollBar[ TB_POSITION ] := nInitPosition

RETURN ( aScrollBar )

/***
*
* ScrollBagDisplay( <aScrollBar> ) --> aScrollBar
*
* Рисует горизонтальную полоску на экране
*
*/
FUNCTION ScrollBagDisplay( aScrollBar )

LOCAL cOldColor, cRight, cLeft
LOCAL nCol, nOldRow, nOldColumn

cOldColor := SetColor( aScrollBar[ TB_COLOR ] )
nOldRow := Row()
nOldColumn := Col()

IF M->SetLang == "HARBOUR"
cLeft := "<" ; cRight := ">"
ELSE
cLeft := Chr( 17 ) ; cRight := Chr( 16 )
ENDIF

// Draw the arrows
@ aScrollBar[ TB_LEFTROW ], aScrollBar[ TB_LEFTCOL ] SAY cLeft
@ aScrollBar[ TB_RIGHTROW ], aScrollBar[ TB_RIGHTCOL ] + 1 SAY cRight
// Draw the background
FOR nCol := ( aScrollBar[ TB_LEFTCOL ] + 1 ) TO ;
( aScrollBar[ TB_RIGHTCOL ] )
@ aScrollBar[ TB_LEFTROW ], nCol SAY Chr( 176 )
NEXT

SetColor( cOldColor )
SETRC( nOldRow, nOldColumn )

RETURN ( aScrollBar )

/***
*
* ScrollBagUpdate( <aScrollBar>, <nCurrent>, <nTotal>,
* <lForceUpdate> ) --> aScrollBar
*
* Прорисовывает новое положение бегунка
**/
FUNCTION ScrollBagUpdate( aScrollBar, nCurrent, nTotal, lForceUpdate )

LOCAL cOldColor, nOldRow, nOldColumn
LOCAL nNewPosition
LOCAL nScrollHeight

nScrollHeight := aScrollBar[ TB_RIGHTCOL ] - aScrollBar[ TB_LEFTCOL ]

IF ( nTotal < 1 )
nTotal := 1
ENDIF

IF ( nCurrent < 1 )
nCurrent := 1
ENDIF

IF ( nCurrent > nTotal )
nCurrent := nTotal
ENDIF

IF ( lForceUpdate == NIL )
lForceUpdate := .F.
ENDIF

cOldColor := SetColor( aScrollBar[ TB_COLOR ] )
nOldRow := Row()
nOldColumn := Col()

// Determine the new position
nNewPosition := Round( ( nCurrent / nTotal ) * nScrollHeight, 0 )

// Resolve algorythm oversights
nNewPosition := IF( nNewPosition < 1, 1, nNewPosition )
nNewPosition := IF( nCurrent == 1, 1, nNewPosition )
nNewPosition := IF( nNewPosition == 1 .AND.nCurrent <> 1, 2, nNewPosition )
nNewPosition := IF( nCurrent == nTotal, nScrollHeight, nNewPosition )
nNewPosition := IF( nNewPosition >= nScrollHeight .AND.nCurrent <> nTotal, ;
nScrollHeight - 1, nNewPosition ;
)

IF ( nNewPosition <> aScrollBar[ TB_POSITION ] .OR. lForceUpdate )
@ aScrollBar[ TB_LEFTROW ], ;
( aScrollBar[ TB_POSITION ] + aScrollBar[ TB_LEFTCOL ] ) ;
SAY Chr( 176 )
@ aScrollBar[ TB_LEFTROW ], ;
( nNewPosition + aScrollBar[ TB_LEFTCOL ] ) ;
SAY Chr( 254 )
aScrollBar[ TB_POSITION ] := nNewPosition
ENDIF

SetColor( cOldColor )
SETRC( nOldRow, nOldColumn )

RETURN ( aScrollBar )




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



Пост N: 1
Зарегистрирован: 14.02.08
ссылка на сообщение  Отправлено: 24.03.08 14:27. Заголовок: Andrey Пришлите при..


Andrey Пришлите пример на viton@tut.by заранее спасибо

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



Пост N: 17
Зарегистрирован: 12.07.06
ссылка на сообщение  Отправлено: 03.04.08 04:07. Заголовок: И мне пожалуйста тож..


И мне пожалуйста тоже на leksile@mail.ru
Заранее благодарю

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

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