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




Пост N: 699
Зарегистрирован: 25.05.05
ссылка на сообщение  Отправлено: 29.01.08 13:59. Заголовок: Новая версия Расширенного релиза библиотеки MiniGUI (часть VI ) (продолжение)


Начало темы находится здесь, а теперь

АНОНС * АНОНС * АНОНС * АНОНС * АНОНС

Готовится к опубликованию новая сборка №48, которая выйдет в конце недели.
Если у Вас есть интересные наработки для включения в новый релиз, то сейчас самое удобное время для их отправки мне

Кратко, что нового:

- исправление обнаруженных ошибок и неточностей кода;
- новый класс HEADERIMAGE для Grid и Browse;
- свойство Address в Hyperlink может теперь открывать папку или файл на диске;
- добавлен NOTABSTOP класс для Browse;
- поддержка пользовательских компонентов (заимствована из оффициального релиза);
- расширения и исправления в библиотеках TsBrowse и PropGrid;
- обновлены сборки Харбор и HMGS-IDE;
- новые и обновленные старые примеры (как обычно ).




--
Улыбайся - завтра будет хуже!
Спасибо: 5 
Профиль
Ответов - 300 , стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 All [только новые]


gfilatov2002
moderator




Пост N: 1326
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 13.07.18 21:50. Заголовок: SergKis пишет: На в..


SergKis пишет:

 цитата:
На всякий случай


Благодарю за оперативную помощь

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



Пост N: 1935
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 16.07.18 09:45. Заголовок: gfilatov2002 Добави..


gfilatov2002
Добавил в CLASS TSColumn
 
DATA cField INIT "" // FieldName column
DATA cFieldTyp INIT "" // FieldType column
DATA nFieldLen INIT 0 // FieldLen column
DATA nFieldDec INIT 0 // FieldDec column

...

Помогает плясать от этих данных а не от :bData


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


Пост N: 800
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 16.07.18 19:38. Заголовок: Что-то не понял идеи..


Что-то не понял идеи.
1) При открытии справочника и выборе нужной записи, по моим понятиям, должна происходить замена данных в основной таблице ?
А ничего не происходит
2)При открытии справочника, я обычно у себя в программах, позиционирую курсор на запись равной записи основной.
Если в основной таблице - это имя "ВАСИЛИЙ", то при открытии справочника устанавливаю курсор на имя "ВАСИЛИЙ", если не найдено, то на первую запись

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



Пост N: 1938
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 16.07.18 21:41. Заголовок: Vlad04 пишет Что-то ..


Vlad04 пишет
 цитата:
Что-то не понял идеи.


В каком месте, если в примере, то позиционирование и не делалось, оставлено за скобками (техника),
Так же за скобками осталось убрать заголовки окна, добавить элементы запроса для поиска (как у Haz в примере)
В примере показана работа с базой колонок (baza 1, baza 2 содержат только поля ссылок на справочники), просмотр
по ссылкам (исп. переменная колонки новая :bSeek в 2х вариантах исполнения), т.е. :LoadFields(...) не очень
подходит надо доб. описания колонок. В примере исп. созданная база кол. и для работы с base1, base2 и справочн.

Добавка в объект доп. переменных, так это для уточнений при работ с колонками.
Так имеем :bData и от него пляшем -> :nWidth, :cPicture, :nAlign ставим интуитивно, примерно ...
Если отображение через функцию в :bData (к примеру выбрать CHARSET фонта для отображения колонки
для данных только типа C), то это опять интуитивное решение, т.к. :cField можент быть выражение с CRLF.
А так можно делать проверку только для C типа поля делать, для др. нет или для других.


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



Пост N: 1939
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 16.07.18 21:51. Заголовок: PS В примере base 1,..


PS
В примере base 1, base 2 - Child окна (при этом ведут себя почти как модал Parent окно не реагирует на кнопки,
пока не выйдем из окна child base1\2). base 1, base 2 можно сделать modal, при этом вызовы спр. на колонках
будут работать, они child.

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


Пост N: 1276
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 16.07.18 21:54. Заголовок: Vlad04 пишет: Что-т..


Vlad04 пишет:

 цитата:
Что-то не понял идеи


