On-line: гостей 3. Всего: 3 [подробнее..]
АвторСообщение
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: 1351
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 09.09.18 18:57. Заголовок: Andrey пишет: код п..


Andrey пишет:

 цитата:
код перестал работать


Заменил в примере строку

 цитата:
hWnd := GetFormHandle(cForm)


на

 цитата:
hWnd := GetFormHandle(ThisWindow.Name)


и стрелки заработали

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




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


gfilatov2002 пишет:

 цитата:
Заменил в примере строку


Блин, точно забыл где правильное окно.
Наверху окно MAIN а стрелки вызываются в MODAL.
Спасибо !

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



Пост N: 1989
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 11.09.18 11:14. Заголовок: gfilatov2002 Поправ..


gfilatov2002
Поправил HbXlsXml
 
xmlxls_s.prg
...
METHOD ExcelWriterXML_Sheet:writeNumber( row, column, xData, style )
...
IF HB_ISNUMERIC( xData )
::writeData( "Number", row, column, hb_ntos( xData ), style )

// ::writeData( "Number", row, column, AllTrim( Str( xData, 18, 6 ) ), style )
ELSE
...

Так же пример Tsb_Brw2xm: https://my-files.ru/ntptz7
Убрал неточности copy+paste, почистил и чуть добавил (до title, picture в numeric, ...)

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




Пост N: 1352
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 11.09.18 13:27. Заголовок: SergKis пишет: Попр..


SergKis пишет:

 цитата:
Поправил


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

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



Пост N: 2020
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 18.09.18 16:49. Заголовок: gfilatov2002 В мето..


gfilatov2002
В методе :DeleteRow( lAll ) у себя обнаружил (может будет полезным)
 
METHOD DeleteRow( lAll ) CLASS TSBrowse
...
If !( "SQL" $ ::cDriver )
If ! ( cAlias )->( RLock() )
MsgStop( ::aMsg[ 40 ] , ::aMsg[ 28 ] )
Return .f.
EndIf
EndIf

If ::bDelBefore != Nil
lEval := Eval( ::bDelBefore, nRecNo, Self )
If ValType( lEval ) == "L" .and. ! lEval
if !("SQL" $ ::cDriver)
( cAlias )->( DbUnlock() )
EndIf
Return .f.
EndIf
EndIf

If ! ( cAlias )->( Deleted() )
( cAlias )->( DbDelete() )

If ::bDelAfter != Nil
Eval( ::bDelAfter, nRecNo, Self )
EndIf

if !("SQL" $ ::cDriver)
( cAlias )->( DbUnlock() )
endif
...
CLASS TSBrowse FROM TControl
...
DATA bDelete // evaluated after user deletes a row with lCanDelete mode
DATA bDelBefore // evaluated before user deletes. if RLock mode
DATA bDelAfter // evaluated after user deletes. if RLock mode

DATA bEvents // custom function for events processing
...

действия до удаления и после при удачном блокировании записи

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


Пост N: 1315
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 18.09.18 20:58. Заголовок: SergKis пишет: DATA..


SergKis пишет:

 цитата:
DATA bDelBefore // evaluated before user deletes. if RLock mode
DATA bDelAfter


Сергей, может и bAddBefore и After? Для заполнения ключей при добавлении в подчиненную базу.
Сейчас пользуюсь самописной db_Append( cAlias ) и db_Delete( cAlias ). В них по имени алиаса' условно заполняются ключи при добавлении или при удалении записи в мастер таблице, удаляю соответствующие в подчиненных

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



Пост N: 2021
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 18.09.18 21:11. Заголовок: Haz пишет может и bA..


Haz пишет
 цитата:
может и bAddBefore и After? Для заполнения ключей при добавлении в подчиненную базу


Согласен, это лучше чем самопалис.
По текстам только надо полазить

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



Пост N: 2022
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 18.09.18 21:28. Заголовок: PS есть одно но, не ..


PS
есть одно но, не пользовался никогда "родным" встроенным dbAppend().
Это вроде по стрелке вниз при выходе на EOF ?
Или еще что то есть ?

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


