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


Пост N: 1511
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 06.02.20 17:17. Заголовок: Курсы ЦБ РФ на дату


потребовалось часто и быстро дергать курсы валют с ЦБ РФ , за пару часов написал функцию. Может кому сгодиться
на оригинальность не претендую , но работает . Возвращает массив значений на дату .
 
FUNC GetCBR( dDate)
LOCAL oHttp, cHtml, oNode, oDoc, oVal, oIterator, oCurrent
LOCAL aArray := {}
LOCAL cNumCode, cCharCode ,cNominal, cName, cValue
LOCAL aCur := {}
LOCAL cDate := StrZero(Day( dDate ),2,0) + "/" + StrZero(month( dDate ),2,0) + "/" + StrZero(year( dDate ),4,0)

oHttp := TIpClientHttp():new( "http://www.cbr.ru/scripts/XML_daily.asp?date_req=" + cDate )
IF ! oHttp:open()
MsgBox( "Connection error:", oHttp:lastErrorMessage() )
RETURN {}
ENDIF

cHtml := oHttp:readAll()
oHttp:close()
oDoc := TXMLDocument():New( cHtml, 8 ) // см. hbxml.ch
IF oDoc:nError != 0
MsgBox( "xml file parsing error " + hb_ntos( oDoc:nError ) )
RETURN {}
ENDIF

oVal := oDoc:findfirst( "Valute" )
IF oVal == NIL
MsgBox( "no Valute found" )
RETURN {}
ENDIF

DO WHILE .T.

oIterator := TXMLIterator():New( oVal )

DO WHILE .T.
oCurrent := oIterator:Next()
IF oCurrent == NIL
EXIT
ELSE

switch oCurrent:cName
case "CharCode"
cCharCode := oCurrent:cData
exit
case "NumCode"
cNumCode := oCurrent:cData
exit
case "Nominal"
cNominal := oCurrent:cData
exit
case "Name"
cName := oCurrent:cData
exit
case "Value"
cValue := CharRepl(",", oCurrent:cData, ".")
exit
end switch

ENDIF

ENDDO
AAdd(aCur, {cCharCode, cNumCode, Val(cNominal), cName, Val(cValue)} )
oVal := oDoc:findnext()
IF oVal == NIL
EXIT
ENDIF
ENDDO
RETURN aCur


Спасибо: 1 
ПрофильЦитата Ответить
Ответов - 46 , стр: 1 2 3 All [только новые]


администратор




Пост N: 7162
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 06.02.20 22:02. Заголовок: Haz :sm36:..


Haz


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




Пост N: 6575
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 07.02.20 07:31. Заголовок: Сделай этот пример д..


Сделай этот пример для МиниГуи !
Будет классно для всех.

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


Пост N: 1512
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 07.02.20 08:14. Заголовок: Andrey пишет: Сдела..


Andrey пишет:

 цитата:
Сделай этот пример для МиниГуи !

Сделаю сегодня

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





Пост N: 217
Зарегистрирован: 05.11.05
ссылка на сообщение  Отправлено: 07.02.20 11:54. Заголовок: Я в свое время делал..


Я в свое время делал нечто подобное, поэтому могу оценить. Красиво!

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


Пост N: 1513
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 07.02.20 13:08. Заголовок: rvu пишет: Сделай э..


Андрей:

 цитата:
Сделай этот пример для МиниГуи !


где то так

 
#include "minigui.ch"
#include "TSBrowse.ch"

REQUEST DBFCDX

Func Main()
LOCAL aStr := {}
LOCAL cDbf := "Rates"
LOCAL n := 0
LOCAL oWnd

SET OOP ON
SET DATE FORMAT 'DD.MM.YYYY'
rddSetDefault( 'DBFCDX' )

IF !hb_FileExists( cDbf + ".dbf" )
AAdd( aStr, { 'DATE', 'D', 8, 0 } )
AAdd( aStr, { 'CHARCODE', 'C', 3, 0 } )
AAdd( aStr, { 'NUMCODE', 'C', 3, 2 } )
AAdd( aStr, { 'NAME', 'C', 50, 0 } )
AAdd( aStr, { 'NOMINAL', 'N', 5, 0 } )
AAdd( aStr, { 'VALUE', 'N', 12, 4 } )

