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



Пост N: 8
Зарегистрирован: 22.01.14
ссылка на сообщение  Отправлено: 02.10.14 20:48. Заголовок: Непонятки с Folderex


Начинающий пользователь FiveWin.
Начинаю писать новую программу и столкнулся с трудностью использования Folderex.

#include "FiveWin.ch"
#include "xbrowse.ch"

STATIC cPath, cPathDB, oFont, oFont2

FUNCTION Main()
Local oMainWindow, oFld, oBrw, oBar
Local n_Width:= 0, n_Height:=0
Private oBrwL, oTab

cPath := cFilePath(GetModuleFileName( GetInstance() ) ) + "\"
cPathDB := Lower(Alltrim(cPath)) + "DB\"

// создать нужные каталоги если их не хватает
IF DirChange( cPathDB ) > 0
MakeDir( cPathDB )
ELSE
DirChange( cPath )
ENDIF

SET CENTURY ON // дата полностью дд/мм/гггг
set epoch to 1960
SET DATE TO BRITISH
set(_SET_DATEFORMAT,"DD.MM.YYYY")
SET DELETED ON //фильтрация для удаленных записей (не показываем помеченные на удаление)
SET _3DLOOK ON
// Database driver.
RDDSETDEFAULT( "DBFCDX" )
REQUEST DBFCDX , DBFFPT
REQUEST HB_CODEPAGE_RU866 // Russian Windows CP-866
REQUEST HB_CODEPAGE_RU1251 // Russian Windows CP-1251

// Set default language
HB_CDPSelect( "RU1251" )

DefineOpen()

SetGetColorFocus()

oFont := TFont():New("Arial",0,-16,.F.,.F.,0,0,,.F.,.F.,.F.,204,0,0,0,,0)
oFont2 := TFont():New("Arial",0,-14,.F.,.T.,0,0,,.F.,.F.,.F.,204,0,0,0,,0)

DEFINE WINDOW oMainWindow FROM 5, 5 TO GetSysMetrics(1) - 35 , GetSysMetrics(0) - 5 PIXEL;
TITLE "Главное окно -"

DEFINE BUTTONBAR oBar OF oMainWindow 2010 SIZE 60, 60


n_Width:=oMainWindow:NWIDTH
n_Height:=oMainWindow:NHEIGHT

@ 45, 3 FOLDEREX oFld of oMainWindow SIZE n_Width - 21, n_Height - 137 PIXEL ADJUST;
PROMPT "&Один", "&Два", "&Три", "&Четыре", "&Пять", "Шесть", "Выход";
ACTION( If( nOption == 7, oMainWindow:End(), ;
MsgInfo( "Выбрано " + StrTran( ::aPrompts[ nOption ], "&", "" ) ) ) );
ON PAINT TAB PaintTab( Self, nOption );
ON CHANGE (ChangeDlg( oFld ), If( nOption == 7, If( MsgYesNo( "Завершить программу?","Ваш выбор:" ), ;
oMainWindow:End(), ( ::SetOption( nOldOption ), ::Refresh() ) ), ) );
ON PAINT TEXT( If( nOption == ::nOption .and. nOption == 2, CLR_YELLOW, CLR_BLACK ) ) ;
TOP OPTION 1 ALIGN AL_LEFT, AL_LEFT, AL_LEFT, AL_LEFT, AL_LEFT, AL_LEFT, AL_LEFT //;


oFld:lTransparent := .T.
oFld:nFolderHeight := 40
oFld:nSeparator := 0.1
oFld:bClrText := {| o, n | 128 }
oFld:oFont := oFont
oFld:nOption := 1
oFld:EnableTab( 1 )


// PAGE1( oFld) /// если раскоментарить происходит инициализация xBrowse
//PAGE2( oFld)
//PAGE3( oFld)
SET MESSAGE OF oMainWindow TO " Тестовая " KEYBOARD CLOCK DATE 2010

ACTIVATE WINDOW oMainWindow;
ON INIT oFld:Resize() //;

oFont:End()
oFont2:End()

Return nil

//--------------------------//
Function ChangeDlg( oFld )