Пост N: 1316
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 18.09.18 22:11. Заголовок: SergKis пишет: Или ..


SergKis пишет:

 цитата:
Или еще что то есть


Вроде есть какой то блочек. Я дома без компа. Завтра с работы поищу.
Я тоже не пользуюсь стрелкой вниз за eof(). Значит раз есть ::deleterow() то логично и ::appendrow()

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



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


Haz пишет
 цитата:
Значит раз есть ::deleterow() то логично и ::appendrow()


Нет этого. Только есть
 
METHOD PostEdit( uTemp, nCol, bValid ) CLASS TSBrowse
...
bAddRec := If( ! Empty( ::bAddRec ), ::bAddRec, {|| ( cAlias )->( dbAppend() ), ! NetErr() } )
...
If ::lIsDbf

If Eval( If( ! ::lAppendMode, bRecLock, bAddRec ), uTemp )

::bDataEval( ::aColumns[ nCol ], uTemp, nCol )
SysRefresh()

If lAppend

If ! Empty( ::aDefault )
ASize( ::aDefault, Len( ::aColumns ) )
AEval( ::aDefault, { | e, n | If( e != Nil .and. n != nCol, If( Valtype( e ) == "B", ;
::bDataEval( ::aColumns[ n ], Eval( e, Self ), n ), ;
::bDataEval( ::aColumns[ n ], e, n ) ), Nil ) } )
::DrawLine()
EndIf
...

:AppendRow() похоже строгать надо

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


Пост N: 1317
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 19.09.18 08:04. Заголовок: SergKis пишет: Appe..


SergKis пишет:

 цитата:
AppendRow() похоже строгать надо


Сегодня днем напишу

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



Пост N: 2024
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 19.09.18 08:46. Заголовок: Haz пишет Сегодня дн..


Haz пишет
 цитата:
Сегодня днем напишу


Ok

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


Пост N: 1318
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 19.09.18 12:52. Заголовок: -SergKis пишет: :App..


SergKis пишет:

 цитата:
:AppendRow() похоже строгать надо




 
DATA bAddBefore // evaluated before append
DATA bAddAfter


METHOD AppendRow() CLASS TSBrowse

Local cAlias, bAddRec, lAdd


If ::lIsDbf
cAlias := ::cAlias
EndIf

if hb_isBlock( bAddBefore )
Eval( bAddBefore, Self )
end


Do case
case ::lIsDbf
bAddRec := If( !Empty( ::bAddRec ), ::bAddRec, {|| ( cAlias )->( dbAppend() ), ! NetErr() } )
if Eval( bAddRec )
SysRefresh()
::nLen := ( cAlias )->( Eval( ::bLogicLen ) )
::Upstable()
::Refresh(.T., .T.)
lAdd := .T.
end
case ::lIsArr
bAddRec := If( !Empty( ::bAddRec ), ::bAddRec, {|| aadd(::aArray, AClone( ::aDefValue ) ), .T. } )
if Eval( bAddRec )
SysRefresh()
::nLen := Len( ::aArray )
::nAt := ::nLen
::nRowPos := ::nRowCount()
::Refresh(.T., .T.)
lAdd := .T.
EndIf

end
::SetFocus()

if lAdd
if hb_isBlock( bAddAfter )
Eval( bAddAfter, Self )
end
end

Return nil

-

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



Пост N: 2025
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 19.09.18 15:32. Заголовок: Haz немного поправи..


Haz
немного поправил Скрытый текст


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


Пост N: 1320
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 19.09.18 17:17. Заголовок: SergKis пишет: немн..


SergKis пишет:

 цитата:
немного поправил


Да, так лучше

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




Пост N: 1353
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 19.09.18 17:53. Заголовок: SergKis пишет: немн..


SergKis пишет:

 цитата:
немного поправил


Новый метод добавлен в класс TSBrowse.
Благодарю за помощь

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



Пост N: 2027
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 20.09.18 06:54. Заголовок: Попробовал исп. :App..