dbCreate( cDbf + ".dbf", aStr )

ENDIF

USE ( cDbf + ".dbf" ) ALIAS "RATES" EXCL NEW

IF hb_FileExists( cDbf + ".cdx" )
SET INDEX TO ( cDbf + ".cdx")
ELSE
INDEX ON DATE TAG "DATE" TO ( cDbf + ".cdx")
END

RATES->(OrdSetFocus("DATE"))

DEFINE WINDOW Form_0 ;
At 0, 0 ;
WIDTH 510 ;
HEIGHT 700 ;
TITLE "Exchange rate of the Central Bank of the Russian Federation" ;
MAIN ;
NOMAXIMIZE NOSIZE ;
ON RELEASE dbCloseArea( "RATES" )

oWnd := ThisWindow.Object

DEFINE STATUSBAR
STATUSITEM "" WIDTH 230 FONTCOLOR BLUE
END STATUSBAR

END WINDOW


DEFINE LABEL Label_1
PARENT Form_0
ROW 7
COL 5
WIDTH 300
HEIGHT 16
FONTNAME 'Arial Narrow'
FONTSIZE 9
FONTBOLD TRUE
FONTITALIC TRUE
FONTCOLOR {0,0,0}
VALUE "Exchange rate of the Central Bank of the Russian Federation on:"
END LABEL

DEFINE DATEPICKER Date_1
PARENT Form_0
ROW 2
COL oWnd:ClientWidth - 105
WIDTH 100
VALUE Date()
SHOWNONE .F.
FONTNAME 'Arial'
FONTSIZE 9
FONTBOLD FALSE
FONTITALIC FALSE
ON CHANGE { || SetDate( This.Value ) }
TABSTOP .F.
END DATEPICKER



DEFINE TBROWSE oBrw ;
AT 30, 1 ;
ALIAS "RATES" ;
OF Form_0 ;
WIDTH oWnd:ClientWidth - 2 ;
HEIGHT oWnd:ClientHeight - 30 - oWnd:StatusBar:Height;
GRID ;
COLORS { CLR_BLACK, CLR_BLUE } ;
FONT "MS Sans Serif" ;
SIZE 9

:aColSel := {"CHARCODE", "NUMCODE", "NAME", "NOMINAL", "VALUE"}

:LoadFields( TRUE )
:lCellBrw := TRUE
:nHeightCell := 20
:nWheelLines := 1
:nHeightHead := 25
:SetColor( { 11 }, { { || Rgb( 255, 255, 255 ) } } )
:nClrLine := RGB(180,180,180)//COLOR_GRID
:lNoPopUp := TRUE

:hBrush := CreateSolidBrush(255,255,240)

AEval( oBrw:aColumns, {| oCol| oCol:lFixLite := TRUE } )


:SetColor( { 2 }, { { || RGB(255,255,240) } } )
:SetColor( { 5 }, { { || RGB(0,0,0) } } )
:SetColor( { 6 }, { { |a,b,c| IF( c:nCell == b, -CLR_HRED , -RGB(128,225,225) ) } } )
:SetColor( { 12 }, { { |a,b,c| IF( c:nCell == b, -RGB(128,225,225) , -RGB(128,225,225) ) } } )
:SetColor( { 11 }, { { || RGB(0,0,0) } } )

:SetAppendMode( FALSE )
:SetDeleteMode( FALSE )

:SetColSize( "CharCode", 40)
:GetColumn( "CharCode" ):cHeading := "Char" + CRLF + "Code"
:GetColumn( "CharCode"):lEdit := FALSE
:GetColumn( "CharCode"):nAlign := DT_CENTER
:GetColumn( "CharCode"):cPicture := "@R XXX "

:SetColSize( "NumCode", 40)
:GetColumn( "NumCode" ):cHeading := "Num" + CRLF + "Code"
:GetColumn( "NumCode"):lEdit := FALSE
:GetColumn( "NumCode"):nAlign := DT_CENTER
:GetColumn( "NumCode"):cPicture := "@R XXX "

:SetColSize( "Name", 300)
:GetColumn( "Name" ):cHeading := "Name"
:GetColumn( "Name"):lEdit := FALSE
:GetColumn( "Name"):nAlign := DT_LEFT
:GetColumn( "Name"):cPicture := "@R " + Replicate("X", 50) + " "

