Форум » GUI » TsBrowse в Минигуи (продолжение) » Ответить

TsBrowse в Минигуи (продолжение)

Vlad04: TsBrows определяется в виде строки ПАРМЕТРОВ объекта и их значений К примеру [quote] 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 [/quote] Здесь я собрал параметры из разных tBrows Можно или нет и какие парметры заменить выражением ( и каким) ? oBrw2:.... oBrw2:....

Ответов - 300, стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 All

Andrey: Вспомнил про ещё один баг в METHOD ExcelOle() ! После создания xls файла, сам Эксель уходин на второй план, т.е. под окно этого экспорта. Юзера ЗЛЯТСЯ ОЧЕНЬ на это !!! Для исправления этого нужно сделать так: [pre2] 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 [/pre2] Такой код оставляет ЭКСЕЛЬ на переднем плане.

Alex_Cher: Andrey пишет: Вспомнил про ещё один баг в METHOD ExcelOle() А в oExcel := TOleAuto():New( "Excel.Application" ) можно получить такой же же эффект, что бы при создание Excel вылетал на передний план ?

Andrey: Alex_Cher пишет: можно получить такой же же эффект, что бы при создание Excel вылетал на передний план ? Да. Делай последние строчки так же как METHOD ExcelOle() и получишь такой же результат.


Andrey: Может такой код нужно ставить, чтобы Эксель оставался на экране: [pre2] 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[/pre2]

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

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

Andrey: Нашёл ещё один баг в METHOD ExcelOle(): При многострочном построении Tsbrowsa при экспорте - получается так: Хотя таблица выглядеть должна примерно так: Как и где исправить код для этого метода ?

Alex_Cher: Andrey пишет: Этот код добавляй в свою программу. Андрей с Excel все получилось ... , почему с Word не получается - oWord:Visible := .T. hWnd := oWord:hWnd ShowWindow( hWnd, 6 ) // MINIMIZE windows INKEYGUI(100) ShowWindow( hWnd, 3 ) // MAXIMIZE windows BringWindowToTop( hWnd )

Andrey: Alex_Cher пишет: почему с Word не получается - Там фигня с Вордом. Я делаю так: [pre2] 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[/pre2] Смотри пример DBF_to_DOC_03.7z на https://abonent4.ru/minigui/

Alex_Cher: Andrey пишет: Там фигня с Вордом. Я делаю так: Все получилось, Андрей, большое тебе спасибо ....!

Andrey: Модуль h_tbrowse.prg, METHOD ExcelOle(...) Нафига там где то посередке стоит: [pre2] If ::lIsDbf ( ::cAlias )->( DbGoTo( nRecNo ) ) ::GoPos( nOldRow, nOldCol ) EndIf ::nAt := nAt[/pre2] Всё равно при выходе стоит - ::Reset()

Andrey: Если в методе ExcelOle(...) стоит функция доп.обработки [pre2] If bExtern != Nil Eval( bExtern, oSheet, Self ) EndIf[/pre2] В ней также можно перемещаться по tsbrowse, то наверное вот этот кусок: [pre2] If ::lIsDbf ( ::cAlias )->( DbGoTo( nRecNo ) ) ::GoPos( nOldRow, nOldCol ) EndIf ::nAt := nAt[/pre2] - нужно ставить уже после этой If bExtern != Nil ? Или я не прав ?

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

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

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

Andrey: Понял, что нельзя. Ещё вопрос про селектор. Нашёл баг по редко встречающему условию. METHOD ExcelOle() используем таблицу с селектором. При экспорте делаем так: [pre2] CursorWait() If ::lSelector ::aClipBoard := { ColClone( ::aColumns[ 1 ], Self ), 1, "" } ::DelColumn( 1 ) ::lSelector :=.F. // нужно сделать !!! EndIf[/pre2] Нужно тогда ::lSelector делать .F. - иначе при вызове доп.функции: [pre2] If bExtern != Nil Eval( bExtern, oSheet, Self ) EndIf[/pre2] При проверке ::lSelector будет возвращать всегда .T. - что неправильно !!! И разместить как я предлагал доп.функцию уже в самом конце: [pre2] 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[/pre2]

Andrey: Всем привет ! Вот кусок кода для Tsbrowse: [pre2] 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 ....[/pre2] Куда ставить oBrw:Reset() ? По варианту 1 или по варианту 2 ?

Haz: Andrey пишет: Куда ставить oBrw:Reset() Посмотреть что делает ::Reset() потом на свой кусок кода и понимание придет само [pre2] METHOD Reset(lBottom) ... If lBottom ::GoBottom() ElseIf ::lInitGoTop ::GoTop() EndIf ::Refresh( .T., .T. ) If ::bChange != Nil Eval( ::bChange, Self, 0 ) EndIf Return Self [/pre2]

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

Haz: Andrey пишет: зачем тогда нужно делать: LOCAL nAt := oBrw:nAt При бровсе по массиву gopos не выполнится, а перед этим был skip()



полная версия страницы