Еще идею Сергей озвучил пару страниц назад. Это вызов справочников через сообщение, это дает возможность не замораживать обработчик событий tsb на блоке bPrevEdit. Вместо записи в таблицу при выборе из справочника, ведётся лог. Так что пример Сергея как бы и о событиях.
Мой пример это кусок из проекта, там запись из справочника есть. Но все через bPrevEdit. Предупредил что пример сырой в фазе вялой доработки. Сделаны блоки bPostblock для выполнения действий после выбора и bSearch для поиска. В плане как минимум bPreBlok для действий перед показом справочника. Используя блоки можно лочить таблицу только в момент записи или установить указатель куда угодно перед показом и пр.
Ps Основная претензия к комбо, так это предварительное чтение справочника в массив. При узком канале и длинном справочнике бровс помирает при прорисовке и навигации. Так же нет поиска фильтрации, чекбоксов и прочих прелестей. У себя полностью отказался от комбо в tsb.



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




Пост N: 1327
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 16.07.18 21:57. Заголовок: SergKis пишет: Доба..


SergKis пишет:

 цитата:
Добавка в объект доп. переменных


Продублировал эти дополнения

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



Пост N: 1940
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 18.07.18 20:49. Заголовок: gfilatov2002 Сделал..


gfilatov2002
Сделал след. изменения
 
CLASS TSColumn
...
DATA bSeek // Optional code block to seek a column data
DATA bDecode // Charset decode or other

...
METHOD SetProperty ( cName, xVal ) INLINE iif( __objHasData( Self, cName ), __objSendMsg( Self, '_'+cName, xVal ), Nil )
METHOD GetProperty ( cName ) INLINE iif( __objHasData( Self, cName ), __objSendMsg( Self, cName ), Nil )
METHOD AddProperty ( cName, xVal ) INLINE ( iif(!__objHasData( Self, cName ), __objAddData( Self, cName ), Nil ), ;
iif( __objHasData( Self, cName ), __objSendMsg( Self, '_'+cName, xVal ), Nil ) )

...

METHOD DrawLine( xRow ) CLASS TSBrowse
...
If ::lIsArr .and. ( ::lAppendMode .or. ::nAt > Len( ::aArray ) )
uData := "" // append mode for arrays
ElseIf cColAls != Nil
If Valtype( oColumn:bSeek ) == 'B'
( cColAls )->( Eval( oColumn:bSeek, Self, nJ ) )
EndIf
uData := ( cColAls )->( Eval( oColumn:bData ) )
If Valtype( oColumn:bDecode ) == 'B'
uData := ( cColAls )->( Eval( oColumn:bDecode, uData, Self, nJ ) )
EndIf

Else
If Valtype( oColumn:bSeek ) == 'B'
Eval( oColumn:bSeek, Self, nJ )
EndIf
uData := Eval( oColumn:bData )
If Valtype( oColumn:bDecode ) == 'B'
uData := Eval( oColumn:bDecode, uData, Self, nJ )
EndIf

EndIf
...
METHOD DrawSelect( xRow ) CLASS TSBrowse
...
If ::lIsArr .and. ( ::lAppendMode .or. ::nAt > Len( ::aArray ) )
uData := "" // append mode for arrays
ElseIf cColAls != Nil
If Valtype( oColumn:bSeek ) == 'B'
( cColAls )->( Eval( oColumn:bSeek, Self, nJ ) )
EndIf
uData := ( cColAls )->( Eval( oColumn:bData ) )
If Valtype( oColumn:bDecode ) == 'B'
uData := ( cColAls )->( Eval( oColumn:bDecode, uData, Self, nJ ) )
EndIf

Else
If Valtype( oColumn:bSeek ) == 'B'
Eval( oColumn:bSeek, Self, nJ )
EndIf
uData := Eval( oColumn:bData )
If Valtype( oColumn:bDecode ) == 'B'
uData := Eval( oColumn:bDecode, uData, Self, nJ )
EndIf

EndIf
...
METHOD LoadFields( lEditable ) CLASS TSBrowse
...
ATail( ::aColumns ):cData := ::cAlias + "->" + FieldName( nE )
ATail( ::aColumns ):cName := ( ::cAlias )->( FieldName( nE ) ) // 21.07.2015
ATail( ::aColumns ):cField := ( ::cAlias )->( FieldName( nE ) ) // 08.06.2018
ATail( ::aColumns ):cFieldTyp := aStru[ nE, 2 ]
ATail( ::aColumns ):nFieldLen := aStru[ nE, 3 ]
ATail( ::aColumns ):nFieldDec := aStru[ nE, 4 ]