:SetColSize( "Nominal", 50)
:GetColumn( "Nominal" ):cHeading := "Nominal"
:GetColumn( "Nominal"):lEdit := FALSE
:GetColumn( "Nominal"):nAlign := DT_CENTER
:GetColumn( "Nominal"):cPicture := "@R 99999 "

:SetColSize( "Value", 50)
:GetColumn( "Value" ):cHeading := "Value"
:GetColumn( "Value"):lEdit := FALSE
:GetColumn( "Value"):nAlign := DT_CENTER
:GetColumn( "Value"):cPicture := "@R 999.9999 "


END TBROWSE


SetDate( Date() )


Form_0.Center
Form_0.Activate

RETURN NIL

FUNC SetDate( dDate )
LOCAL aArray := {}

Rates->(OrdScope(0, NIL ))
Rates->(OrdScope(1, NIL ))


IF !Rates->(dbSeek(dDate))
aArray := GetCBR( dDate )
IF !Empty(aArray)
AEval( aArray, {|e| Rates->(DBAppend()),;
Rates->Date := dDate,;
Rates->CHARCODE := e[1],;
Rates->NUMCODE := e[2],;
Rates->NOMINAL := e[3],;
Rates->NAME := e[4],;
Rates->VALUE := e[5] ;
} )
END
END
Rates->(OrdScope(0, dDate ))
Rates->(OrdScope(1, dDate ))
Rates->(dbGoTop())
oBrw:Reset()

RETURN nil

FUNC GetCBR( dDate)
LOCAL oHttp, cHtml, oNode, oDoc, oVal, oIterator, oCurrent
LOCAL cNumCode, cCharCode ,cNominal, cName, cValue
LOCAL aArray := {}
LOCAL cDate := StrZero(Day( dDate ),2,0) + "/" + StrZero(month( dDate ),2,0) + "/" + StrZero(year( dDate ),4,0)


oHttp := TIpClientHttp():new( "http://www.cbr.ru/scripts/XML_daily.asp?date_req=" + cDate )
IF ! oHttp:open()
Form_0.StatusBar.Item(2) := "Connection error: " + oHttp:lastErrorMessage()
RETURN {}
ENDIF

Form_0.StatusBar.Item(2) := "Connection established"

cHtml := oHttp:readAll()
oHttp:close()
oDoc := TXMLDocument():New( cHtml, 8 ) // см. hbxml.ch
IF oDoc:nError != 0
Form_0.StatusBar.Item(1) := "xml parsing error " + hb_ntos( oDoc:nError )
RETURN {}
ENDIF

oVal := oDoc:findfirst( "Valute" )
IF oVal == NIL
Form_0.StatusBar.Item(1) := "xml parsing error " + "Key not found"
RETURN {}
ENDIF

DO WHILE .T.

oIterator := TXMLIterator():New( oVal )

DO WHILE .T.
oCurrent := oIterator:Next()
IF oCurrent == NIL
EXIT
ELSE

switch oCurrent:cName
case "CharCode"
cCharCode := oCurrent:cData
exit
case "NumCode"
cNumCode := oCurrent:cData
exit
case "Nominal"
cNominal := oCurrent:cData
exit
case "Name"
cName := oCurrent:cData
exit
case "Value"
cValue := CharRepl(",", oCurrent:cData, ".")
exit
end switch

ENDIF

ENDDO
AAdd(aArray, {cCharCode, cNumCode, Val(cNominal), cName, Val(cValue)} )
oVal := oDoc:findnext()
IF oVal == NIL
EXIT
ENDIF
ENDDO

IF !Empty(aArray)
Form_0.StatusBar.Item(1) := "Data successfully received"
END
RETURN aArray


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





Пост N: 218
Зарегистрирован: 05.11.05
ссылка на сообщение  Отправлено: 07.02.20 13:43. Заголовок: Надо, чтобы включили..


Надо, чтобы включили в примеры.

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



Пост N: 3029
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 07.02.20 17:29. Заголовок: Игорь, пример оч. хо..


Игорь, пример оч. хороший !
СПАСИБО !
Перенес в свою версию на ура.
Вот что получилось, в тек. версии hmg должно работать тоже, кроме ";" в HEADERS.
Текст совсем короткий Скрытый текст


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


