On-line: гостей 1. Всего: 1 [подробнее..]
АвторСообщение
постоянный участник


Пост N: 420
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 19.12.13 18:16. Заголовок: TsBrowse в Минигуи (продолжение)


TsBrows определяется в виде строки ПАРМЕТРОВ объекта и их значений
К примеру

 цитата:

DEFINE TBROWSE oBrw2 ;
AT 60,450 ;
ALIAS cAlias ;
OF Form1 ;
WIDTH 330 ;
HEIGHT 340 ;
FONT "Verdana" ;
SIZE 9 ;
ON DBLCLICK CopyRec();
ON GOTFOCUS fModelo_Hab(2) ;
AUTOFILTER ;
CELLED EDIT;
VALUE nRec;
GRID


Здесь я собрал параметры из разных tBrows
Можно или нет и какие парметры заменить
выражением ( и каким) ?
oBrw2:....
oBrw2:....

























<a href=http://www.bestmarket.com.ua >ноутбуки</a>























<a href=http://www.bestmarket.com.ua >ноутбуки</a>
Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 286 , стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 All [только новые]


постоянный участник




Пост N: 5843
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 26.04.18 07:37. Заголовок: Возвращаюсь опять к ..


Возвращаюсь опять к методу ExcelOle().
При вызов экселя, он запускается, а потом уходит на второй план, т.е. под задачу.
У всех так происходит ?
Или это только у меня так, из-за Far.
Если у всех, то надо бы Эксель на передний план ВСЕГДА переключать. Или ключ ввести для перевода.
У кого какие будут соображения ?

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




Пост N: 5846
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 26.04.18 17:53. Заголовок: Предложение по METHO..


Предложение по METHOD Excel2() - сделать задержку, чтобы бегунок показывался на экране нормально, это в конце метода:
 
If ! Empty( aRepl )
For nCol := 1 To Len( aRepl )
oSheet:Columns( Chr( 64 + aRepl[ nCol ] ) ):WrapText := .T.
Next
EndIf

If hProgress != Nil
SendMessage( hProgress, PBM_SETPOS, nCount, 0 )
EndIf
INKEYGUI(100)

If ::lSelector
::InsColumn( ::aClipBoard[ 2 ], ::aClipBoard[ 1 ] )
::lNoPaint := .F.
EndIf

If ! Empty( cXlsFile ) .and. lSave
.....


И ещё предложение:
         EndIf 

//If ! Empty( ::aSuperHead ) // заменить как ниже
If (::lDrawSuperHd)

