Автор | Сообщение |
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
[только новые]
|
|
SergKis
|
| постоянный участник
|
Пост N: 2049
Зарегистрирован: 17.02.12
|
|
Отправлено: 22.09.18 12:56. Заголовок: Haz Haz пишет Кстати..
Haz Haz пишет Та же схема и для Clipboard oRec := GetRec() System.Clipboard := hb_valtoexp(oRec:GetAll(.F.)) aRec := &( System.Clipboard ) // перед возможна проверка на формат { } oRec := oKeyData() AEval(aRec, {|a| oRec:Set(a[1], a[2]) })
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2050
Зарегистрирован: 17.02.12
|
|
Отправлено: 22.09.18 13:00. Заголовок: Haz пишет В сети вме..
Haz пишет цитата: | В сети вместо этого использую dbskip(0) |
| Это уже нюансы, в letodb skip(0) не работает, надо dbGoto(RecNo()) или leto_commit() или dbcommit()
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2051
Зарегистрирован: 17.02.12
|
|
Отправлено: 22.09.18 13:12. Заголовок: SergKis пишет Та же ..
SergKis пишет цитата: | Та же схема и для Clipboard |
| Можно использовать ф-ии AtoC и CtoA System.Clipboard := AtoC(oRec:GetAll(.F.)) aRec := CtoA(System.Clipboard)
|
|
|
Haz
|
| |
Пост N: 1336
Зарегистрирован: 20.02.11
|
|
Отправлено: 22.09.18 13:47. Заголовок: SergKis пишет: Syst..
SergKis пишет: Возможно лучше и не клипбоард, а внутреннюю переменную. Тк вставка возможна в эту или такую же таблицу, но не в Word Excel paint и пр. И это даст возможность держать в клипбоард какую-то другую нужную информацию
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2052
Зарегистрирован: 17.02.12
|
|
Отправлено: 22.09.18 14:11. Заголовок: Haz пишет Возможно л..
Haz пишет цитата: | Возможно лучше и не клипбоард, а внутреннюю переменную. |
| Я, думал, у тебя между разными своими приложениями передача. Главное в начало строки идентификатор лепить (к примеру id. таблицы) для проверки правильности переносимости, т.е. запись таблицы T123 можно перенести в T123,T105, ... что бы не сломать данные пересекающихся структур
|
|
|
Haz
|
| |
Пост N: 1337
Зарегистрирован: 20.02.11
|
|
Отправлено: 22.09.18 16:26. Заголовок: SergKis пишет: межд..
SergKis пишет: цитата: | между разными своими приложениями передача. |
| Нет. Все в рамках одной системы, но как правило одна строка таблицы имеет несколько подчинённых таблиц. Можно использовать bAddAfter чтоб сохранить структуру подчиненности. Тут я рассуждал в общем что метод Clone может пригодиться. Ты его компактно нарисовал на основе AppendRow. Копирование в буфер и вставка из него, тоже... К примеру. Есть данные прогноза чего либо на текущий период, потом делается копия для следующего периода и актуализируется. Таким образом в системе живут временные среза по периодами, которые описывают что хотели, как все менялось и тд. Это я все о планах продаж. Иногда нужно руками перенести данные из прошлого в актуальный период. Во тут копи-пасте и годится. Системный клипбоард можно использовать. Но мне кажется внутренний буфер надёжнее, а может это параноя
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2053
Зарегистрирован: 17.02.12
|
|
Отправлено: 22.09.18 21:09. Заголовок: Haz пишет Иногда ну..
Haz пишет цитата: | Иногда нужно руками перенести данные из прошлого в актуальный период |
| Такое проделывал, давая отметить все или выборочно (строки тсб) в переменной (по кнопке\space,dblclick,...) Схема по памяти oMetka := oKeyData() ... :UserKeys ( VK_SPACE, {|ob| (ob:cAlias)->( oMetka:Set( RecNo(), RecGet() ) ) }) :bLDblClick := {|p1,p2,p3,ob| ob:PostMsg( WM_KEYDOWN, VK_SPACE, 0 ) } oCol := :GetColumn('METKA') oCol:lCheckBox := .T. oCol:cAlias := :cAlias oCol:bData := {|| RecNo() } oCol:bDecode := {|nr| ! Empty(oMetka:Get(nr)) } Таким образом в oMetka накопятся на ключ recno объект записи. Для вставки в др. место (alias) делаем (alias)->( AEval(oMetka:GetAll(.T.)/*только объекты записи*/, {|or| dbAppend(), PutRec(or) } ) ) Сейчас с :AppendRow() можно ее проделывать в AEval (др. тсб) вместо dbAppend(), PutRec(or), но еще не пробовал.
|
|
|
Haz
|
| |
Пост N: 1338
Зарегистрирован: 20.02.11
|
|
Отправлено: 22.09.18 21:29. Заголовок: SergKis пишет: Сейч..
SergKis пишет: цитата: | Сейчас с :AppendRow() можно ее проделывать в AEval (др. тсб) вместо dbAppend(), PutRec(or), но еще не пробовал. |
| Пока никто не пробовал Я раньше это через sql делал т. к. это было проще. Сейчас простые перебросы можно на новом методе опробовать. Сложные все же на sql оставлю, там скорость в разы выше за счёт 100% выполнения на серваке
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2054
Зарегистрирован: 17.02.12
|
|
Отправлено: 22.09.18 21:31. Заголовок: PS память подвела :U..
PS память подвела :UserKeys ( VK_SPACE, {|ob,nr,lr| nr := (ob:cAlias)->( RecNo() ), lr := Empty(oMetka:Get(nr)), ; iif( lr,(ob:cAlias)->( oMetka:Set( nr, RecGet() ) ), oMetka:Del(nr) ) }
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2055
Зарегистрирован: 17.02.12
|
|
Отправлено: 22.09.18 21:40. Заголовок: Haz пишет Сложные вс..
Haz пишет цитата: | Сложные все же на sql оставлю |
| Здесь тоже можно убыстрить, в oMetka:Set( RecNo(), RecNo() ), а потом или через BM Filter выборку делать или передать массив записей на сервер и там сделать выборку из одной и вставку в др. таблицу. С :AppendRow() будет с прорисовкой, для небольших объемов скорость не так критична
|
|
|
Haz
|
| |
Пост N: 1339
Зарегистрирован: 20.02.11
|
|
Отправлено: 23.09.18 10:21. Заголовок: SergKis пишет: Здес..
SergKis пишет: цитата: | Здесь тоже можно убыстрить |
| Да, можно. В лето очень не хватает sql движка. Получился бы уникальный продукт. Все что ниже НЕ РЕКЛАМА Много из того что приходится делать для оптимизации уже есть в sql. Именно поэтому я уже давно перескочил на ads. Особенно удобно делать выборку для отчёта, таблицы можно клеить между собой вдоль и поперёк. В качестве примера который давно приводил Диме: Есть таблица с платежами -дата -контрагент (ID) -сумма выплаты -сумма поступлений -статья бюджета(ID) Так вот, за произвольный период от и до по дате это разворачивается в график движения денег с произвольный шагом от дня до квартала или полугодия итд ( это колонки) с подстановкой значения из справочников вместо ID и с группировкой по контрику или статье за миллисекунды. Остаётся только плюнуть этим в Excel. Что касается простых выборов данных, то делаю их на клиенте и тут чем больше возможностей tsb тем проще и понятнее делать. AppendRow уже использую, но пока как пользовательский метод. Появится в сборке - переключусь на него. В пятницу написал аналог метода GotoRec() только с сохранением RowPos на которой стояли. Помню пользователи жаловались что оригинальный прыгает на начало таблицы. Так что tsb становится все функциональнеё и стабильнее.
|
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2056
Зарегистрирован: 17.02.12
|
|
Отправлено: 23.09.18 17:10. Заголовок: Haz пишет Именно поэ..
Haz пишет цитата: | Именно поэтому я уже давно перескочил на ads. |
| Осмелюсь спросить, лицензионный. Лучше не говори, можешь только подмигнуть. :) цитата: | В пятницу написал аналог метода GotoRec() только с сохранением RowPos на которой стояли |
| Перепрыг на 1ую тоже происходит, но иногда. понять причину не удалось, но сама нужная запись держится. Если твой new аналог фурычит, делись пожалуйста. "Моя твоя осень, осень плагодарна будет"
|
|
|
Haz
|
| |
Пост N: 1340
Зарегистрирован: 20.02.11
|
|
Отправлено: 23.09.18 17:34. Заголовок: SergKis пишет: може..
SergKis пишет: цитата: | можешь только подмигнуть. :) |
| Ну подмигнуть не вопрос цитата: | Если твой new аналог фурычит, делись пожалуйста. |
| В понедельник скину в виде функции. Пока думаю надо ли оно и методом не оформил
|
|
|
Haz
|
| |
Пост N: 1341
Зарегистрирован: 20.02.11
|
|
Отправлено: 24.09.18 10:45. Заголовок: Haz пишет: В понеде..
Haz пишет: цитата: | В понедельник скину в виде функции. |
| Примерно так STATIC FUNCTION GoRec(oBrw, nRec) LOCAL nRecno, nRowPos LOCAL nSkip := 0 LOCAL lMore := .T. LOCAL lSkip :=.F. if oBrw:lIsDbf oBrw:SetFocus() oBrw:nLastPos := (oBrw:cAlias)->(RecNo()) nRowPos := oBrw:nRowPos (oBrw:cAlias)->(dbGoto(nRec)) oBrw:nRowPos := 1 //подсчет числа скипов чтобы остаться на той же строке ( если возможно ) while lMore (oBrw:cAlias)->(dbSkip(-1)) nSkip ++ lMore := !(oBrw:cAlias)->(bof()) .and. nSkip < (nRowPos) lSkip := !(oBrw:cAlias)->(bof()) end oBrw:Refresh(.t., .t.) if lSkip oBrw:Skip(nSkip) end oBrw:nRowPos := nSkip oBrw:nAt := oBrw:nLogicPos() oBrw:ResetVScroll() If oBrw:bChange != Nil Eval( oBrw:bChange, oBrw, 0 ) EndIf oBrw:lHitTop := oBrw:lHitBottom := .F. do events end RETURN Nil
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2057
Зарегистрирован: 17.02.12
|
|
Отправлено: 24.09.18 18:16. Заголовок: Игорь, спасибо. Покр..
Игорь, спасибо. Покручу, заменив :GotoRec()
|
|
|
Haz
|
| |
Пост N: 1342
Зарегистрирован: 20.02.11
|
|
Отправлено: 24.09.18 21:50. Заголовок: SergKis пишет: Покр..
SergKis пишет: цитата: | Покручу, заменив :GotoRec() |
|
можно допилить и вторым параметром передавать желаемый RowPos, а по умолчанию пытаемся сохранить текущий. Так можно задавать первый, последний и вообще любой. У меня работает без замечаний. Ещё потестирую и вклею в проект.
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2058
Зарегистрирован: 17.02.12
|
|
Отправлено: 24.09.18 22:29. Заголовок: Haz пишет У меня раб..
Haz пишет цитата: | У меня работает без замечаний. |
| У меня рабочая версия hmg 2.07, tsb по коду местами отличается (исторически) и приходится "привязываться к местности". :GotoRec мой сильно отличается от кода в hmg тек. версии. Так что, покрутить придется. Параметры и new возможности - это хорошо
|
|
|
Haz
|
| |
Пост N: 1343
Зарегистрирован: 20.02.11
|
|
Отправлено: 25.09.18 10:28. Заголовок: SergKis пишет: Пара..
SergKis пишет: цитата: | Параметры и new возможности - это хорошо |
| Тем более когда это не просто, а очень просто STATIC FUNCTION GoRec(oBrw, nRec, nRowPos ) LOCAL nRecno, nRowPos LOCAL nSkip := 0 LOCAL lMore := .T. LOCAL lSkip :=.F. if oBrw:lIsDbf oBrw:SetFocus() oBrw:nLastPos := (oBrw:cAlias)->(RecNo()) nRowPos := oBrw:nRowPos hb_default( @nRowPos, oBrw:nRowPos ) (oBrw:cAlias)->(dbGoto(nRec)) oBrw:nRowPos := 1 ...
|
|
|
Haz
|
| |
Пост N: 1344
Зарегистрирован: 20.02.11
|
|
Отправлено: 25.09.18 16:03. Заголовок: Примерчик как работает GoRec
SergKis Примерчик как работает GoRec. там два бровса по одной DBF . При движении по MASTER отрабатывает SLAVE при этом строки через GoRec() тута
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2059
Зарегистрирован: 17.02.12
|
|
Отправлено: 25.09.18 19:28. Заголовок: Haz пишет Примерчик ..
Haz пишет цитата: | Примерчик как работает GoRec |
| Примерчик работает и в моей версии Заменил у себя метод :GotoRec на предложенный, погонял на реальной задаче - полет нормальный. Получился такой метод METHOD GotoRec( nRec, nRowPos ) CLASS TSBrowse LOCAL nRecno, cAlias LOCAL nSkip := 0 LOCAL lMore := .T. LOCAL lSkip := .F. LOCAL lRet := .F. If ::lIsDbf lRet := .T. cAlias := ::cAlias ::SetFocus() ::nLastPos := (cAlias)->( RecNo() ) hb_default( @nRowPos, ::nRowPos ) (cAlias)->( dbGoto(nRec) ) ::nRowPos := 1 DO WHILE lMore (cAlias)->( dbSkip(-1) ) nSkip ++ lMore := !(cAlias)->(BOF()) .and. nSkip < (nRowPos) lSkip := !(cAlias)->(BOF()) ENDDO ::Refresh(.F., .F.) If lSkip ::Skip(nSkip) EndIf ::nRowPos := nSkip ::nAt := ::nLogicPos() ::ResetVScroll() If ::bChange != Nil Eval( ::bChange, Self, 0 ) EndIf ::lHitTop := ::lHitBottom := .F. EndIf RETURN lRet
|
|
|
Ответов - 300
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[только новые]
|
|