Local nDlg:=oFld:nOption

Do Case
Case nDlg = 1
MsgInfo(nDlg)
PAGE1(oFld) /// почему не отрабатывает здесь
Case nDlg = 2
MsgInfo(nDlg)
Case nDlg = 3
MsgInfo(nDlg)
Case nDlg = 4
MsgInfo(nDlg)
Case nDlg = 5
MsgInfo(nDlg)
Endcase


Return nil


FUNCTION PAGE1(oFld)
Local oBrw, cAlias:='ATerm'

@ 10,20 XBROWSE oBrw OF oFld:aDialogs[ 1 ] ;
HEADER "Id_Kod", "nNom", "Наименование " ;
COLUMNS "Id_Kod", "nNom", "cNaim" ;
ALIAS 'ATerm' CELL LINES FOOTERS; // NOBORDER
ON DBLCLICK RowEdit( oBrw:CurrentRow() ) FONT oFont2 ;

oFld:aDialogs[ 1 ]:oClient = oBrw

oBrw:nMarqueeStyle := MARQSTYLE_HIGHLWIN7

oBrw:SetColor( CLR_BLACK, RGB( 232, 255, 232 ) )

oBrw:CreateFromCode()
oBrw:SetFocus()
oBrw:bLDblClick = { || ( oBrw:cAlias )->( RowEdit(oBrw:CurrentRow()) ) }

// ordscope(1,nil)
//ordscope(0,nil)
Return nil


/// корректировка текущей записи
static function RowEdit( oRow )
Return nil

FUNCTION PaintTab( o, nOption )
IF nOption == o:nOver .OR. nOption == o:nOption
o:SetAlphaLevel( nOption, 255 )
ELSE
o:SetAlphaLevel( nOption, 50 )
ENDIF
RETURN o:SetFldColors( o, nOption )

// =======================================================-открываем базы //
Function DefineOpen()
Local aArq:={}

If ! FILE( (cPathDB) + "Terminal.DBF" )
Aadd( aArq , { 'ID_KOD' , 'N' , 2 , 0 } )
Aadd( aArq , { 'NNom' , 'N' , 6, 0 } )
Aadd( aArq , { 'CNAIM' , 'C' , 40, 0 } )
Aadd( aArq , { 'cPrim' , 'M' , 10, 0 } )
DBCreate( (cPathDB) + "Terminal.DBF" , aArq )
Endif
Use (cPathDB) + "Terminal.DBF" Alias ATerm CODEPAGE "RU866" new shared

If ! File( (cPathDB) +'Terminal.cdx')
fLock()
Index on Str(ATerm->ID_KOD,2) + Str(ATerm->NNOM,6) tag ID_KOD to (cPathDB) +'Terminal.cdx'
Unlock
Endif
Set Index to (cPathDB) + 'Terminal.cdx'
ATerm->(ordsetfocus('ID_KOD'))

Return Nil


FiveWin 13.01 (спасибо ММК за ссылку)
Harbour 3.2.0dev (r1409051124)

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


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


Пост N: 172
Зарегистрирован: 29.05.10
ссылка на сообщение  Отправлено: 03.10.14 12:12. Заголовок: PAGE1(oFld) /// поче..


PAGE1(oFld) /// почему не отрабатывает здесь

А отрабатывать оно должно при каких-либо изменениях на фолдере- так у Вас написано. ( ON CHANGE ... )
Поэтому если (к примеру) выбрать любую страницу, а потом опять вернуться к первой , которая у вас открывается при инициилизации, то бровс "прорисуется".




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



Пост N: 9
Зарегистрирован: 22.01.14
ссылка на сообщение  Отправлено: 03.10.14 14:41. Заголовок: Добрый день. Я коне..


Добрый день.

Я конечно-же переключал страницы, никаких изменений не происходило -- бровзер не прорисовывался.
Если функцию PAGE1(oFld) изменить на:

FUNCTION PAGE1(oFld)
Local oBrw, cAlias:='ATerm' ,oWnd