Пост N: 1514
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 07.02.20 18:11. Заголовок: SergKis пишет: Вот ..


SergKis пишет:

 цитата:
Вот что получилось


Отлично оптимизировал
Добавь к
 
:GetColumn("Name"):nAlign := DT_LEFT
:GetColumn("Name"):nWidth := 300
:GetColumn("Name"):cPicture := "@R " + Replicate("X", 50) именно @R c пробелом(иногда и по два и более делаю) , будет отступ от вертикальной линии

ЗЫ я такими шаблонами вложенность строк в структурах показываю




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



Пост N: 3030
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 07.02.20 19:46. Заголовок: Haz пишет я такими ш..


Haz пишет
 цитата:
я такими шаблонами вложенность строк в структурах показываю


И как ты это делаешь ? меняешь oCol:cPicture налету ?
Я в :bDecode от кода строки (или еще от чего) добавляю определенное кол-во space(nN) для сдвига

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


Пост N: 1515
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 07.02.20 20:09. Заголовок: SergKis пишет: И ка..


SergKis пишет:

 цитата:
И как ты это делаешь ? меняешь oCol:cPicture налету ?


Да, для показа шаблон со сдвигом, в :prevedit меняю на обычный, в :editexit восстанавливаю сдвиг. Сам сдвиг храниться в спец поле indent, количество пробелов в шаблоне равно indent*2
Сначала тоже дополнял само значение слева пробелами, но потом понял что менять значение не удобно тк в редактирование значение шло с телефона пробелами, а пользователь мог удалить, а мог и нет., и не понять что он ввел

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



Пост N: 3031
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 07.02.20 20:38. Заголовок: Haz пишет Да, для по..


Haz пишет
 цитата:
Да, для показа шаблон со сдвигом, в :prevedit меняю на обычный, в :editexit восстанавливаю сдвиг. Сам сдвиг храниться в спец поле indent, количество пробелов в шаблоне равно indent*2


OK! Надо тоже переходить на такую схему

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


Пост N: 1516
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 07.02.20 21:12. Заголовок: SergKis пишет: шло ..


SergKis пишет:

 цитата:
шло с телефона пробелами, а


Откуда тут с "телефона" не набирал точно, хотя набирал с телефона

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




Пост N: 3917
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 08.02.20 16:35. Заголовок: Мне время от времени..


Мне время от времени приходится выбирать информацию из формата xml, делаю это с помощью класса Александра Кресина. Он есть и в поставке hmg
Разбор курсов валют ЦБР выглядел бы так:

Function ScanCBR(cHtml) 
Local oXml, oCurs
Local aCur := {}

if (oXml := HXmlDoc():ReadString(cHtml)) # nil .and. (oCurs := oXml:Find("ValCurs")) # nil
AEval(oCurs:aItems, {|o| AADD(aCur, {ItmValue(o, "NumCode"), ItmValue(o, "CharCode"), ItmValue(o, "Nominal"), ItmValue(o, "Name"), ItmValue(o, "Value")})})
endif
Return aCur

