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


Пост 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:....



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


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




Пост N: 5874
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 17.05.18 18:56. Заголовок: Вспомнил про ещё оди..


Вспомнил про ещё один баг в METHOD ExcelOle() !

После создания xls файла, сам Эксель уходин на второй план, т.е. под окно этого экспорта.
Юзера ЗЛЯТСЯ ОЧЕНЬ на это !!!
Для исправления этого нужно сделать так:
   CursorArrow() 

::Reset()

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

If lActivate
oExcel:Visible := .T.
hWnd := oExcel:hWnd
ShowWindow( hWnd, 6 ) // MINIMIZE windows
INKEYGUI(100)
ShowWindow( hWnd, 3 ) // MAXIMIZE windows
BringWindowToTop( hWnd )
Else
oExcel:Application:Quit()
EndIf

//::Reset()

//If hProgress != Nil
// SendMessage( hProgress, PBM_SETPOS, 0, 0 )
//EndIf

Return Nil

Такой код оставляет ЭКСЕЛЬ на переднем плане.

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





Пост N: 55
Зарегистрирован: 18.06.15
ссылка на сообщение  Отправлено: 18.05.18 08:32. Заголовок: Andrey пишет: Вспом..


Andrey пишет:

 цитата:
Вспомнил про ещё один баг в METHOD ExcelOle()



А в

oExcel := TOleAuto():New( "Excel.Application" )

можно получить такой же же эффект, что бы при создание Excel вылетал на передний план ?


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




Пост N: 5876
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 18.05.18 09:42. Заголовок: Alex_Cher пишет: мо..


Alex_Cher пишет:

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


Да. Делай последние строчки так же как METHOD ExcelOle() и получишь такой же результат.

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




Пост N: 5877
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 19.05.18 18:13. Заголовок: Может такой код нужн..


Может такой код нужно ставить, чтобы Эксель оставался на экране:
   If lActivate 
oExcel:Visible := .T.
If VAL( oExcel:Version ) <= 13 // Excel 2003
ShowWindow( oExcel:hWnd, 6 ) // MINIMIZE windows
ShowWindow( oExcel:hWnd, 3 ) // MAXIMIZE windows
Endif
Try
BringWindowToTop( oExcel:hWnd ) // a window on the foreground
End Try
Else
oExcel:Application:Quit()
EndIf


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





Пост N: 56
Зарегистрирован: 18.06.15
ссылка на сообщение  Отправлено: 21.05.18 08:01. Заголовок: Andrey пишет: Делай..


Andrey пишет:

 цитата:
Делай последние строчки так же как METHOD ExcelOle()



Андрей, неверное я что-то не догоняю, с сырцах не нашел метод TOleAuto():
и куда добавлять ...?


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




Пост N: 5882
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 21.05.18 13:11. Заголовок: Alex_Cher пишет: не..


Alex_Cher пишет:

 цитата:
неверное я что-то не догоняю, с сырцах не нашел метод TOleAuto():
и куда добавлять ...?


Этот код добавляй в свою программу.
Я писал про METHOD ExcelOle() который находиться MiniGUI\SOURCE\TsBrowse\h_tbrowse.prg
Но этот метод Григорий исправит и будет достен в следующей версии.

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




Пост N: 5883
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 22.05.18 19:44. Заголовок: Нашёл ещё один баг в..


Нашёл ещё один баг в METHOD ExcelOle():

При многострочном построении Tsbrowsa при экспорте - получается так:


Хотя таблица выглядеть должна примерно так:


Как и где исправить код для этого метода ?

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





Пост N: 57
Зарегистрирован: 18.06.15
ссылка на сообщение  Отправлено: 25.05.18 07:56. Заголовок: Andrey пишет: Этот ..


Andrey пишет:

 цитата:
Этот код добавляй в свою программу.



Андрей с Excel все получилось ... , почему с Word не получается -

oWord:Visible := .T.
hWnd := oWord:hWnd
ShowWindow( hWnd, 6 ) // MINIMIZE windows
INKEYGUI(100)
ShowWindow( hWnd, 3 ) // MAXIMIZE windows
BringWindowToTop( hWnd )


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




Пост N: 5884
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 25.05.18 15:43. Заголовок: Alex_Cher пишет: по..


Alex_Cher пишет:

 цитата:
почему с Word не получается -


Там фигня с Вордом. Я делаю так:
   If lActivate 
oText:HomeKey(wdStory) // в начало текста
oWord:Visible := .T.
SetWordWindowToForeground(oWord) // окно Word на передний план
EndIf

RETURN NIL

//////////////////////////////////////////////////////////////////////
// окно Word на передний план
FUNCTION SetWordWindowToForeground(oWord)
LOCAL hWnd, nVer, cCaption, cTitle

// ------------------- поиск ХЕНДЛА открытого окна документа --------------
hWnd := 0
nVer := VAL( oWord:Version ) // Версия Word
IF nVer > 14 // Word 2010
hWnd := oWord:ActiveDocument:ActiveWindow:Hwnd
ELSE
//hWnd:=oWord:hwnd - так делать нельзя !
cCaption := oWord:Windows[1]:Caption
cTitle := cCaption + " - MICROSOFT WORD"
hWnd := FindWindowEx(,,, cTitle )
IF hWnd == 0
cTitle := cCaption + " [Режим ограниченной функциональности] - MICROSOFT WORD"
hWnd := FindWindowEx(,,, cTitle )
ENDIF
ENDIF

IF hWnd > 0
ShowWindow( hWnd, 6 ) // MINIMIZE windows
ShowWindow( hWnd, 3 ) // MAXIMIZE windows
BringWindowToTop( hWnd ) // A window on the foreground
ENDIF