DEFINE WINDOW oWnd TITLE "Edit " + Alias()
// MsgInfo("Page1")
@ 10,20 XBROWSE oBrw OF oFld:aDialogs[1] ;
HEADER "Id_Kod", "nNom", "Наименование " ;
COLUMNS "Id_Kod", "nNom", "cNaim" ;
ALIAS 'ATerm' CELL LINES FOOTERS;
ON DBLCLICK RowEdit( oBrw:CurrentRow() ) FONT oFont2

// oFld:aDialogs[ 1 ]:oClient = oBrw

oBrw:nMarqueeStyle := MARQSTYLE_HIGHLWIN7

oBrw:SetColor( CLR_BLACK, RGB( 232, 255, 232 ) )


oBrw:CreateFromCode()
oBrw:SetFocus()
// oBrw:bLDblClick = { || ( oBrw:cAlias )->( RowEdit(oBrw:CurrentRow()) ) }

oWnd:oClient = oBrw
oFld:aDialogs[ 1 ]:oClient = oBrw
oBrw:SetFocus()
// MsgInfo("Page1-End")
// ordscope(1,nil)
//ordscope(0,nil)
ACTIVATE WINDOW oWnd
Return nil


то бровсер прорисовывается, но появляется окошко.
Может я некорректно формирую бровзер, или в фолдере его прорисовку не в ON CHANGE вставлять?

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


Пост N: 173
Зарегистрирован: 29.05.10
ссылка на сообщение  Отправлено: 03.10.14 15:27. Заголовок: ZAlex пишет: Я коне..


ZAlex пишет:

 цитата:
Я конечно-же переключал страницы, никаких изменений не происходило -- бровзер не прорисовывался.
Если функцию PAGE1(oFld) изменить на:


Ваш пример работает без всяких изменений, НО сначало нажимает "два" или любую другую закладку, а потом "один". Появится окошко бровса и , естественно пустое , т.к. база пустая.

ZAlex пишет:

 цитата:
Может я некорректно формирую бровзер, или в фолдере его прорисовку не в ON CHANGE вставлять?


Да с Вами просто невозможно не согласиться :)

Все закладки желательно формировать сразу. В процессе работы их останется только менять.
Т.е. последовательность следующая -
Окно(диалог) , фолдер, заполнение страниц...
Например :

Tit:=" П Р И Г О Т О В Л Е Н И Е С М Е С И "
DEFINE DIALOG oDg TITLE Tit FROM 1,1 TO 37.5,98 ;
FONT oFon1 transparent

@ 0.1, 0.1 FOLDER oFld ;
PROMPTS " Смеси "," Состав " ;
SIZE 385, 275 PIXEL FONT oFon1 COLOR CLR_1,CLR_3 //263
oFld:aEnable={.T.,.T. }

Selec NS
Go top

@ 1,1 XBROWSE oBrw SIZE 367,260 PIXEL OF oFld:aDialogs[1] ALIAS "NS";
FOOTERS FASTEDIT LINES CELL ;
ON CHANGE ( VOku(NS->KOD,"Sm"),oBs:MakeTotals(),oBs:RefreshFooters(),oBs:Refresh(),oFld:aDialogs[2]:Refresh())
oBrw:nHeaderLines := 2

ADD oCol TO oBrw DATA NS->KOD HEADER "код " SIZE 75 CARGO "NS->KOD"
oCol:AddResource( "In1" )
oCol:AddResource( "In2" )
oCol:nHeadBmpNo := 2
oCol:oHeaderFont := oFon3
oCol:oDataFont := oFon3
oCol:bLClickHeader = {|nMRow,nMCol,nFlags,Self|Mumu(oBrw,1,Self,4,"NS")}

ADD oCol TO oBrw DATA OemToAnsi(NS->NAME) HEADER "Наименование" SIZE 425 CARGO "NS->NAME"
oCol:oHeaderFont := oFon3
oCol:nHeadStrAlign := AL_CENTER

..................................

Select Sm
ORDSCOPE(0,NS->KOD)
ORDSCOPE(1,NS->KOD)
Go top