For nCol := 1 To Len( ::aSuperHead )
nVar := If( ::lSelector, 1, 0 )
uData := If( ValType( ::aSuperhead[ nCol, 3 ] ) == "B", Eval( ::aSuperhead[ nCol, 3 ] ), ;


Поясню почему. Если в примере нужно убрать показ суперхидера, то можно назначит ему высоту 1 пиксел.
И исходники пересматривать не придётся.
Но если у нас суперхидер есть в 1 пиксел, то ! Empty( ::aSuperHead ) выдаст что суперхидер есть и сделает экспорт его на лист Экселя.
А If (::lDrawSuperHd) позволит этого избежать.

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


Пост N: 1231
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 26.04.18 23:18. Заголовок: Andrey пишет: сдела..


Andrey пишет:

 цитата:
сделать задержку, чтобы бегунок показывался на экране нормально


Тормозить программу специально? Ради красоты бегунка
Правильнее нормально задавать параметры отображения. К примеру если рисуем процентовку, которая, напоминаю равна 100
То незачем прорисовывать каждую запись из 1000. Дастаточно каждую десятую.


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




Пост N: 5847
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 27.04.18 07:24. Заголовок: Haz пишет: Правильн..


Haz пишет:

 цитата:
Правильнее нормально задавать параметры отображения. К примеру если рисуем процентовку, которая, напоминаю равна 100
То незачем прорисовывать каждую запись из 1000. Дастаточно каждую десятую.



А как надо правильно ?
Подправь пожалуйста исходник, а то в методе :Excel2() нормально рисуется бегунок, а в методе :ExcelOle() - огрызок какой-то.

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




Пост N: 5848
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 27.04.18 07:26. Заголовок: И ещё одна странност..


И ещё одна странность в методе :ExcelOle() - не рисуется подвал таблицы !
Там же есть вроде в тексте:
    If AScan( ::aColumns, { |o| o:cFooting != Nil  } ) > 0  

For nCol := 1 To Len( ::aColumns )

If ( aColSel != Nil .and. AScan( aColSel, nCol ) == 0 ) .or. ::aColumns[ nCol ]:cFooting == Nil
Loop
EndIf

uData := If( ValType( ::aColumns[ nCol ]:cFooting ) == "B", Eval( ::aColumns[ nCol ]:cFooting ), ;
::aColumns[ nCol ]:cFooting )
uData := cValTochar( uData )
uData := StrTran( uData, CRLF, Chr( 10 ) )
oSheet:Cells( nLine, nCol ):Value := uData
Next
EndIf

Как исправить, чтобы заработало ?

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


Пост N: 1232
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 27.04.18 16:44. Заголовок: Andrey пишет: Предл..


Andrey пишет:

 цитата:
Предложение по METHOD Excel2() - сделать задержку,


Ты уж определись про какой метод ты пишешь ? А то говоришь про Excel2() а код кидаешь из ExcelOle()
Вместо INKEYGUI() скорее подойдет Sysrefresh() или DoEvents()
В конце метода nCount == nTotal ?? при выводе этого
 
::ExcelOle()
If hProgress != Nil
SendMessage( hProgress, PBM_SETPOS, nCount, 0 )
EndIf


если посмотреть в Excel2() то в конце там не nCount . Может тут проблема ?
 
::Excel2()
If hProgress != Nil
SendMessage( hProgress, PBM_SETPOS, nTotal, 0 )
EndIf



Следующий фокус я не понял
 
If hProgress != Nil
nTotal := ( ::nLen + 1 ) * Len( ::aColumns ) + 30
SetProgressBarRange ( hProgress , 1 , nTotal )
SendMessage( hProgress, PBM_SETPOS, 0, 0 )
nEvery := Max( 1, Int( nTotal * .02 ) ) // refresh hProgress every 2 %
EndIf

и затем два раза
 
If hProgress != Nil
nCount -= 15
SendMessage( hProgress, PBM_SETPOS, nCount, 0 )
EndIf






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




Пост N: 5851
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 27.04.18 21:14. Заголовок: Haz пишет: Ты уж оп..


Haz пишет:

 цитата:
Ты уж определись про какой метод ты пишешь ? А то говоришь про Excel2() а код кидаешь из ExcelOle()
Вместо INKEYGUI() скорее подойдет Sysrefresh() или DoEvents()


Да точно, перепутал я.
Понял насчёт Sysrefresh() или DoEvents().
Но остальной код я тоже не понимаю, зачем так сделано:
nCount -= 15 и т.д. - для меня загадка...
Напиши пожалуйста как правильно сделать, а Григорий уже исправит исходники !

И как насчёт подвала таблицы, почему нет в экселе её ?

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


Пост N: 1233
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 28.04.18 11:21. Заголовок: Andrey пишет: И ещ..


Andrey пишет:

 цитата:

И ещё одна странность в методе :ExcelOle() - не рисуется подвал таблицы !


В версии 2018/03/28: HMG Extended Edition version 18.03. все рисуется из твоего же примера Tsb_Brw2xml
Ищи где намудрил с исходниками

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




Пост N: 5852
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 28.04.18 12:06. Заголовок: Haz пишет: В версии..


Haz пишет:

 цитата:
В версии 2018/03/28: HMG Extended Edition version 18.03. все рисуется из твоего же примера Tsb_Brw2xml



Я понял в чём дело. Если увеличить таблицу то 1000 элементов, то подвал в таблице пропадает !
Я пробовал на версии 18.03 - тоже нет подвала.

Сделал в версии 18.04 кол-во строк 240, подвал есть.
На 250 строках подвала уже нет и вот такая таблица получается:



Что-то ерундит алгоритм выгрузки в эксель.
Как и где подправить ?
Смотреть последний проект - Tsb_Export8d.7z

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


Пост N: 1234
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 28.04.18 12:22. Заголовок: Andrey пишет: Что-т..


Andrey пишет:

 цитата:
Что-то ерундит алгоритм выгрузки в эксель.
Как и где подправить ?



А ерундит счетчик строк в алгоритме, на твоей картинке ясно виден разрыв ( пустая строка ) и после нее еще 5 строк. Если в примере общее число строк уменьшить на 5 , то разрыв исчезнет и подвал появится.
Скорее всего из-за разрыва подвал затирается.
Так что ищи причину разрыва, подвал - это следствие

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


Пост N: 1235
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 28.04.18 12:32. Заголовок: Добавлю чуть. В теку..


Добавлю чуть.
В текущей реализации ::ExcelOle() морально устарел , а убивец текущей реализации метода - Паша
После появления поддержки вариантного массива этот ::ExcelOle() стал рудиментом, т.к. с __oleVariantNew() работать приятнее и понятнее , чем клеить ячейки в строку с ограничением в 20к

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




Пост N: 5853
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 28.04.18 13:35. Заголовок: Haz пишет: В текуще..


Haz пишет:

 цитата:
В текущей реализации ::ExcelOle() морально устарел , а убивец текущей реализации метода - Паша
После появления поддержки вариантного массива этот ::ExcelOle() стал рудиментом, т.к. с __oleVariantNew() работать приятнее и понятнее , чем клеить ячейки в строку с ограничением в 20к



А можно сделать замену этой текущей реализации для всех ?
Я этого сам не осилю.

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


Пост N: 1236
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 28.04.18 14:10. Заголовок: Andrey пишет: Я это..


Andrey пишет:

 цитата:
Я этого сам не осилю.


Ну надо же когда то начинать

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


Пост N: 1237
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 07.05.18 15:32. Заголовок: oBrw:SetBtnGet зависает


Никак не могу понять почему зависает следующий код
Есть колонка NAME с текстовым полем , хочу и редактировать его и выбирать из справочника . Идеально подходит ::SetBtnGet
Следующий код при выборе кнопки записывает слово "Test" в поле, но только в первый раз, во второй раз бровс зависает
oBrw:SetBtnGet( "NAME", "", { | oEdit, xVar | xVar := "Test",; 
oEdit:VarPut( xVar ), oEdit:Refresh() }, 16 )


Мож есть у кого мысли куда копать ?

PS Даже с таким кодом на второй раз завис
oBrw:SetBtnGet( "NAME", "", { | | NIL } , 16 )


и еще интереснее , если в первый раз ввести значение ручками , а во второй вызвать кнопку - тоже завис.






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




Пост N: 3725
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 07.05.18 16:01. Заголовок: Haz пишет: В текуще..


Haz пишет:

 цитата:
В текущей реализации ::ExcelOle() морально устарел



для начала можно убрать некоторые рудименты:

строки

oBook := oExcel:Get( "ActiveWorkBook")
oSheet := oExcel:Get( "ActiveSheet" )

заменить на

oBook := oExcel:ActiveWorkBook
oSheet := oExcel:ActiveSheet

аналогично вызов (в 2-х местах)

oSheet:Range( cRange ):Set( "HorizontalAlignment", xlHAlignCenterAcrossSelection )

заменить на

oSheet:Range( cRange ):HorizontalAlignment := xlHAlignCenterAcrossSelection

после этого можно перейти на использование класса win_oleAuto из библиотеки hbwin, заменив строку

oExcel := CreateObject( "Excel.Application" )

на

win_oleCreateObject( "Excel.Application" )

Используя класс win_oleAuto, можно вместо передачи через буфер обмена передавать в Excel всю таблице одним вызовом __oleVariantNew()
В принципе передача через буфер обмена фрагментами по 20к тоже работает быстро, но можно и делать это прямой записью.

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



Пост N: 1808
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 07.05.18 16:50. Заголовок: Haz пишет Следующий ..


Haz пишет
 цитата:
Следующий код при выборе кнопки записывает слово "Test" в поле, но только в первый раз, во второй раз бровс зависает


Добавил в пример Tsb_addrecord_2
 
ADD COLUMN TO oBrw DATA FieldWBlock( "ITG", Select( "base" ) ) ;
HEADER "Total" FOOTER hb_ntos(nItg) ;
ALIGN DT_RIGHT, DT_CENTER, DT_RIGHT ;
SIZE 90

oBrw:SetBtnGet( 3, "", { |oe,cv| cv := "Test",;
oe:VarPut(cv), oe:Refresh() }, 16 )


работает не виснет.
Игорь, наверно, примерчик нужен

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


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


SergKis пишет:

 цитата:
работает не виснет.
Игорь, наверно, примерчик нужен



Сергей, спасибо.
Пока обошелся решив по другому. Сейчас не до примерчиков, позже сделаю обязательно ( может дома подготовлю и то не уверен ) !
Тащу два объемных проекта, даже тараканов в них давить некогда. Нужно сдать ! После сдачи видимо будет период оптимизации кода и украшательства.
Вот там примерчики начнутся.


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


Пост N: 1239
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 11.05.18 10:42. Заголовок: Сергей работает не ..


Сергей

 цитата:
работает не виснет.


Вобщем это я тупанул. Работает конечно при чистом запуске.
Я пользуюсь для сборки проектов фришным редактором от Xailer ( xEdit )
Этот редактор , при запуске проекта на исполнение , пытается управлять приложением ( пытается использовать отладку, показать значения переменных, ресурсов и пр.)
Возможно и можно его прикрутить как отладчик, но я не пользуюсь.
Так вот, при запуске из под редактора , кнопка эта вешает задачу, при запуске нормальном - все ок. Знал же, раньше натыкался и все выяснил. Но время прошло и за неиспользованием этого функционала все забыл ((. Пол дня потратил на старые грабли




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




Пост N: 1276
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 11.05.18 13:05. Заголовок: Pasha пишет: для на..


Pasha пишет:

 цитата:
для начала можно убрать некоторые рудименты


Благодарю за помощь!

Выполнил предложенные правки

 цитата:
Используя класс win_oleAuto


для следующей сборки


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



Пост N: 1809
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 11.05.18 18:34. Заголовок: Haz пишет Есть колон..


Haz пишет
 цитата:
Есть колонка NAME с текстовым полем , хочу и редактировать его и выбирать из справочника . Идеально подходит ::SetBtnGet


У себя исп. вариант без кнопки, но с назначением клавиш, может будет интересно. Изменения:
 
CLASS TSColumn
...
DATA aKeyEvent INIT {}
DATA bKeyEvent

...
METHOD SetKeyEvent( nKey, bKey, lCtrl, lShift, lAlt )

...
ENDCLASS
...
METHOD SetKeyEvent( nKey, bKey, lCtrl, lShift, lAlt ) CLASS TSColumn

AAdd( ::aKeyEvent, { nKey, bKey, lCtrl, lShift, lAlt } )

RETURN Self

...
CLASS TGetBox FROM TControl
...
METHOD New( nRow, nCol, bSetGet, oWnd, nWidth, nHeight, cPict, bValid,;
...
::oGet :=
_DefineGetBox ( cControl, ParentFormName, nCol, nRow, nWidth, nHeight, uValue, ; // BK
...
METHOD Edit( uVar, nCell, nKey, nKeyFlags, cPicture, bValid, nClrFore, ;
...
Local nK, aKey, oGet

...
oCol:oEdit := TGetBox():New( nRow+::aEditCellAdjust[1], nCol+::aEditCellAdjust[2], ;
bSETGET( uValue ), Self, nWidth+2+::aEditCellAdjust[3], nHeight+2+::aEditCellAdjust[4], ;
cPicture,, nClrFore, nClrBack, hFont, ::cChildControl, cWnd, ;
cMsg,,,,, bChange, .T.,, lSpinner .and. cType $ "ND", bUp, bDown, ;
bMin, bMax, oCol:lNoMinus )

IF ! empty(oCol:aKeyEvent)
oGet := oCol:oEdit:oGet
For nK := 1 TO Len(oCol:aKeyEvent)
aKey := oCol:aKeyEvent[ nK ]
If HB_ISNUMERIC( aKey[1] )
oGet:SetKeyEvent( aKey[1], aKey[2], aKey[3], aKey[4], aKey[5] )
EndIf
Next
ENDIF

EndIf
...
Пример Tsb_addrecord_2\demo.prg
...
ADD COLUMN TO oBrw DATA FieldWBlock( "ITG", Select( "base" ) ) ;
HEADER "Total" FOOTER hb_ntos(nItg) ;
ALIGN DT_RIGHT, DT_CENTER, DT_RIGHT ;
SIZE 90

// oBrw:SetBtnGet( 3, "", { |oe,cv| cv := "Test",;
// oe:VarPut(cv), oe:Refresh() }, 16 )

oBrw:aColumns[3]:SetKeyEvent(VK_F5, {|og,ky| MyKeyEvent(og, ky) })
oBrw:aColumns[3]:SetKeyEvent(VK_F6, {|og,ky| MyKeyEvent(og, ky) })
oBrw:aColumns[3]:SetKeyEvent(VK_F7, {|og,ky| MyKeyEvent(og, ky) })

AEval( oBrw:aColumns, {|oCol,nCol| oCol:lFixLite := .T., ;
...
*----------------------------------------------
STATIC FUNCTION MyKeyEvent( oGet, nKey )
*----------------------------------------------
LOCAL cVK := '', cTx := 'Test '
If nKey == VK_F5
cVK := 'VK_F5'
ElseIf nKey == VK_F6
cVK := 'VK_F6'
ElseIf nKey == VK_F7
cVK := 'VK_F7'
EndIf
oGet:VarPut(cTx+cVK)
oGet:Refresh()
// MsgBox( cVK + ' : ' + cValToChar( oGet:VarGet() ), 'Info' )

RETURN NIL



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

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