Автор | Сообщение |
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; - новые и обновленные старые примеры (как обычно ).
|
|
|
Ответов - 300
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[только новые]
|
|
Andrey
|
| постоянный участник
|
Пост N: 6054
Зарегистрирован: 12.09.06
|
|
Отправлено: 21.09.18 13:20. Заголовок: Пропустил и не читал..
Пропустил и не читал. Haz пишет: цитата: | Серега , тебя забыли что ты тут вообще делаешь ? |
| Я добавлял его копирайт, только он почему то старый пример выложил. Исправьте теперь сами, у меня уже пример устаревший. Haz пишет: цитата: | Трогает трогает Половина кода в примерах твоя |
| Да, без помощи Сергея я бы вообще в МиниГуи не продвинулся ! Большое спасибо тебе !
|
|
|
ММК
|
| постоянный участник
|
Пост N: 344
Зарегистрирован: 29.05.10
|
|
Отправлено: 21.09.18 16:11. Заголовок: SergKis пишет: но у..
SergKis пишет: цитата: | но у нас не FW. Если бы FW был unicode ... |
| При желании можно попробовать вот так - FW_SetUnicode(.T.)
|
|
|
Haz
|
| |
Пост N: 1330
Зарегистрирован: 20.02.11
|
|
Отправлено: 21.09.18 17:00. Заголовок: Andrey пишет: Я доб..
Andrey пишет: цитата: | Я добавлял его копирайт, только он почему то старый пример выложил. |
| Андрей, мне и похоже Сергею тоже просто фиолетово на все эти копирайты. Это скорее информирование разбирающегося с примером , кому задавать вопросу напрямую ( об ошибках доработках и пр.) Григорий при размещении примеров обычно указывает авторов и этого более чем достаточно. Использование @ означает "охраняемое авторское право" , этот знак был принят на Женевской конвенции ( и без всяких CopyRight by).
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 6055
Зарегистрирован: 12.09.06
|
|
Отправлено: 21.09.18 17:06. Заголовок: Да мне тоже особо бе..
Да мне тоже особо без разницы этот копирайт. Мне главное чтобы пример работал. И ориентироваться на него, как правильно писать код. Так какой последний вариант получился ? Где его скачать можно ?
|
|
|
Haz
|
| |
Пост N: 1331
Зарегистрирован: 20.02.11
|
|
Отправлено: 21.09.18 17:14. Заголовок: Andrey пишет: Так к..
Andrey пишет: цитата: | Так какой последний вариант получился ? Где его скачать можно ? |
|
В последнем посте Сергея по теме , вроде Григорий его включил в сборку. ЗЫ и попробуй мой вариант RefreshRecord() с 1 секундой при нескольких запущенных копиях. потом оригинальный с 30 секундами. суть в том что удаляя записи в одном окне , рушится навигация в других. PS Dima Можешь это и другой флуд в "для флейма " перекинуть
|
|
|
Dima
|
| |
Пост N: 6928
Зарегистрирован: 17.05.05
|
|
Отправлено: 21.09.18 17:48. Заголовок: Haz пишет: Можешь э..
Haz пишет: цитата: | Можешь это и другой флуд в "для флейма " перекинуть |
| Облом ковырять 10 страниц Пусть тут живет.
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2039
Зарегистрирован: 17.02.12
|
|
Отправлено: 21.09.18 18:08. Заголовок: ММК пишет При желани..
ММК пишет цитата: | При желании можно попробовать вот так - FW_SetUnicode(.T.) |
| Все хорошо в свое время. Это надо было в 2005-6 годах, тогда товарищ перевел V0 на уникод. В 2009 вышел hb 2.0 с unicod, тогда и двинулись, сначала vwt, потом hwgui, завершилось hmg.
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2040
Зарегистрирован: 17.02.12
|
|
Отправлено: 22.09.18 07:05. Заголовок: Игорь, вспомнил про ..
Игорь, вспомнил про твой пример Tsb_filter, может по аналогии c :AppendRow, :DeleteRow сделать :FilterRow METHOD FilterRow( cFilter, bFor, lFocus ) CLASS TSBrowse LOCAL nLen := 0, cAlias := ::cAlias IF ! Empty(cFilter) ( cAlias )->( DbSetFilter( &("{||" + cFilter + "}"), cFilter ) ) ELSE ( cAlias )->( DbClearFilter() ) END ( cAlias )->( DbEval({ || nLen++ }, bFor ) ) ( cAlias )->( DbGotop() ) ::bLogicLen := {|| nLen } ::Reset() If ! empty(lFocus) ::SetFocus() EndIf RETURN Nil В твоем примере поправить STATIC FUNCTION ScanSoft(cDbf) ... FOR EACH oItem IN oWmi:ExecQuery( "SELECT * FROM Win32_Product" ) ... If HB_ISCHAR(cSW_Version) (cAlias)->F3 := cSW_Version EndIf NEXT ... и заменить STATIC FUNCTION RefreshBrowse() LOCAL cSeek := Alltrim( Form_0.Text_1.Value ) LOCAL cExp := "'" + UPPER(cSeek) + "' $ UPPER(B1->F2)" LOCAL nLen := 0, bFor := { || !Deleted() } IF !Empty(cSeek) oBrw_1:FilterRow(cExp, bFor) ELSE oBrw_1:FilterRow( Nil, bFor) END RETURN Nil
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2041
Зарегистрирован: 17.02.12
|
|
Отправлено: 22.09.18 07:07. Заголовок: PS nLen := 0 убрать..
PS nLen := 0 убрать
|
|
|
Haz
|
| |
Пост N: 1332
Зарегистрирован: 20.02.11
|
|
Отправлено: 22.09.18 08:04. Заголовок: SergKis пишет: Filt..
SergKis пишет: не помешает скорее не FilterRow a SetFilter тк относится не к одной строке. Но вроде такое есть, надо вспомнить почему я это не использую)) . В твоём коде не нравится наличие dbeval, в сети и при работе с ads по интернету будет жутко Тормозить при больших фильтра ( но это частности) А вот CloneRow напрямую востребован. Также просят CopyRowи и PasteRow но уже через клипборд. Из идей ещё - так это отключаемый кеш бровса, у себя сделал для справочных полей с автообновлением. Пока с закосом под ads и sql. Скорость в сети выроса в несколько раз. Но сама реализация сырая, не все ясно с логикой кеша. По дизайну есть идея - текст внутри ячейки с выделением участков заданным цветом. Уже рыл исходники но мыслей пока ноль.
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2042
Зарегистрирован: 17.02.12
|
|
Отправлено: 22.09.18 09:07. Заголовок: Haz пишет Но вроде т..
Haz пишет цитата: | Но вроде такое есть, надо вспомнить почему я это не использую)) |
| вариант фильтра по видимым, строковым полям тсб, может пойдет Скрытый текст
METHOD FilterFTS( cFind, lUpper, lFocus ) CLASS TSBrowse LOCAL nLen := 0, cAlias := ::cAlias, ob := Self DEFAULT lUpper := .T. If lUpper .and. HB_ISCHAR( cFind ) cFind := Upper( cFind ) EndIf IF ! Empty( cFind ) ( cAlias )->( DbSetFilter( {|| ob:FilterFTS_Line( cFind, lUpper, ob) }, ; "ob:FilterFTS_Line( cFind, lUpper, ob)" ) ) ELSE ( cAlias )->( DbClearFilter() ) END ( cAlias )->( DbGotop() ) DO WHILE ( cAlias )->( !EOF() ) DO EVENTS nLen++ ( cAlias )->( DbSkip(1) ) ENDDO ( cAlias )->( DbGotop() ) DO EVENTS ::bLogicLen := {|| nLen } ::Reset() If ! empty(lFocus) ::SetFocus() EndIf RETURN Nil METHOD FilterFTS_Line( cFind, lUpper ) CLASS TSBrowse LOCAL nCol, oCol, xVal, lRet := .F. DEFAULT lUpper := .T. FOR nCol := 1 TO Len( ::aColumns ) oCol := ::aColumns[ nCol ] If nCol == 1 .and. ::lSelector; LOOP ElseIf ! oCol:lVisible ; LOOP ElseIf oCol:lBitMap ; LOOP EndIf xVal := ::bDataEval(oCol, , nCol) If HB_ISCHAR( xVal ) If lUpper lRet := cFind $ Upper( xVal ) Else lRet := cFind $ xVal EndIf If lRet EXIT EndIf EndIf NEXT RETURN lRet и в примере STATIC FUNCTION RefreshBrowse() LOCAL cSeek := Alltrim( Form_0.Text_1.Value ) IF ! Empty(cSeek) oBrw_1:FilterFTS(cSeek, .T.) ELSE oBrw_1:FilterFTS( Nil ) END RETURN Nil
|
|
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2043
Зарегистрирован: 17.02.12
|
|
Отправлено: 22.09.18 09:15. Заголовок: Haz пишет А вот Clon..
Haz пишет цитата: | А вот CloneRow напрямую востребован. Также просят CopyRowи и PasteRow но уже через клипборд |
| Тут надо указывать какие поля\колонки исп. в прцессе, т.к. ключевые и расчетные не участвуют
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2044
Зарегистрирован: 17.02.12
|
|
Отправлено: 22.09.18 09:50. Заголовок: PS CloneRow может за..
PS CloneRow может захотеть иметь поля базы в большем объеме чем наличие колонок в тсб + данные проходят через :bData, т.е. исказиться относительно значения в поле. Copy\PasteRow - строка через chr(9), но опять значение из поля в строку или через :bData. Универсальной ситуевины не просматривается - все по месту Мне так видится
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2045
Зарегистрирован: 17.02.12
|
|
Отправлено: 22.09.18 09:57. Заголовок: Haz пишет скорее не..
Haz пишет цитата: | скорее не FilterRow a SetFilter тк относится не к одной строке. Но вроде такое есть |
| Метод :SetFilter есть, но что то там наворочено ... Не использую тоже исп. :FilterRow можно и со scope и небольшой вроде
|
|
|
Haz
|
| |
Пост N: 1333
Зарегистрирован: 20.02.11
|
|
Отправлено: 22.09.18 10:02. Заголовок: SergKis пишет: Унив..
SergKis пишет: цитата: | Универсальной ситуевины не просматривается - все по месту Мне так видится |
| Как правило Clone идёт в ту же таблицу, а коррекцию ключей можно предусмотреть в bPostClone например. Единственный затык это поля типа авто инкрементал. Фильтр FTS использую встроенный в ADS, он быстрее тк строит FTS индекс и позволяет искать по любым полям опционально, делая это на сервере
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2046
Зарегистрирован: 17.02.12
|
|
Отправлено: 22.09.18 10:21. Заголовок: Haz пишет Как правил..
Haz пишет цитата: | Как правило Clone идёт в ту же таблицу |
| Я исп. функции Скрытый текст
*----------------------------------------------------------------------------* FUNC RecGet() *----------------------------------------------------------------------------* LOCAL oRec := oKeyData() AEval( Array( FCount() ), {|v,n| oRec:Set( FieldName( n ), FieldGet( n ) ) } ) RETURN oRec *----------------------------------------------------------------------------* FUNC RecPut( oRec ) *----------------------------------------------------------------------------* nCnt := 0 AEval( oRec:GetAll(.F.), {|a,n| n := FieldPos(a[1]), nCnt += n, ; iif( n > 0, FieldPut( n, a[2] ), ) } ) RETURN nCnt > 0
| т.е. читаю в oRec := (cAlias)->( GetRec() ) заменяю значения в нужных полях на новые oRec:Set('FieldName5', 'abcde') ... (cAlias)->( dbAppend() ) (cAlias)->( RecPut(oRec) ) С :AppendRow ставим :bAddAfter := {|obr,ladd| iif( ladd, (ob:cAlias)->( PutRec(oRec) ) }
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2047
Зарегистрирован: 17.02.12
|
|
Отправлено: 22.09.18 10:26. Заголовок: PS AutoIncrement пол..
PS AutoIncrement поле и др., просто удаляем из oRec oRec:Del('FieldName1') ...
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2048
Зарегистрирован: 17.02.12
|
|
Отправлено: 22.09.18 12:05. Заголовок: Haz пишет Как правил..
Haz пишет цитата: | Как правило Clone идёт в ту же таблицу, а коррекцию ключей можно предусмотреть в bPostClone например. Единственный затык это поля типа авто инкрементал. |
| На методе :AppendRow() не сложно получается в итоге Скрытый текст
STATIC FUNCTION RecnoClone(oBrw) LOCAL oRec If empty(oBrw:bAddBefore) oBrw:bAddBefore := {|ob| oRec := (ob:cAlias)->( RecGet() ), ; oRec:Del('FieldName1'), ; oRec:Del('FieldName2'), ; oRec:Set('FieldName5', 'abcde'), ; oRec:Set('FieldName7', 12345) } oBrw:bAddAfter := {|ob,ladd| iif( ladd, (ob:cAlias)->( RecPut(oRec), ) } EndIf oBrw:AppendRow(.T.) (oBrw:cAlias)->(DbCommit()) RETURN Nil
|
|
|
|
Haz
|
| |
Пост N: 1334
Зарегистрирован: 20.02.11
|
|
Отправлено: 22.09.18 12:42. Заголовок: SergKis пишет: На м..
SergKis пишет: цитата: | На методе :AppendRow() не сложно |
| Кстати да
|
|
|
Haz
|
| |
Пост N: 1335
Зарегистрирован: 20.02.11
|
|
Отправлено: 22.09.18 12:46. Заголовок: SergKis пишет: oBrw..
SergKis пишет: цитата: | oBrw:cAlias)->(DbCommit()) |
| В сети вместо этого использую dbskip(0) Это гарантированно сбрасывает буфер записи. Commit у меня работал четез раз, может что то и поменялось но это многолетняя привычка эще с клиппера
|
|
|
Ответов - 300
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[только новые]
|
|