Автор | Сообщение |
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:....
|
|
|
Ответов - 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 Такой код оставляет ЭКСЕЛЬ на переднем плане.
|
|
|
Alex_Cher
|
| |
Пост N: 55
Зарегистрирован: 18.06.15
|
|
Отправлено: 18.05.18 08:32. Заголовок: Andrey пишет: Вспом..
Andrey пишет: цитата: | Вспомнил про ещё один баг в METHOD ExcelOle() |
| А в oExcel := TOleAuto():New( "Excel.Application" ) можно получить такой же же эффект, что бы при создание Excel вылетал на передний план ?
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 5876
Зарегистрирован: 12.09.06
|
|
Отправлено: 18.05.18 09:42. Заголовок: Alex_Cher пишет: мо..
Alex_Cher пишет: цитата: | можно получить такой же же эффект, что бы при создание Excel вылетал на передний план ? |
| Да. Делай последние строчки так же как METHOD ExcelOle() и получишь такой же результат.
|
|
|
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
|
|
|
Alex_Cher
|
| |
Пост N: 56
Зарегистрирован: 18.06.15
|
|
Отправлено: 21.05.18 08:01. Заголовок: Andrey пишет: Делай..
Andrey пишет: цитата: | Делай последние строчки так же как METHOD ExcelOle() |
| Андрей, неверное я что-то не догоняю, с сырцах не нашел метод TOleAuto(): и куда добавлять ...?
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 5882
Зарегистрирован: 12.09.06
|
|
Отправлено: 21.05.18 13:11. Заголовок: Alex_Cher пишет: не..
Alex_Cher пишет: цитата: | неверное я что-то не догоняю, с сырцах не нашел метод TOleAuto(): и куда добавлять ...? |
| Этот код добавляй в свою программу. Я писал про METHOD ExcelOle() который находиться MiniGUI\SOURCE\TsBrowse\h_tbrowse.prg Но этот метод Григорий исправит и будет достен в следующей версии.
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 5883
Зарегистрирован: 12.09.06
|
|
Отправлено: 22.05.18 19:44. Заголовок: Нашёл ещё один баг в..
Нашёл ещё один баг в METHOD ExcelOle(): При многострочном построении Tsbrowsa при экспорте - получается так: Хотя таблица выглядеть должна примерно так: Как и где исправить код для этого метода ?
|
|
|
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 )
|
|
|
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/
|
|
|
Alex_Cher
|
| |
Пост N: 58
Зарегистрирован: 18.06.15
|
|
Отправлено: 28.05.18 10:14. Заголовок: Andrey пишет: Там ф..
Andrey пишет: цитата: | Там фигня с Вордом. Я делаю так: |
| Все получилось, Андрей, большое тебе спасибо ....!
|
|
|
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()
|
|
|
|
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 ? Или я не прав ?
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 1899
Зарегистрирован: 17.02.12
|
|
Отправлено: 22.06.18 12:58. Заголовок: Andrey пишет нужно с..
Andrey пишет цитата: | нужно ставить уже после этой If bExtern != Nil ? |
| Я бы сказал "нужно ставить уже и после этой If bExtern != Nil ? "
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 5927
Зарегистрирован: 12.09.06
|
|
Отправлено: 22.06.18 14:36. Заголовок: Понял ! Спасибо ! :..
Понял ! Спасибо ! Буду у себя так делать. Осталось Григорию у себя в библиотеке поменять...
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 5928
Зарегистрирован: 12.09.06
|
|
Отправлено: 23.06.18 17:55. Заголовок: Всем привет ! Можно ..
Всем привет ! Можно ли как то на лету изменить таблицу с параметром SELECT .T. или вообще без него ? Т.е. строиться таблица с SELECT .T., а потом его нужно удалить/восстановить.
|
|
|
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
|
|
|
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 ?
|
|
|
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
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 5961
Зарегистрирован: 12.09.06
|
|
Отправлено: 13.07.18 18:09. Заголовок: А зачем тогда нужно ..
А зачем тогда нужно делать: LOCAL nAt := oBrw:nAt ... oBrw:nAt := nAt
|
|
|
Haz
|
| |
Пост N: 1274
Зарегистрирован: 20.02.11
|
|
Отправлено: 13.07.18 20:22. Заголовок: Andrey пишет: зачем..
Andrey пишет: цитата: | зачем тогда нужно делать: LOCAL nAt := oBrw:nAt |
| При бровсе по массиву gopos не выполнится, а перед этим был skip()
|
|
|
Ответов - 300
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[только новые]
|
|