...

Пример по исп. CHARSET фонтов тут https://my-files.ru/dofcn3
Суть примера:
U04.dbf -в дос кодировке LV866 (языки EN, LV, RU)
bk8_c.lib содержит C функцию перекодировки
Dos4W5(cString, 1) - dos -> win ansi 1251 RUSIAN_CHARSET
Dos4W5(cString, 2) - dos -> win ansi 1257 BALTIC_CHARSET
...
TSB показывает колонки в разных фонтах


Спасибо: 1 
Профиль
SergKis



Пост N: 1941
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 18.07.18 20:58. Заголовок: PS demo_ru.prg в OEM..


PS
demo_ru.prg в OEM кодировке (опр. русских букв в dos) !!!

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




Пост N: 1329
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 18.07.18 21:26. Заголовок: SergKis пишет: Сдел..


SergKis пишет:

 цитата:
Сделал след. изменения


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

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


Пост N: 1277
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 18.07.18 23:30. Заголовок: SergKis пишет: пока..


SergKis пишет:

 цитата:
показывает колонки в разных фонта


Сергей, а при записи в поле все ок будет?

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



Пост N: 1942
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 18.07.18 23:56. Заголовок: Игорь, Надо обратную..


Игорь, Надо обратную перекодировку делать, т.е.
в edit использовать hFont с нужным charset потом перед записью делать win ansi -> dos, для LV866:
Dos4W5(cString, 6) - win ansi rusian_charset -> LV866
Dos4W5(cString, 7) - win ansi baltic_charset -> LV866
В тек. версии не пробовал, пока потребности не было, но должно работать, в VO работает схема


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


Пост N: 1278
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 19.07.18 08:49. Заголовок: SergKis пишет: Надо..


SergKis пишет:

 цитата:
Надо обратную перекодировку делать


Я делал. Но перекодировки и шрифты назначались в bData.
Если поле подстановочное через bSeek или bData и хранит ID, то перекодировка не нужна в общем случае.
У меня был авто пополняемый справочник в OEM, в поле хранил ID. Поле это было редактируемо с BTNBox и при нажатии на кнопку был выбор, при редакции - запись в справочник и в поле подстановка нового ID.
Ох и намучился я с этим BTN....идея оказалась не удобной для пользователя.

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



Пост N: 1943
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 19.07.18 09:34. Заголовок: Haz пишет Но перекод..


Haz пишет
 цитата:
Но перекодировки и шрифты назначались в bData


:bData с перегрузом была (все в ней делать ... мучение)
Мой товарищ по работе не выдерживал и переводил VO в уникод и hmg 2.07 перевел, на ней и работаем, голова не болит.
Сейчас решил использовать наработки Андрея tsb -> Excel\OO (много новых мелких отчетов как в примере APP_OOPREPORT).
Делать настройки на них в своей версии лениво, вот и полез в тек. версию hmg с charset. Хочу утилитку сделать и запускать

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


Пост N: 1279
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 19.07.18 10:52. Заголовок: SergKis пишет: вот ..


SergKis пишет:

 цитата:
вот и полез в тек. версию hmg с charset


тогда уж логичнее обойтись одной проверкой перед TSDrawCell
 
If hb_isBlock( oColumn:bDecode )
uData := Eval( oColumn:bDecode, uData, Self, nJ )
EndIf