Static function ItmValue(oItem, cName)
Local oIt1 := oItem:Find(cName)
Return if(oIt1#nil.and.len(oIt1:aItems)>0, oIt1:aItems[1], "")

cHtml - строка, полученная с сайта Центробанка в примере Игоря

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



Пост N: 3032
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 08.02.20 18:41. Заголовок: Pasha пишет Мне врем..


Pasha пишет
 цитата:
Мне время от времени приходится выбирать информацию из формата xml, делаю это с помощью класса Александра Кресина. Он есть и в поставке hmg


Тоже использую этот класс и подтверждаю работает предложенный вариант
Вот, что получилось у меня (полностью перевел пример на свою lib), включат оба разбора cHtml
Скрытый текст


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




Пост N: 6579
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 09.02.20 01:22. Заголовок: SergKis пишет: Вот,..


SergKis пишет:

 цитата:
Вот, что получилось у меня (полностью перевел пример на свою lib), включат оба разбора cHtml


Не собирается...
Отправил проект к тебе
Собирал через MiniGUI 20.01 (Update 3)

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



Пост N: 3035
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 09.02.20 02:11. Заголовок: Andrey SergKis пише..


Andrey
SergKis пишет:
 цитата:
полностью перевел пример на свою lib


hmg надо доводить, если надо, конечно ?
Сам пример тут https://TransFiles.ru/oymu6

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




Пост N: 6580
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 09.02.20 14:40. Заголовок: SergKis пишет: hmg ..


SergKis пишет:

 цитата:
hmg надо доводить, если надо, конечно ?


Надо ! Обязательно !
Потом можно будет доводить этот пример для
TsbrowseSaveDbf( oBrw, "fileBrw.obrw" )
TsbrowseRestoreDbf( "fileBrw.obrw", oBrw )

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



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


Andrey пишет
 цитата:
Надо ! Обязательно !


Тогда это самостоятельно, т.к. bcc 5.8 у меня не установлен (и не будет пока)
Позже выложу изменения

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




Пост N: 6581
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 09.02.20 15:29. Заголовок: SergKis пишет: Тогд..


SergKis пишет:

 цитата:
Тогда это самостоятельно, т.к. bcc 5.8 у меня не установлен (и не будет пока)


Вот такие ошибки вылазят:
Harbour 3.2.0dev (r2001311434)
Copyright (c) 1999-2020, https://harbour.github.io/
Compiling 'demo.prg'...
demo.prg(119) Error E0030 Syntax error "syntax error at 'TBROWSE'"
demo.prg(120) Error E0061 Implicit send operator with no WITH OBJECT in sight
demo.prg(121) Error E0061 Implicit send operator with no WITH OBJECT in sight
demo.prg(122) Error E0061 Implicit send operator with no WITH OBJECT in sight
demo.prg(123) Error E0061 Implicit send operator with no WITH OBJECT in sight
demo.prg(124) Error E0061 Implicit send operator with no WITH OBJECT in sight
demo.prg(125) Error E0061 Implicit send operator with no WITH OBJECT in sight
demo.prg(126) Error E0061 Implicit send operator with no WITH OBJECT in sight
demo.prg(127) Error E0061 Implicit send operator with no WITH OBJECT in sight
demo.prg(129) Error E0061 Implicit send operator with no WITH OBJECT in sight
demo.prg(130) Error E0061 Implicit send operator with no WITH OBJECT in sight
demo.prg(131) Error E0061 Implicit send operator with no WITH OBJECT in sight
demo.prg(132) Error E0061 Implicit send operator with no WITH OBJECT in sight
demo.prg(133) Error E0061 Implicit send operator with no WITH OBJECT in sight
demo.prg(134) Error E0061 Implicit send operator with no WITH OBJECT in sight
demo.prg(135) Error E0010 ENDIF does not match IF
16 errors
No code generated.

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



Пост N: 3038
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 09.02.20 16:51. Заголовок: SergKis пишет Позже ..


SergKis пишет
 цитата:
Позже выложу изменения


Выкладываю, но надо иметь ввиду, что сделаны изменения под себя.
Изменения ch файла показаны на версию Минигуи 2.07.
prg файл взял от hmg 20.01 и наложил из своей версии
Скрытый текст

Возможны ошибки, не собирал такой вариант.
Новые строки идут под отметкой // BK
Изменения и программа CBru тут https://TransFiles.ru/yk9nm

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



Пост N: 3039
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 09.02.20 17:12. Заголовок: PS Потерял ф-ю *--..


PS
Потерял ф-ю Скрытый текст


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




Пост N: 6582
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 10.02.20 09:56. Заголовок: SergKis пишет: Изме..


SergKis пишет:

 цитата:
Изменения ch файла показаны на версию Минигуи 2.07.
prg файл взял от hmg 20.01 и наложил из своей версии



А почему эти изменения нельзя добавить в основную версию МиниГуи ?
Это же всем тоже будет удобно.

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



Пост N: 3043
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 10.02.20 11:49. Заголовок: Andrey пишет А почем..


Andrey пишет
 цитата:
А почему эти изменения нельзя добавить в основную версию МиниГуи ?


Повторю, у меня нет и не будет bcc 5.8, потому последние hmg только скачиваю.
Могу сделать, отладить в версию hmg 19.09 вместе с примером

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



Пост N: 3045
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 10.02.20 12:57. Заголовок: SergKis пишет Могу с..


SergKis пишет
 цитата:
Могу сделать, отладить в версию hmg 19.09 вместе с примером


Тут для hmg 19.09, если интересно https://TransFiles.ru/ff1ig

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



Пост N: 3046
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 10.02.20 14:01. Заголовок: PS В CBru.prg надо п..


PS
В CBru.prg надо поправить (в моей версии объект дает :ClientHeight уже без :StatusBar:Height)
 
nW := oWnd:ClientWidth - nX * 2
nH := oWnd:ClientHeight - nY - oWnd:StatusBar:Height
...


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




Пост N: 6584
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 10.02.20 15:59. Заголовок: SergKis пишет: Повт..


SergKis пишет:

 цитата:
Повторю, у меня нет и не будет bcc 5.8, потому последние hmg только скачиваю.
Могу сделать, отладить в версию hmg 19.09 вместе с примером


Так я беру и правлю пути под BCC 5.5.1, и всех делов то...
Под bcc 5.8 у меня тоже не всё компилирует, сборщик ресурсов глючит.

SergKis пишет:

 цитата:
Тут для hmg 19.09, если интересно


Конечно интересно.
Странно, под 20.01 (Update 3) не работает...
Собрал и вылет с ошибкой:
 
Error BASE/1066 Argument error: conditional Args: [1] = U
--------------------------------- Stack Trace ---------------------------------
Called from TSBROWSE:MOUSEMOVE(9574) in module: h_tbrowse.prg
Called from TCONTROL:HANDLEEVENT(913) in module: TControl.prg
Called from TSBROWSE:HANDLEEVENT(8687) in module: h_tbrowse.prg
Called from EVENTS(95) in module: h_events.prg
Called from DOMESSAGELOOP(0)
Called from _ACTIVATEWINDOW(1494) in module: h_windows.prg
Called from DOMETHOD(5379) in module: h_controlmisc.prg
Called from MAIN(127) in module: CBru.prg


А понял в чём ошибка. Добавил в проект h_tbrowse.prg и всё заработало...
А в стандартный МиниГуи добавить нельзя эти изменения из h_tbrowse.prg ?
Григорий, посмотри пожалуйста разницу в h_tbrowse.prg !

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




Пост N: 1652
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 10.02.20 17:48. Заголовок: Andrey пишет: в ста..


Andrey пишет:

 цитата:
в стандартный МиниГуи добавить нельзя эти изменения из h_tbrowse.prg ?


Добавил эти изменения, за исключением обработки символов ";" и "\" в заголовках и персональных установок для Tbrowse, которые есть в коде.
Собрал этот пример - работает (и выглядит) идентично оригиналу.

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



Пост N: 3047
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 10.02.20 18:53. Заголовок: gfilatov2002 пишет Д..


gfilatov2002 пишет
 цитата:
Добавил эти изменения


Поправить надо
 
Function _DefineTBrowse ( ControlName, ParentFormName, nCol, nRow, nWidth, nHeight,;
...
oBrw:InsColumn( nColNumber, oCol )

oBrw:nCell := nColNumber + 1
oBrw:nFreeze := nColNumber

oBrw:lLockFreeze := .T.

IF HB_ISNUMERIC(nW) .and. nW > 0
oBrw:GetColumn(nColNumber):nWidth := nW
ENDIF
...


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




Пост N: 1653
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 10.02.20 22:09. Заголовок: SergKis пишет: Попр..


SergKis пишет:

 цитата:
Поправить надо


Поправил. Благодарю за помощь

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




Пост N: 6585
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 10.02.20 22:52. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Собрал этот пример - работает (и выглядит) идентично оригиналу.


Классно ! Ждем с нетерпением новую версию !

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



Пост N: 3153
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 02.05.20 20:08. Заголовок: Haz пишет Добавь к ..


Haz пишет
 цитата:
Добавь к
:GetColumn("Name"):cPicture := "@R " + Replicate("X", 50) именно @R c пробелом(иногда и по два и более делаю) , будет отступ от вертикальной линии

ЗЫ я такими шаблонами вложенность строк в структурах показываю
...
для показа шаблон со сдвигом, в :prevedit меняю на обычный, в :editexit восстанавливаю сдвиг. Сам сдвиг храниться в спец поле indent, количество пробелов в шаблоне равно indent*2


Попробовал использовать Picture "@R " + Replicate("X", 50) с заменой, как то не зашло, т.к. picture почти нигде не задаю (на default упор)
Вернулся к реализации с пробелами, но залез в CLASS TsBrowse, ввел переменную, поправил методы
Скрытый текст

Если :nCellMarginLR задан блоком кода, то передаются параметры в него
- номер колонки
- объект тсб oBrw
- объект колонки
- и тип вызова
0 - линия тсб ( :DrawLine(), :DrawSelect() )
1 - Header ( :DrawHeader() )
2 - Footer ( :DrawFooter() )
Eval( ::nCellMarginLR, nJ, Self, oColumn, nAlign, 0 )
Если возвращает число пробелов > 0, то делается margin Left or Right
Попробовал в простом примере, без блока - работает и по мне, удобно в использовании.

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



Пост N: 3154
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 02.05.20 20:15. Заголовок: PS В предпросмотре р..


PS
В предпросмотре ровненько показывает, как и в редакторе, а включение в тему и текст прыгает тудой-сюдой.

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


Пост N: 1544
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 02.05.20 23:26. Заголовок: SergKis пишет: зале..


SergKis пишет:

 цитата:
залез в CLASS TsBrowse, ввел переменную, поправил методы


Сергей. Давно тоже хотел зашить в методы колонки. Правда реализация через блоки показалась слишком сложной. Пошёл по пути пикчи на основании значения спец поля.
Если и вводить переменную то в клас колонки, при этом учитывая что тип может быть не только символьный. А тут кроме пикчи в голову ничего не приходит
Ps. Кстати не нравится что значения числовых полей прилипают вплотную к правой линии.... И тут тоже пикчей дополняют пробелы

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



Пост N: 3155
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 03.05.20 07:11. Заголовок: Haz пишет Кстати не ..


Haz пишет
 цитата:
Кстати не нравится что значения числовых полей прилипают вплотную к правой линии....


Игорь, мне тоже не нравится такое прилипание еще и символьных (другие тоже) полей вплотную к левой линии.
Сделанная переменная на класс это, в первую очередь, исправить прижимание к границе\линии, задав 1 или 2
получается приличный вид всех колонок с DT_LEFT, DT_RIGHT. Особенно это заметно при задании цвета отрицательным
значением, т.е. обводка ячеек линией. Пока такой пример Tsb_array_2\demo3.prg и пробовал.
 цитата:

Если и вводить переменную то в клас колонки, при этом учитывая что тип может быть не только символьный


Тоже была такая мысль, но решил ограничится, пока, переменной класса, передавая в блок параметры
oColumn, nAlign и тип вызова ( 0 для строки, 1 header, 2 footer ). Т.е. для колонки с опред. именем и nAlign можно
вернуть числовое нужное смещение, для всех других, к примеру 1 для отступа от линии.

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



Пост N: 3156
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 03.05.20 10:32. Заголовок: PS Сделал эти измене..


PS
Сделал эти изменения только в своей версии.
Надо такое в hmg или усиливать по колонкам, а может, вообще, лишнее ?

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


Пост N: 1545
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 03.05.20 12:15. Заголовок: SergKis пишет: Надо..


SergKis пишет:

 цитата:
Надо такое в hmg или усиливать по колонкам, а может, вообще, лишнее ?


По колонками может пригодиться. С мультилайном мысль интересная, её шаблоном не сделать.
И может слева и права иметь возможность дополнять не только пробелами, можно использовать псевдографику для рисования псевдо дерева к примеру.
То есть блок выдает не число, а строку.
Я не занимался этим вопросом серьёзно, для решения локальной задачи играл с шаблонами т. к. они независимы от типа данных. Была даже мысль добавить переменные cLPicture и cRPicture, для добавления стандартного слева справа перед применением. Потом компания купила Битрикс и пришлось с головой уйти в синхронизацию данных с этой витриной посредством rest запросов и написанием своего вэб сервера. Поэтому бросил. Может тут все выскажут свое мнение? Мне все же как-то с шаблонами справа и слева через блоки больше нравится, универсальное, но и твоё предложение тоже полезно

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



Пост N: 3157
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 03.05.20 12:39. Заголовок: Haz пишет И может сл..


Haz пишет
 цитата:
И может слева и права иметь возможность дополнять не только пробелами, можно использовать псевдографику для рисования псевдо дерева к примеру.


Добавить проверку возврата на строку и добавлять ее, это реально и просто.
Делать переменные в класс колонки, пока не знаю, может в будущем. Тогда переменная из tsbrowse класса определяет
глобальную установку отступа колонок DT_LEFT, DT_RIGHT, если задано в классе колонки, то подменять общее значение
на значение полученное из колонки. Но, думается, решить это можно для колонки и от переменной из tsbrowse класса

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


Пост N: 1546
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 03.05.20 17:07. Заголовок: SergKis пишет: Но, ..


SergKis пишет:

 цитата:
Но, думается, решить это можно для колонки и от переменной из tsbrowse класса


Да, согласен. Можно так для строкового значения сделать. В процессе использования придёт понимание чего не хватает

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



Пост N: 3162
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 03.05.20 18:56. Заголовок: Haz Вот что получил..


Haz
Вот что получилось hmg 20.04. Изменения тсб Скрытый текст

Пример demo5.prg и h_tbrowse.prg тут https://TransFiles.ru/zkhi1

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



Пост N: 3163
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 03.05.20 19:00. Заголовок: PS Запуск demo5.exe..


PS
Запуск
demo5.exe без параметров - работа с массивом
demo5.exe * работа с dbf
demo5.exe * 7 работа с dbf только 7 полей

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


Пост N: 1547
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 03.05.20 20:51. Заголовок: SergKis пишет: Вот ..


SergKis пишет:

 цитата:
Вот что получилось


Отлично. Погоня в понедельник. её

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





Пост N: 78
Зарегистрирован: 18.06.15
ссылка на сообщение  Отправлено: 04.05.20 07:27. Заголовок: SergKis пишет: Прим..


SergKis пишет:

 цитата:
Пример demo5.prg и h_tbrowse.prg тут https://TransFiles.ru/zkhi1



Не открывается ...

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




Пост N: 6647
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 04.05.20 08:01. Заголовок: Alex_Cher пишет: Не..


Alex_Cher пишет:

 цитата:
Не открывается ...


Только что скачал и открыл архив.

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


Пост N: 1548
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 04.05.20 15:56. Заголовок: Вот что получилось h..



 цитата:
Вот что получилось hmg 20.04.


Сергей, отлично работает
Из предложений - разделить переменную на две - xMarginL и xMarginR, продублировать в колонках ( чтоб иметь независимый отступ по колонкам ).
В целом отличное дополнение в TSB.

ЗЫ не разбирался и к теме не относится , а чего навигация по массиву так тупит ? при перемещении вправо идет перерисовка всего бровса . Так и задумано ?

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



Пост N: 3165
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 04.05.20 16:39. Заголовок: Haz пишет .Из предло..


Haz пишет
 цитата:
.Из предложений - разделить переменную на две - xMarginL и xMarginR, продублировать в колонках ( чтоб иметь независимый отступ по колонкам ).


Думал на эту тему, мне кажется, это лишнее в данном случае. Переменные нужны, если нет блока кода,
но тогда надо заполнять переменные oCol:xMarginL и oCol:xMarginR в др. блоке oCol:bData, oCol:bValue, oCol:bDecode.
Т.е. :nCellMarginLR := 1 и вычисляем, пишем в заменяющие значения в колонке в блоках выше. Или как сейчас
:nCellMarginLR := {|nc,ob,oc,na,no| iif( na == DT_LEFT .and. oc:cName == 'GRNAME', (ob:cAlis)->NGRU, 1 ) }
т.е. все прижатия влево, вправо сместятся на пробел от линии, а колонка GRNAME от значения индекса смещения в таблице

 цитата:
не разбирался и к теме не относится , а чего навигация по массиву так тупит ? при перемещении вправо идет перерисовка всего бровса . Так и задумано ?


То же обратил внимание, но не знаю почему.

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



Пост N: 3166
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 04.05.20 17:05. Заголовок: PS Прорисовка идет п..


PS
Прорисовка идет при работе с массивом, с dbf такого нет

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

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