RETURN NIL

Смотри пример DBF_to_DOC_03.7z на https://abonent4.ru/minigui/

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





Пост N: 58
Зарегистрирован: 18.06.15
ссылка на сообщение  Отправлено: 28.05.18 10:14. Заголовок: Andrey пишет: Там ф..


Andrey пишет:

 цитата:
Там фигня с Вордом. Я делаю так:



Все получилось, Андрей, большое тебе спасибо ....!

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




Пост N: 5925
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 21.06.18 19:32. Заголовок: Модуль h_tbrowse.prg..


Модуль h_tbrowse.prg, METHOD ExcelOle(...)
Нафига там где то посередке стоит:
   If ::lIsDbf 
( ::cAlias )->( DbGoTo( nRecNo ) )
::GoPos( nOldRow, nOldCol )
EndIf
::nAt := nAt


Всё равно при выходе стоит - ::Reset()




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




Пост N: 5926
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 22.06.18 12:52. Заголовок: Если в методе ExcelO..


Если в методе ExcelOle(...) стоит функция доп.обработки
 
If bExtern != Nil
Eval( bExtern, oSheet, Self )
EndIf

В ней также можно перемещаться по tsbrowse, то наверное вот этот кусок:
   If ::lIsDbf  
( ::cAlias )->( DbGoTo( nRecNo ) )
::GoPos( nOldRow, nOldCol )
EndIf
::nAt := nAt

- нужно ставить уже после этой If bExtern != Nil ?
Или я не прав ?



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




Пост N: 1899
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 22.06.18 12:58. Заголовок: Andrey пишет нужно с..


Andrey пишет
 цитата:
нужно ставить уже после этой If bExtern != Nil ?


Я бы сказал "нужно ставить уже и после этой If bExtern != Nil ? "

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




Пост N: 5927
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 22.06.18 14:36. Заголовок: Понял ! Спасибо ! :..


Понял ! Спасибо !
Буду у себя так делать.
Осталось Григорию у себя в библиотеке поменять...

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




Пост N: 5928
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 23.06.18 17:55. Заголовок: Всем привет ! Можно ..


Всем привет !
Можно ли как то на лету изменить таблицу с параметром SELECT .T. или вообще без него ?
Т.е. строиться таблица с SELECT .T., а потом его нужно удалить/восстановить.

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




Пост N: 5931
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 27.06.18 19:04. Заголовок: Понял, что нельзя. ..


Понял, что нельзя.

Ещё вопрос про селектор.
Нашёл баг по редко встречающему условию.

METHOD ExcelOle() используем таблицу с селектором.
При экспорте делаем так:
   CursorWait() 

If ::lSelector
::aClipBoard := { ColClone( ::aColumns[ 1 ], Self ), 1, "" }
::DelColumn( 1 )
::lSelector :=.F. // нужно сделать !!!
EndIf


Нужно тогда ::lSelector делать .F. - иначе при вызове доп.функции:
   If bExtern != Nil 
Eval( bExtern, oSheet, Self )
EndIf

При проверке ::lSelector будет возвращать всегда .T. - что неправильно !!!

И разместить как я предлагал доп.функцию уже в самом конце:
   oSheet:Range( "A1" ):Select() 

If hProgress != Nil
SendMessage( hProgress, PBM_SETPOS, nTotal, 0 )
EndIf

If bExtern != Nil
Eval( bExtern, oSheet, Self )
EndIf

If ::lIsDbf
( ::cAlias )->( DbGoTo( nRecNo ) )
::GoPos( nOldRow, nOldCol )
EndIf

::nAt := nAt


If ! Empty( cXlsFile ) .and. lSave


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




Пост N: 5960
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 13.07.18 16:50. Заголовок: Всем привет ! Вот к..


Всем привет !

Вот кусок кода для Tsbrowse:
   LOCAL nRecNo := ( oBrw:cAlias )->( RecNo() ), nAt := oBrw:nAt 
LOCAL nOldRow := oBrw:nLogicPos(), nOldCol := oBrw:nCell
........
For nRow := 1 TO oBrw:nLen
.....
oBrw:Skip(1)
Next
.....
oBrw:Reset() // вариант 1

If oBrw:lIsDbf
( oBrw:cAlias )->( DbGoTo( nRecNo ) )
oBrw:GoPos(nOldRow, nOldCol)
EndIf
oBrw:nAt := nAt

oBrw:Reset() // вариант 2
....

Куда ставить oBrw:Reset() ? По варианту 1 или по варианту 2 ?


Спасибо: 0 
Профиль
Haz
администратор




Пост N: 1273
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 13.07.18 17:36. Заголовок: Andrey пишет: Куда ..


Andrey пишет:

 цитата:
Куда ставить oBrw:Reset()



Посмотреть что делает ::Reset() потом на свой кусок кода и понимание придет само
 
METHOD Reset(lBottom)
...
If lBottom
::GoBottom()
ElseIf ::lInitGoTop
::GoTop()
EndIf
::Refresh( .T., .T. )

If ::bChange != Nil
Eval( ::bChange, Self, 0 )
EndIf

Return Self



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




Пост N: 5961
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 13.07.18 18:09. Заголовок: А зачем тогда нужно ..


А зачем тогда нужно делать:
LOCAL  nAt := oBrw:nAt  
...
oBrw:nAt := nAt


Спасибо: 0 
Профиль
Haz
администратор




Пост N: 1274
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 13.07.18 20:22. Заголовок: Andrey пишет: зачем..


Andrey пишет:

 цитата:
зачем тогда нужно делать:
LOCAL nAt := oBrw:nAt


При бровсе по массиву gopos не выполнится, а перед этим был skip()

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