TsDrawCell( ...


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



Пост N: 1944
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 19.07.18 15:22. Заголовок: Haz пишет логичнее ..


Haz пишет
 цитата:
логичнее обойтись одной проверкой перед TSDrawCell


Я тоже так сначала подумал, но опять проверять cColAls != Nil ..., поставил по веткам там где есть.
А использовать HB_ISBLOCK логичнее, наверно копипастил


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



Пост N: 1946
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 21.07.18 17:21. Заголовок: gfilatov2002 Поправ..


gfilatov2002
Поправил xmlxls.lib
 
CREATE CLASS ExcelWriterXML
...
VAR cCodePage INIT ''

...
METHOD ExcelWriterXML:writeData( target )
...
xml += '<ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel" />' + hb_eol()
xml += "<Styles>" + hb_eol()

If empty( ::cCodePage )
xml := hb_StrToUTF8( xml )
Else
xml := hb_StrToUTF8( xml , ::cCodePage )
EndIf
// xml := hb_StrToUTF8( xml , ::cCodePage )

FWrite( handle, xml )
xml := ""

FOR EACH style IN ::styles
xml += style:getStyleXML()
NEXT
xml += "</Styles>" + hb_eol()

If empty( ::cCodePage )
xml := hb_StrToUTF8( xml )
Else
xml := hb_StrToUTF8( xml , ::cCodePage )
EndIf
// xml := hb_StrToUTF8( xml , ::cCodePage )

FWrite( handle, xml )
...
xml += "</Workbook>"

If empty( ::cCodePage )
xml := hb_StrToUTF8( xml )
Else
xml := hb_StrToUTF8( xml , ::cCodePage )
EndIf

// xml := hb_StrToUTF8( xml , ::cCodePage )

FWrite( handle, xml )
...
xlsxml_s.prg
CREATE CLASS ExcelWriterXML_Sheet
...
LOCAL row, rowData, rowHeight, formula
LOCAL cCdp := GetExcelWriterXMLCodePage()

...
xml += " <Table>" + hb_eol()

If empty( cCdp )
xml := hb_StrToUTF8( xml )
Else
xml := hb_StrToUTF8( xml , cCdp )
Endif

// xml := hb_StrToUTF8( xml , GetExcelWriterXMLCodePage() )

FWrite( handle, xml )
...
xml += ' <Column ss:Index="' + colIndex + '" ss:AutoFitWidth="0" ss:Width="' + colWidth + '"/>' + hb_eol()
NEXT

If empty( cCdp )
xml := hb_StrToUTF8( xml )
Else
xml := hb_StrToUTF8( xml , cCdp )
Endif

// xml := hb_StrToUTF8( xml , GetExcelWriterXMLCodePage() )

FWrite( handle, xml )
...
xml += " </Row>" + hb_eol()

If empty( cCdp )
xml := hb_StrToUTF8( xml )
Else
xml := hb_StrToUTF8( xml , cCdp )
Endif
// xml := hb_StrToUTF8( xml , GetExcelWriterXMLCodePage() )

FWrite( handle, xml )
xml := ""
NEXT

xml += " </Table>" + hb_eol()
xml += "</Worksheet>" + hb_eol()

If empty( cCdp )
xml := hb_StrToUTF8( xml )
Else
xml := hb_StrToUTF8( xml , cCdp )
Endif
// xml := hb_StrToUTF8( xml , GetExcelWriterXMLCodePage() )

FWrite( handle, xml )
...

т.е. по умолчанию работает страница уст. в программе.


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




Пост N: 1330
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 21.07.18 18:32. Заголовок: SergKis пишет: Попр..


SergKis пишет:

 цитата:
Поправил xmlxls.lib


Спасибо

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



Пост N: 1947
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 21.07.18 19:08. Заголовок: gfilatov2002 SergKi..


gfilatov2002
SergKis пишет
 цитата:

...
If empty( cCdp )
xml := hb_StrToUTF8( xml )
Else
xml := hb_StrToUTF8( xml , cCdp )
Endif
// xml := hb_StrToUTF8( xml , GetExcelWriterXMLCodePage() )
...


Все проще оказалось, достаточно сделать в первоначальном варианте
 цитата:

STATIC cCp := Nil // ""


REQUEST HB_CODEPAGE_RU1251, HB_CODEPAGE_RU866, HB_CODEPAGE_UTF8

CREATE CLASS ExcelWriterXML

VAR styles INIT {}
VAR formatErrors INIT { => }
VAR sheets INIT {}
VAR lShowErrorSheet INIT .F.
VAR overwriteFile INIT .F.
VAR cCodePage INIT Nil // 'RU1251'

...


тогда тоже все работает как надо

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




Пост N: 1331
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 21.07.18 19:43. Заголовок: SergKis пишет: Все ..


SergKis пишет:

 цитата:
Все проще оказалось




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