Попробовал исп. :AppendRow(). Получилась странная штука. Тест. пример https://my-files.ru/sk8waj
demo2.exe - соответствует demo.prg с комментариями в функ. RecnoInsert(oBrw)
demo.exe - соответствует demo.prg со снятыми комментариями в функ. RecnoInsert(oBrw)
Суть примера demo2.exe:
из удаленных (если есть) запись восстанавливается в :bAddBefore, новая запись dbAppend() в :AppendRow() с перерисовкой.
Суть примера demo.exe:
из удаленных (если есть) запись восстанавливается в :bAddBefore, новая запись dbAppend() там же, :AppendRow() не используется, выход после блока :bAddBefore
Делаем в примерах одно и то же, удаляем 5ую запись (-) и сразу добавляем запись (+)
В demo2.exe вставка, перерисовка занимает до 10 сек. (внутр. upstable())
В demo.exe все оч. быстро
Это только у меня так ?
Или что то упущено ?

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


Пост N: 1321
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 20.09.18 10:14. Заголовок: SergKis пишет: Тест..


SergKis пишет:

 цитата:
Тест. приме


Рассмешило

Author: Igor Nazarov + Verchenko Andrey <verchenkoag@gmail.com>
#define COPYRIGHT "(c) Copyright by Andrey Verchenko. Dmitrov, 2018."

Серега , тебя забыли что ты тут вообще делаешь ?
Или всеже не Author а Publisher



Если по примеру, то бровс рассинхронизирован после рекола, сейчас гляну как починитть
или так в методе
 
If HB_ISLOGICAL(xRet) .and. ! xRet
SysRefresh()
::nLen := ( cAlias )->( Eval( ::bLogicLen ) )
::Upstable()
::SetFocus()
::Refresh(.T., .T.)

RETURN lAdd
EndIf


или озаботиться этим в bAddBefore

PS и кстати , по поводу проверки запусков программы.
Мне больше нравится WMI - стандартный инструмент менеджмента винды. Незаслуженно неиспользуемый , но дающий куда больше информации.
Да, он не супер быстрый , но если это разовый вызов то время приемлемо.
К примеру консолька ( написанная прямо тут без теста ) в параметре указать часть Caption процесса и она покажет все
 
#include 'common.ch'

FUNC Main( cCaption )
Local oObj, oWmi, oItem, x

If cCaption == nil
? 'USAGE: '
? 'demo.exe caption'
return nil
end

oObj := Win_OleCreateObject( "wbemScripting.SwbemLocator" )
oWmi := oObj:ConnectServer('127.0.0.1','root\CIMV2',,)

if Valtype( oWmi ) == "O"
for each oItem IN oWmi:ExecQuery( "SELECT * FROM Win32_Process" )
if Upper(cCaption) $ Upper(oItem:Caption)
?
? 'Caption' ,oItem:Caption
? 'ExecutablePath' ,oItem:ExecutablePath
? 'ProcessID' , hb_ntoc(oItem:ProcessID)
? 'CSName' , oItem:CSName
? 'GetOwner' , VAltype(oItem:GetOwner(1))
?
end
next
end

RETURN NIL



например demo host выдаст все процессы со словом host

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


Пост N: 1322
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 20.09.18 10:47. Заголовок: Haz пишет: If HB_I..


Haz пишет:

 цитата:
If HB_ISLOGICAL(xRet) .and. ! xRet
SysRefresh()
::nLen := ( cAlias )->( Eval( ::bLogicLen ) )
::Upstable()
::SetFocus()
::Refresh(.T., .T.)
RETURN lAdd
EndIf


Поправочка - это для ::isDbf не хватает этого условия

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



Пост N: 2028
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 20.09.18 10:50. Заголовок: Haz пишет Или всеже ..


Haz пишет
 цитата:
Или всеже не Author а Publisher


Меня это давно как то совсем не трогает.

 цитата:
сейчас гляну как починитть


Что то со сранья сам не сообразил.
Возможно надо
1. перенести перепоказ после :bAddAfter
2. параметр надо добавить lUnLock и перед return делать unlock

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