@ 1,1 XBROWSE oBs SIZE 367,260 PIXEL OF oFld:aDialogs[2] ALIAS "Sm";
FOOTERS FASTEDIT LINES CELL //ON CHANGE Fresh(Al->kod)
oBs:nHeaderLines := 2
ADD oCol TO oBs DATA Sm->KODSM HEADER "код" SIZE 50 CARGO "Sm->KOD"
oCol:oDataFont := oFon3
oCol:AddResource( "In1" )
oCol:AddResource( "In2" )
oCol:nHeadBmpNo := 2
oCol:bLClickHeader = {|nMRow,nMCol,nFlags,Self|Mumu(oBs,1,Self,2,"Sm")}

ADD oCol TO oBs DATA Sm->NAME HEADER "наименование" SIZE 200 CARGO "Sm->NAme"
ADD oCol TO oBs DATA Sm->Ves HEADER "Вес" SIZE 60 CARGO "SM->VES"
oCol:oDataFont := oFon3
oCol:nHeadStrAlign := AL_CENTER
oCol:lTotal := .t.
oCol:nTotal := 0 // if we already know the total, we can assign the total value.
oCol:oFooterFont := oFon1

и т.д.

А ON CHANGE позволит реагировать на всякие изменения уже в процессе работы

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



Пост N: 10
Зарегистрирован: 22.01.14
ссылка на сообщение  Отправлено: 03.10.14 15:49. Заголовок: Спасибо за разъяснен..


Спасибо за разъяснение

ММК пишет:

 цитата:
Все закладки желательно формировать сразу. В процессе работы их останется только менять.
Т.е. последовательность следующая -
Окно(диалог) , фолдер, заполнение страниц...



Я так и предполагал, но у меня одна база(так сложилось) .
Алгоритм был такой:
nFilter:=1
Select ATerm
ordscope(0,Str(nFilter,2))
ordscope(1,Str(nFilter,2))

@ 10,20 XBROWSE oBrw OF oFld:aDialogs[1] HEADER "Id_Kod", "nNom", "Наименование " COLUMNS "Id_Kod", "nNom", "cNaim" ;
ALIAS 'ATerm' ....
.
.
.
nFilter:=2
ordscope(0,Str(nFilter,2))
ordscope(1,Str(nFilter,2))

@ 10,20 XBROWSE oBrw OF oFld:aDialogs[2] HEADER "Id_Kod", "nNom", "Наименование " COLUMNS "Id_Kod", "nNom", "cNaim" ;
ALIAS 'ATerm' ....
и т.д.

после прорисовки бровзера и переключения вкладок был активным последний ordscope во всех закладках.
Поэтому начал пробовать другой вариант.

Значит в моем случае, по первому варианту после заполнения страниц необходимо их
переформировывать с новым ordscope при переключении страницы?



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


Пост N: 174
Зарегистрирован: 29.05.10
ссылка на сообщение  Отправлено: 03.10.14 19:29. Заголовок: ZAlex пишет: Значит..


ZAlex пишет:

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


Если речь идет о какой-то конкретной задаче , а не просто примерчике тогда надо посмотреть на все чуток иначе.
Зачем семь закладок? Семь фильтров? Филтр произвольный или их всего шесть? Это к тому, что возможно и фолдер здесь лишний...
А сделать почти все можно ....

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



Пост N: 11
Зарегистрирован: 22.01.14
ссылка на сообщение  Отправлено: 04.10.14 11:00. Заголовок: Да, фильтров всего ш..


Да, фильтров всего шесть. Надо посмотреть на это по другому.
Спасибо, буду думать. Действительно, зачем здесь фолдер.


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


Пост N: 175
Зарегистрирован: 29.05.10
ссылка на сообщение  Отправлено: 09.10.14 18:05. Заголовок: ZAlex пишет: Спасиб..


ZAlex пишет:

 цитата:
Спасибо, буду думать. Действительно, зачем здесь фолдер.


Получилось?

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



Пост N: 12
Зарегистрирован: 22.01.14
ссылка на сообщение  Отправлено: 11.10.14 13:00. Заголовок: Да, все получилось, ..


Да, все получилось, сейчас экпериментирую с оформлением.

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

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