Форум » 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:....

Ответов - 132, стр: 1 2 3 4 5 6 7 All

Dima: Andrey Рассчитывай ширины столбцов так , что бы не было виртуального столбца , тогда и красить ни чего не придется. PS Или юзай nAdjColumn

Andrey: Dima пишет: Рассчитывай ширины столбцов так , что бы не было виртуального столбца , тогда и красить ни чего не придется. Есть справочники состоящие из 2 колонок всего. Так что без виртуального столбца на экране никак не обойтись.

Haz: Andrey пишет: Так что без виртуального См obrw:hBrush в примерах

Dima: Andrey Где то была процедура заливки фантома (строки и столбца) , Has показывал , но с ходу не найду Еще можно попробовать поиграть с фантомным столбцом через объект oPhant (это я по быстрому на сырец глянул)

Andrey: Haz пишет: См obrw:hBrush в примерах Нашёл. Поставил себе - не работает !!! Делаю у себя 10 колонку: [pre2] ADD COLUMN TO oBrw1 HEADER "Lang" ; .......... COLOR CLR_BLACK, CLR_WHITE ; ..... [/pre2] Потом ставлю для блокировки цвета ещё 11 колонку: [pre2] // для избавления от белого цвета конца таблицы ADD COLUMN TO oBrw1 HEADER "" ; DATA {|| NIL } ; SIZE 0 ; COLOR nBackTable, nBackTable ; NAME ZERO [/pre2] Только тогда цвет виртуального столбца становиться в цвет фона таблицы. Но на экране некрасиво это выглядит, да и курсор туда убегает (становиться невидимым) - юзер теряться будет.....

Dima: Andrey пишет: Только тогда цвет виртуального столбца становиться в цвет фона таблицы. Но на экране некрасиво это выглядит, да и курсор туда убегает (становиться невидимым) - юзер теряться будет..... Растягивай первую колонку что бы не было фантомной.

Haz: Andrey пишет: Нашёл. Поставил себе - Тогда до понедельника

Haz: Andrey пишет: Только тогда цвет виртуального столбца становиться в цвет фона таблицы. Но на экране некрасиво это выглядит, да и курсор туда убегает (становиться невидимым) - юзер теряться будет..... А в исходники посмотреть? Там же буквами написано, что фантомная колонка ВСЕГДА красится в цвет той, которая перед ней. Другого указания цвета фантому в TS нет. Это было к вопросу почему фантом белый Теперь как исправить. Так же посмотреть в исходники и увидеть что после назначения цвета фантому по последней колонке выполняется ::bOnDrawLine ( если он определен ) и тогда исправить цвет становится просто - в этом блоке вызываем функцию , которая все лечит oBrw:bOnDrawLine := {|oBrw| SetPhantomBackcColor(oBrw) } [pre2] FUNC SetPhantomBackcColor(oBrw) IF oBrw:oPhant <> Nil oBrw:oPhant:nClrBack := RGB( 111, 183, 155 ) // к примеру пусть будет грязно голубой end RETURN NIL [/pre2]

Haz: Ну и напоследок бонус трек Самое простое и очевидное решение, просто поражающее простотой. Сделать колонку 11 скрытой

Dima: Haz пишет: Сделать колонку 11 скрытой Игорь крась яйца уже

Haz: Dima пишет: крась яйца Все покрашено с утра И яйца и фантом, хожу с кисточкой и думаю гдеб еще мазнуть

Dima: Haz

Andrey: Haz пишет: Самое простое и очевидное решение, просто поражающее простотой. Сделать колонку 11 скрытой Да подумал я об этом, сразу не сделал так как посчитал SIZE 0 будет 0, а не 2-3 пиксела как на экране. Спасибо за решение !

SergKis: gfilatov2002 Добавил, у себя, возмозможность уст. высоту Edit отличную от высоты Cell [pre2] CLASS TSBrowse FROM TControl ... DATA nHeightEdit AS NUMERIC INIT 0 // GetBox cell height ... METHOD Edit( uVar, nCell, nKey, nKeyFlags, cPicture, bValid, nClrFore, nClrBack ) CLASS TSBrowse ... IF ::nColSpecHd != 0 nRow := ::nHeightHead + ::nHeightSuper + If( oCol:l3DLook, 2, 0 ) nCol := nStartX + If( oCol:l3DLook, 2, 0 ) nWidth := ::GetColSizes()[ nCell ] - If( oCol:l3DLook, 2, 1 ) nHeight := ::nHeightSpecHd - If( oCol:l3DLook, 1, -1 ) else nRow := ::nRowPos - 1 nRow := ( nRow * ::nHeightCell ) + ::nHeightHead + ; ::nHeightSuper + ::nHeightSpecHd + If( oCol:l3DLook, 2, 0 ) nCol := nStartX + If( oCol:l3DLook, 2, 0 ) nWidth := ::GetColSizes()[ nCell ] - If( oCol:l3DLook, 2, 0 ) nHeight := ::nHeightCell - If( oCol:l3DLook, 1, -1 ) If ::nHeightEdit > 0 nI := nHeight - ::nHeightEdit If nI > 4 nHeight := ::nHeightEdit nRow += int(nI / 2) EndIf EndIf endif If oCol:cResName != Nil .or. oCol:lBtnGet ... [/pre2] Полезно при исп. тсб как аналог списка пар Label+GetBox без линий и с исп. image > 24

Dima: SergKis Так ее же можно установить в bPrevEdit с помощью SetGetAdjustBrw , нет ?

SergKis: Dima если ты имеешь ввиду aEditCellAdjust := {0,0,0,0}, то да, так можно управлять, но в моей версии этого нет и ... тогда предложение снимаю.

Dima: SergKis я имел в виду примерно такой код [pre2] obrw3:GetColumn("cod"):bPrevEdit := { |a, b, lLock| SetGetAdjustBrw(b,{2,0,-2,-3}) ............. [/pre2]

SergKis: Дима, где есть SetGetAdjustBrw(...) ? Просканировал MiniGui, не получил результата. Потом bPrevEdit исп. для простой ситуации (а если много колонок) ..., слишком сложно. В целом имея высоту getbox мне хватает того, что у себя сделал. А ширина всегда по ширине cell, этим манипулирует пользователь, а я - picture

Dima: Сергей я тупанул Это я свою функцию заюзал Func SetGetAdjustBrw(o,amas) o:aEditCellAdjust[1]:=amas[1] o:aEditCellAdjust[2]:=amas[2] o:aEditCellAdjust[3]:=amas[3] o:aEditCellAdjust[4]:=amas[4] return .t. Ты был прав насчет aEditCellAdjust

SergKis: Дима, зачем ты в это делаешь в bPrevEdit, разве не достаточно простого на весь tsb nHget := 22 nH := :nHeightCell - nHget If nH > 4 :aEditCellAdjust[1] := int(nH / 2) :aEditCellAdjust[4] := nHget EndIf для мультистрок будет своя высота пересчитана, а для др. ситуаций сделанного, достаточно

SergKis: PS :aEditCellAdjust[4] := -nH

SergKis: Похоже :aEditCellAdjust - возможность задать отступы в Cell (:aEditCellAdjust := {-2,-1,-1,-2}), а размеры редактирования это свойства колонки и должны быть в TColumns. Что то такое [pre2] DATA nEditWidth AS NUMERIC INIT 0 // editing width DATA nEditHeight AS NUMERIC INIT 0 // editing height [/pre2] с вытекающими из этого действиями ...

Dima: SergKis пишет: Дима, зачем ты в это делаешь в bPrevEdit Кто то подсказал в свое время , так и прижилось.

Haz: Dima пишет: Кто то подсказал в свое время , так и прижилось. прижилось с каких-то давних версий , где еще не было корректирующего массива размеров. В PrevEdit я ровнял окно редактирования , т.к. она раньше категорически не хотело выравниваться под ячейку. Потом проблема была решена и с тех пор не тспользую

Dima: Haz У меня проблема была другого плана. После выхода из режима редактирования ячейки , "сетка" по периметру ячейки исчезала , поэтому координаты GET пришлось изменить что бы он не налазил на края ячейки.

SergKis: Dima пишет координаты GET пришлось изменить что бы он не налазил на края ячейки. Так это Григорий подправлял и сейчас все нормуль

Dima: SergKis пишет: Так это Григорий подправлял и сейчас все нормуль У меня версия еще от июня 2016 года , он правил позже ?

SergKis: Дима, трудно сказать, надо искать (там было GoLeft() и что то еще) Но уже давно, переносил изм. к себе помню ...

Dima: SergKis пишет: надо искать (там было GoLeft() и что то еще) Пороюсь. А GoLeft() был в 2008 году

SergKis: Dima пишет А GoLeft() был в 2008 году Позже было и GoRight и GoDown Нашел http://clipper.borda.ru/?1-1-40-00000454-000-180-0 пост N 848 от 06.11.15 21:33. gfilatov2002 пишет Вроде удалось поправить прорисовку разделительной линии в методах GoRight и GoDown С тех пор прорисовка линий после edit нормальная.

Dima: SergKis пишет: Позже было и GoRight и GoDown Да я чисто шарил по C:\MiniGUI\Doc\ChangeLog.txt а там только 8 год всплыл , да и фиг с ним )) SergKis пишет: пост N 848 от 06.11.15 21:33. И да , версия Минигуи у меня была уже старше и точно не 15 год )) SergKis пишет: С тех пор прорисовка линий после edit нормальная. Не понятно зачем я тогда правил все это дело на свежем Минигуи 2016 года Но глючило 100 %

Haz: Dima пишет: Но глючило 100 % И сейчас глючит. Без белых засветов вокруг закрытого гет обьекта, но линии гряды трет

SergKis: Haz пишет но линии гряды трет В какой ситуации ? Погонял примеры - не трет. У меня версия, тоже не трет.

Haz: SergKis пишет: В какой ситуации ? В ситуации обычного гетбокса. Сейчас точно сказать не могу т. к не на работе. Стандартная библиотека, прошлая или позапрошлая. Без выравнивани границ гет обьекта. После редактирования затирается одна из горизонтальных границ. Из дополнительных условий- двойной курсор с градиентом и браш на бровсе в цвет фона строк. Завтра погоняю, напишу подробнее. Но в принципе не напрягает, белых засветов нет и при желании легко исправляется выравниванием границ гет поля.

SergKis: Haz пишет Но в принципе не напрягает Только не хотелось, что бы клиент носом ткнул в эту ситуёвину

Haz: SergKis пишет: Только не хотелось, что бы клиент носом Перед сдачей клиенту всех мелких тараканов обычно принято давить. Но иногда и не до них бывает т. к есть и не мелкие) К примеру иногда наблюдаю традиционное залипание нижней строки. Понятно что исправимо, и не на всех рабочих местах у клиента проявляется. Такие вещи полирую уже при тестовой эксплуатации, т. к. с вероятностью больше 50% будут изменения в интерфейсе когда люди начнут работать.

gfilatov2002: Haz пишет: Но иногда и не до них бывает т. к есть и не мелкие Подтверждаю Вот набрел на ошибку, возникающую при использовании SPINNER внутри GetBox поля (при использовании метода oBrw:SetSpinner()). Проблема заключается в том, что при нажатии на ползунки этого Spinnerа начинает убегать указатель с текущей записи Haz Может, поможите побороть эту бяку

Haz: gfilatov2002 пишет: Может, поможите побороть эту бяку Григорий завтра посмотрю. Сейчас сижу болею дома

Dima: Haz пишет: Сейчас сижу болею дома Выздоравливай !!!

Haz: gfilatov2002 пишет: Проблема заключается в том, что при нажатии на ползунки этого Spinnerа начинает убегать указатель с текущей записи Это следствие , причина в том, что бровс получает команду сдвинуть этот указатель ползунками или кнопками не важно. Если в METHOD Command( nWParam, nLParam ) CLASS TControl закоментировать убиение фокуса [pre2] case nNotifyCode == EN_KILLFOCUS ::LostFocus() [/pre2] сразу видно как управляется бровс , а убиение фокуса просто делает это невидимым Пол дня проковырялся - безрезультатно. Не могу понять кто и где эту команду бровсу посылает Позже еще продолжу.

Haz: Поправлюсь не закоментить KillFoсus а нооборот показать добавив ниже case nNotifyCode == EN_SETFOCUS ::SetFocus() Пока все что выяснил - При нажатии какой-либо стрелки спина он посылает родительскому окну сообщение WM_VSCROLL. а родительским заявлено окно бровса и это заставляет бровс бегать по записям. Можно попробовать использовать флаг ::lDontChange , который учитывать при обработке событий в TSBrowse:HandleEvent() , можно попробовать в событиях просто фильтрануть lParam в котором будет передан дескриптор спина ( он определяется как ::hWndChild в METHOD TBtnBox:New() но в нем и хоронится и никуда не передается ) На скорую руку попробовал , частично помогает , но при выходе из режима редактирования чтото уперто сдвигает указатель на ::GoTop()

Haz: Григорий По поводу спиннера и дергания записей это частично решает проблему ( просто фильтруем в бровсе сообщения от спеннера) [pre2] * ============================================================================ * METHOD TSBrowse:HandleEvent() Version 9.0 Nov/30/2009 * ============================================================================ METHOD HandleEvent( nMsg, nWParam, nLParam ) CLASS TSBrowse #ifdef __HARBOUR__ ElseIf nMsg == WM_KEYUP Return ::KeyUp( nWParam, nLParam ) ElseIf nMsg == WM_VSCROLL If ::lDontchange Return Nil EndIf if nLParam == 0 Return ::VScroll( Loword( nWParam ), HiWord( nWParam ) ) endif #EndIf [/pre2] т.е. исключаем из обработки бровсом сооющения от спенера, но пока частично решает при первом клике в колонке со спином и выходе из редактирования запись улетает на GoTop() потом сколько не редактируй и не кликай по спину - все ОК скорее всего после первого редактирования выставляется какой нить внутренний флаг и потом его обрабатывает правильно что переводит запись в GoTop - так и не нашел, тк не смог поймать пока это единственное первое событие

gfilatov2002: Haz Благодарю за реальную помощь в этом вопросе! Haz пишет: исключаем из обработки бровсом сообщения от спайнера Принимается

SergKis: gfilatov2002 [pre2] METHOD LDblClick( nRowPix, nColPix, nKeyFlags ) CLASS TSBrowse ... If ( nClickRow == ::nRowPos .and. nClickRow > 0 ) .or. ( nClickRow == ::nRowPos .and. ! ::lDrawHeaders ) If ::lCellBrw .and. ::IsEditable( nCol ) ::nColSpecHd := 0 If ValType( Eval( ::aColumns[ nCol ]:bData ) ) == "L" .and. ; ::aColumns[ nCol ]:lCheckBox // virtual checkbox ::PostMsg( WM_CHAR, VK_SPACE, 0 ) ElseIf ::aColumns[ nCol ]:oEdit != Nil ::PostMsg( WM_KEYDOWN, VK_RETURN, 0 ) ElseIf ::bLDblClick != Nil Eval( ::bLDblClick, uPar1, uPar2, nKeyFlags, Self ) Else ::PostMsg( WM_KEYDOWN, VK_RETURN, 0 ) EndIf ... [/pre2] по мне, так правильнее будет. bLDblClick задан, но не срабатывает в этой ситуации (так было)

gfilatov2002: SergKis пишет: bLDblClick задан, но не срабатывает в этой ситуации Понимаю Вашу логику, но у автора библиотеки этот кодовый блок используется только для НЕ редактируемых TSBrowse Это явно следует из кода метода LDblClick

SergKis: gfilatov2002 пишет но у автора библиотеки этот кодовый блок используется только для НЕ редактируемых Мне кажется, у автора не до конца продумано. При наличии :nFireKey посылать надо oBr:PostMsg( WM_KEYDOWN, VK_F4, 0 ) а не VK_RETURN К примеру edit включаем VK_F4 ( :nFireKey := VK_F4 ), а VK_RTUEN назначить надо выбор строки. При работе со справочниками это сплошь и рядом - на окне где ТОЛЬКО справочник VK_RETURN может включать edit, а в вызове справочника (GrtBox) для выбора из списка (все операции по ведению спр. присутствуют) - VK_ENTER\bDblClick - это выбор строки для занесения данных в документ. В сегодняшней версии это затруднительно сделать простым способом

SergKis: PS правильно посылать надо oBr:PostMsg( WM_KEYDOWN, oBr:nFireKey, 0 )

gfilatov2002: SergKis пишет: При работе со справочниками это сплошь и рядом Тогда принимается - Вам виднее Благодарю за дополнительное разъяснение

Andrey: Что то перестал отображаться чекбокс в Tsbrowse. Версия MiniGUI Extended Edition 16.11 - работает отлично ! Версия MiniGUI Extended Edition 17.04 - не отображает.... Вот скрин экрана: Мышкой по чекбоксу кликаешь - нет отображения... Что там нужно доп. сделать у себя в коде чтобы отображалась ? В коде создаю колонку так: [pre2] // создать 3-ю колонку ADD COLUMN TO oBrw2 HEADER "Печать"+CRLF+"в таблице" ; DATA FieldWBlock( "VIEW", Select() ) ; ...... oBrw2:aColumns[3]:bPrevEdit := {|| HeadCheckField(), FALSE } // проверка до ввода[/pre2] В функции HeadCheckField() в конце обработки ставлю: [pre2] oBrw1:Reset() oBrw1:Refresh(.T.) oBrw2:Refresh(.T.) RETURN NIL[/pre2] Больше никаких функций не использую...

Dima: Andrey пишет: Версия MiniGUI Extended Edition 17.04 - не отображает.... Чеканул пример C:\MiniGUI\SAMPLES\Advanced\Tsb_array_2\ Все кажет норм !

Andrey: Dima пишет: Чеканул пример C:\MiniGUI\SAMPLES\Advanced\Tsb_array_2\ Все кажет норм ! Там по другому создаётся бровс. У меня конкретно в версии 16.11 работает, а в 17.04 - не отображает чекбокс. Что там сделали в исходниках я не знаю, но правка была же, если перестало работать ! По пробелу или по клику мышке ПЕРЕСТАЛ работать чекбокс после версии 16.11 ! Может быть из-за того что использую сразу ДВА бровса ? Как можно перерисовать конкретно 3 колонку после ввода ? Поможет ли это ? Попробовал поставить - oBrw2:aColumns[3]:bPostEdit := {|| oBrw2:DrawSelect(), FALSE } // проверка после ввода НЕ ПОМОГАЕТ !!!

Dima: Andrey пишет: По пробелу или по клику мышке ПЕРЕСТАЛ работать чекбокс после версии 16.11 ! Долго же ты ждал пока понял что не пашет :)

Andrey: Dima пишет: Долго же ты ждал пока понял что не пашет :) Да это не главное меню в программе. Редко кто пользуется. Вот и обнаружил с таким промежутком времени. Попробую проверить другие версии...

Andrey: Проверил. В версии 17.02 работает, а в 17.03 - уже не отображает чекбокс. Т.е. - по пробелу или по клику мышке ПЕРЕСТАЛ работать чекбокс после версии 17.02 ! Что нужно мне добавить в свой код чтобы по клику мышки стал отображаться чекбокс ? Использую сразу ДВА бровса на одном окне.

Dima: Andrey пишет: Т.е. - по пробелу или по клику мышке ПЕРЕСТАЛ работать чекбокс после версии 17.02 Так это не чекбокс по ходу а просто BMP как и на другом бровсе в твоем скрине

gfilatov2002: Andrey пишет: oBrw2:aColumns[3]:bPrevEdit := {|| HeadCheckField(), FALSE } // проверка до ввода Попробуй изменить это кодовый блок таким образом oBrw2:aColumns[3]:bPrevEdit := {|| HeadCheckField(), TRUE }

Andrey: gfilatov2002 пишет: Попробуй изменить это кодовый блок таким образом Так заработало ! Спасибо большое ! Хотя если только ОДИН бровс, то работает и со старым синтаксисом. Смотри пример Tsb_composite_(1.2).7z который я высылал... Там в 3х местах используется: [pre2] oBrw1:aColumns[3]:bPrevEdit := {|| FieldCheckBoxEdit(), FALSE } oBrw1:aColumns[4]:bPrevEdit := {|| FieldCheckBoxEdit(), FALSE } oBrw1:aColumns[5]:bPrevEdit := {|| FieldCheckBoxEdit(), FALSE } [/pre2]

Andrey: Ха, в версии 17.03 и выше перестал работать пример Tsb_composite_(1.2).7z - там где выбор флагов производиться... Один раз выбрать можно, на втором - программа НАГЛУХО ВИСНЕТ !!! Вот сам проект - https://cloud.mail.ru/public/2SXc/UtNfso4gf Что-то в коде нужно добавить ?

Andrey: Опять непонятка в работе функций.... Григорий, проект у тебя есть - Send2Mail.hbp Там вызов функции в модуле Tsb_send.prg строка: [pre2] oBrw:Excel2(cFile, lActivate, NIL, "_"+Space(70)+Form_0.Title, lSave )[/pre2] Версия 17.02 - работает, а в других уже НЕТ !!! Что там докрутить/исправить нужно, чтобы заработало ?

Andrey: Разобрался сам... Оказывается если нет такого пути к файлу, то Ексель и не создаёт и не открывает его ! Григорий, там можно в исходниках поставить проверку на создания по пути файла ?

Dima: Andrey пишет: Разобрался сам... Оказывается если нет такого пути к файлу, то Ексель и не создаёт и не открывает его Про это уже писалось и не раз ! Бывает :)

Vlad04: Haz Редактирование Ключевого поля в TsBrows. Я писал, что после выхода из редактирования курсор не поднимается на нужную строку Игорь, как-то выкладывал пример редактирования ключевого поля, но в примере были особенности- вторая форма для редактирования, программное построение Бровса и т.д. Посмотрите пример построенный в основном в Дизайнере - click here, может удастся заставить курсор подниматься ? И еще , при входе в редактирование сетка пропадает.

Dima: Vlad04 пишет: И еще , при входе в редактирование сетка пропадает. Почитай начиная с поста 6376 этой темы

Vlad04: Dima Все темы читаю. В примере кода практически нет, все должно работать по- умолчанию ( или почти всё) без танцев с бубном.

SergKis: Vlad04 пишет В примере кода практически нет, все должно работать по- умолчанию ( или почти всё) без танцев с бубном. Танцы вы сами придумали себе кодом: oBrw_1:aColumns[1]:bPrevEdit := { || oBrw_1:Upstable() , oBrw_1:Refresh(.T.) , oBrw_1:ResetVScroll() , .t. } запустив перед edit кучу процедур по прорисовке тсб, при этом совершенно забыв про очередь сообщений, по которой и происходят действия прорисовки. Все темы читаю но чуть чуть по диагонали. В примере Tsb_addrecord_3 ситуация с обработкой очереди для прорисовки показана была:[pre2] STATIC FUNC Add_Rec( oBrw ) ... If ! Empty(aResult) dbSelectArea(cAls) dbAppend() If ! NetErr() .and. RLock() nRec := RecNo() REPL KODS with aResult[1], ; NAME with aResult[2] If oBrw:nLen == oBrw:nRowCount() oBrw:oHScroll:SetRange(0,0) EndIf oBrw:GotoRec(nRec) nCol := oBrw:nColumn("NAME") If nCol != oBrw:nCell oBrw:nCell := nCol oBrw:DrawSelect() EndIf oBrw:lChanged := .T. oBrw:PostEdit(aResult[2], nCol, Nil) DO EVENTS oBrw:PostMsg(WM_KEYDOWN, VK_F4, 0) EndIf EndIf ... [/pre2] т.е. если убрать DO EVENTS много разного увидите

Haz: Vlad04 пишет: может удастся заставить курсор подниматься ? И еще , при входе в редактирование сетка пропадает. Нет ничего проще 1) в Form_0.fmg удалить это ON INIT Init_Form_0() и соответственно саму функцию в програмном модуле tsb.prg 2) в tsb.prg сделать так LOAD WINDOW Form_0 oBrw_1:SetIndexCols( 1 ) oBrw_1:SetOrder( 1 ) Form_0.Center Form_0.Activate PS Сергей прав по поводу танцев, но уверен со временем все уляжется в голове и танцы будут не нужны

Vlad04: SergKis примере Tsb_addrecord_3 Конечно,смотрел и этот пример. Многое не понял. Для такого простого результата - на форме одна таблица с 4-мя кнопками, код очень сложный. А если на форме несколько таблиц, а в программе десяток форм.... Haz oBrw_1:SetIndexCols( 1 ) oBrw_1:SetOrder( 1 ) просто и работает

Vlad04: Курсор поднимается , но на одно строку промахивается. При движении вниз так же ошибка на одну строку.

SergKis: Vlad04 пишет А если на форме несколько таблиц Код в примере практически не изменится для всех таблиц, используемых на окне(ах). Изменятся параметры задания колонок, валидности и др. не стандартных действий. И в примере есть ввод, едит и удаление (все сводится к примерно tsb_array_2 для таблиц). В вашем нет (якобы кода) ничего,кроме едит, но будет куча fmg для справочников в чилд\модал окнах, привязанных к железным алиасам. Не уверен, что это проще. Многое не понял Так лучше спросить, чем оставаться в не понятках. просто и работает Так это работало со времен примера Tsb_addrecord_2 [pre2] oBrw:SetIndexCols( oBrw:nColumn("ID"), ; oBrw:nColumn("INFO") ) oBrw:SetOrder( oBrw:nColumn("ID") ) [/pre2]

SergKis: Vlad04 пишет но на одно строку промахивается. После редактирования у колонки есть свойство, куда деть курсор после, по умолчанию переместиться дальше ... Потому такой результат. Поставьте [pre2] oBrw_1:aColumns[1]:nAlign := DT_LEFT oBrw_1:aColumns[ 1 ]:nEditMove := DT_DONT_MOVE oBrw_1:SetIndexCols(1) oBrw_1:SetOrder(1) oBrw_1:SetFocus() Form_0.Center Form_0.Activate [/pre2]

Vlad04: SergKis куча fmg для справочников в чилд\модал окнах, привязанных к железным алиасам. Не уверен, что это проще. Это и хорошо , что есть варианты.У меня есть одна универсальная форма для типовых справочников и отдельные формы для остальных случаев. Так это работало со времен примера Tsb_addrecord_2 Не понял сразу, в Делфи для Бровса( там это грид) несколько другая идеология - отображать данные, а не управлять ими.Да и консольный Харбор ведет себя по-другому.

Vlad04: Уф!! Теперь все нормально ! Спасибо всем !

SergKis: Vlad04 пишет У меня есть одна универсальная форма для типовых справочников и отдельные формы для остальных случаев. т.е. из меню главного окна у вас нельзя вызвать несколько окон справочников одновременно, только по очереди, т.к. в fmg прописан конкретный алиас в одной унив. форме ?

Andrey: SergKis пишет: т.е. из меню главного окна у вас нельзя вызвать несколько окон справочников одновременно А зачем юзеру редактировать/смотреть сразу несколько справочников ? Я тоже сделал одно модальное окно для справочника и туда передаю параметры из ини-файла (алиасы, поля базы и т.д.) для различных справочников. Иначе юзера начинают путаться с большим количеством справочников на экране.

SergKis: Andrey пишет А зачем юзеру редактировать/смотреть сразу несколько справочников ? Загнать в рамки дос пользователя - это вариант. А при работе с док. и спр. номенклатуры, разве не может возникнуть вопрос (по тел., от др. службы) по клиентскому спр., по автотранспорту (свой\чужой), по адресам погрузки\разгрузки, по ценнику клиента ...Что бросать (выходить) из того с чем работал или откладывать ответы на потом ... Иначе юзера начинают путаться с большим количеством справочников на экране Так это твое дело организация, что бы не путался, не дублировался, не используемый убирался. Ведь excel с sheetами не запрещают одновременно работать (типа можно но только последовательно). А ты выходит запрещаешь. Не демократично как то.

Andrey: SergKis пишет: Не демократично как то. Не... с юзерами демократию разводить не надо ! Сказали бурундук птичка и никаких зверьков и все ! С другой стороны, действительно можно дать возможность юзеру вернуться к отложенному справочнику. Интересно а как в 1С это реализовано или в других системах ? Но это наверное уже для другой ветки обсуждения, а не здесь.

PSP: Andrey пишет: Интересно а как в 1С это реализовано или в других системах ? Демократично)

Vlad04: SergKis у главного окна у вас нельзя вызвать несколько окон справочников одновременно Можно, форма универсальная для простых справочников, типа - код, наименование и т.д. В такой Форме алиасы , поля не прописаны и у меня считываются из файла при открытии формы.Эта форма описана полностью в виде кода, т.е. без дизайнера ( в нем в этом случае точно нет смысла) .

Andrey: Есть мой тестировочный проект. Раньше работал, сейчас нет. С какой версии перестал работать, даже не знаю. Сейчас вешается ВЕСЬ проект вот с таким сообщением: Вот сам проект - https://cloud.mail.ru/public/2SXc/UtNfso4gf Виснет - там где выбор флагов производиться... Один раз выбрать можно, на втором - программа НАГЛУХО ВИСНЕТ !!! Там даже второй выбор не нужно производить. Первый раз выбираем меню с флагами, потом мышкой кликаем на другой колонке (или стрелкой вверх/вниз) и тоже программа НАГЛУХО виснет !! Методом отладки определил, что перестают работать вот эти функции ПОСЛЕ выбора из модуля Form_Lang.prg: [pre2]_SetMenuItemBitmap ( "MYTABLERECNOMARK" , cForm , "CheckF28" ) _SetMenuItemBitmap ( "MYTABLERECNOPRINT", cForm , "CheckF28" ) _SetMenuItemBitmap ( "MYTABLERECNOSAVE" , cForm , "CheckF28" ) _SetMenuItemBitmap ( "MYTABLERECNOMAIL" , cForm , "CheckF28" ) [/pre2] Модуль demo.prg - строка 534 Помогите пожалуйста разобраться....

Vlad04: Выбор правой мышкой из контекстного меню ? Все работает !

Andrey: Vlad04 пишет: Выбор правой мышкой из контекстного меню ? НЕТ ! Vlad04 пишет: Все работает ! Виснет - там где выбор флагов производиться... Один раз выбрать можно, на втором - программа НАГЛУХО ВИСНЕТ !!! Там даже второй выбор не нужно производить. Первый раз выбираем меню с флагами, потом мышкой кликаем на другой колонке (или стрелкой вверх/вниз) и тоже программа НАГЛУХО виснет !!

Andrey: Привет всем ! Забыл как сделать чтобы после выбора из tsbrowse оставалась серая линия на выбранной строке таблицы. Подскажите пожалуйста ?

SergKis: Andrey пишет Забыл как сделать чтобы после выбора из tsbrowse оставалась серая линия на выбранной строке таблицы. См. Tsb_addrecord_3 Del_Rec(...) :lNoGrayBar

SergKis: Надоело везде писать (как бы лишнее, по мне) :bUserKeys := {|nKy,nFl,oBr| OnKeyDown(nKy, nFl, oBr) } и STATIC FUNC OnKeyDown( nKey, nFlg, oBrw ) // обработка KeyDown ... IF nKey == VK_RETURN ... ELSEIF nKey == VK_F2 ... ENDIF RETURN uRet Немного добавил в TsBrowse [pre2] CLASS TSBrowse FROM TControl ... DATA aUserKeys INIT hb_Hash() DATA lUserKeys INIT .F. ... METHOD UserKeys( nKey, bKey, lCtrl, lShift ) ... ENDCLASS METHOD UserKeys( nKey, bKey, lCtrl, lShift ) CLASS TSBrowse Local cKey := 'other', uVal If HB_ISBLOCK(bKey) // установить блок на ключ в hash If ! empty(nKey) If HB_ISNUMERIC(nKey) cKey := hb_ntos(nKey) cKey += iif( empty(lCtrl ), '', '#' ) cKey += iif( empty(lShift), '', '^' ) ElseIf HB_ISCHAR(nKey) cKey := nKey EndIf EndIf hb_HSet( ::aUserKeys, cKey, bKey ) ::lUserKeys := len(::aUserKeys) > 0 Else // выполнить блок по ключу из hash If HB_ISNUMERIC(nKey) cKey := hb_ntos(nKey) ElseIf HB_ISCHAR(nKey) cKey := nKey EndIf If ::lUserKeys // есть уст. блоки кода uVal := hb_HGetDef( ::aUserKeys, cKey, NIL ) If HB_ISBLOCK(uVal) cKey := Eval( uVal, Self, nKey, cKey, bKey, lCtrl, lChift ) EndIf EndIf EndIf RETURN cKey METHOD KeyDown( nKey, nFlags ) CLASS TSBrowse ... ::lNoPaint := .F. ::oWnd:nLastKey := ::nLastKey := ::nUserKey := nKey If ::lUserKeys uTemp := hb_ntos(nKey) uTemp += iif( _GetKeyState( VK_CONTROL ), "#", "" ) uTemp += iif( _GetKeyState( VK_SHIFT ), "^", "" ) uVal := hb_HGetDef( ::aUserKeys, uTemp, NIL ) If ! HB_ISBLOCK(uVal) uTemp := 'other' uVal := hb_HGetDef( ::aUserKeys, uTemp, NIL ) Endif If HB_ISBLOCK(uVal) uReturn := Eval( uVal, Self, nKey, uTemp ) If uTemp == 'other' .and. ! HB_ISLOGICAL(uReturn) uReturn := .T. EndIf If uReturn == Nil .or. ( HB_ISLOGICAL(uReturn) .and. ! uReturn ) ::nLastKey := 255 Return 0 EndIf uReturn := NIL EndIf uTemp := uVal := NIL EndIf If ::bUserKeys != Nil ... теперь в проге можно писать так :nFireKey := VK_F4 // default Edit If lRec_Select // режим выбор записи :bLDblClick := {|uP1,uP2,nFl,oBr| Get_Rec(oBr, uP1, uP2, nFl) } :UserKeys(VK_RETURN, {|oBr | Get_Rec(oBr) }) Else // режим Edit записи :bLDblClick := {|uP1,uP2,nFl,oBr| uP1 := uP2 := nFl := Nil, ; oBr:PostMsg( WM_KEYDOWN, oBr:nFireKey, 0 ) } :UserKeys(VK_RETURN, {|oBr | oBr:PostMsg( WM_KEYDOWN, oBr:nFireKey, 0 ) }) EndIf :UserKeys(VK_F2 , {|oBr,nKy,cKy| Add_Rec(oBr, nKy, cKy) }) :UserKeys(VK_F3 , {|oBr,nKy,cKy| Del_Rec(oBr, nKy, cKy) }) :UserKeys(VK_F3 , {|oBr,nKy,cKy| MsgBox(cKy, 'Ctrl + F3') }, .T.) :UserKeys(VK_F3 , {|oBr,nKy,cKy| MsgBox(cKy, 'Shift + F3') }, , .T.) :UserKeys(VK_F3 , {|oBr,nKy,cKy| MsgBox(cKy, 'C + S + F3') }, .T., .T.) // :UserKeys( , {|oBr,nKy,cKy| _LogFile(.T.,cKy, 'other', nKy ) }) // это обработка др. нажатий, уст. на ключ 'other' default Если уст. блок кода возвращает Nil или .F. Method KeyDown завершается (все выполнено), при возврате .T. Method KeyDown работает дальше. Может будет полезно, a c :bUserKeys осталось, как раньше [/pre2]

SergKis: Поясню назначение кода Else // выполнить блок по ключу из hash ... Установив на тсб :UserKeys(1.1, {|o|...}) :UserKeys(1.2, {|o|...}) :UserKeys('rpt1', {|o|...}) :UserKeys('rpt2', {|o|...}) ... на кнопках, пунктах, меню и т.д. ( для этого тсб) можно вызывать oBrw1:UserKeys(1.1, Param1, Param2, Param3) oBrw1:UserKeys('rpt2', Param1, Param2, Param3) ... если несколько тсб на окне, то для каждого делаем такие манипуляции

gfilatov2002: SergKis пишет: Может будет полезно, a c :bUserKeys осталось, как раньше Благодарю за Ваше предложение и примеры использования этого расширения! Очень интересное дополнение, которое будет доступно, если в коде библиотеки будет определена константа // #define __EXT_USERKEYS__

SergKis: gfilatov2002 пишет будет доступно, если в коде библиотеки будет определена константа // #define __EXT_USERKEYS__ А смысл пересобирать либу ? Изменения минимальны, старые алгоритмы не затронуты. Я забыл, когда последний раз пересобирал либу, пользуюсь (для примеров и проб) родной сборкой. Думается так многие делают.

gfilatov2002: SergKis пишет: Изменения минимальны, старые алгоритмы не затронуты. Все правильно, но, вероятно, потребуется определить #ifndef __XHARBOUR__ #define __EXT_USERKEYS__ #endif поскольку, например, функция hb_HGetDef() недоступна в xHarbour

SergKis: gfilatov2002 Пример для Harbour (на моей lib): и надо подправить (ошибочка) [pre2] METHOD UserKeys( nKey, bKey, lCtrl, lShift ) CLASS TSBrowse ... If ::lUserKeys // есть уст. блоки кода uVal := hb_HGetDef( ::aUserKeys, cKey, NIL ) If HB_ISBLOCK(uVal) cKey := Eval( uVal, Self, nKey, cKey, bKey, lCtrl, lShift ) EndIf EndIf [/pre2]

SergKis: PS Забыл в примере вывести в StatusBar сообщение о наличии меню на правую кнопку мыши (на тсб)

SergKis: PS в моей lib не работает (надо исп. вариант без DEFINE ...) DEFINE SPLITBOX HANDLE hSplit поэтому в примере StatusBar закрыт (на родной MiniGui.lib должно быть Ok!)

gfilatov2002: SergKis пишет: Пример для Harbour Благодарю за наглядный пример! SergKis пишет: Забыл в примере вывести в StatusBar сообщение о наличии меню на правую кнопку мыши Поправил - пример работает нормально

Петр: Конечно - это полезное дополнение. Только мне кажется, что UserKeys не совсем подходящее название метода и того, что этот метод делает. Не помешало бы и добавить что-то вроде SetUserKeys/GetUserKeys

SergKis: Петр пишет Не помешало бы и добавить что-то вроде SetUserKeys/GetUserKeys Тогда + DoUserKeys (выполнение), т.е. еще несколько доп. методов. Но в МиниГуи уклон к функциям с параметрами и пляской от них, потому пошел таким путем ("что бы не выделяться" (с))

Петр: SergKis пишет: Но в МиниГуи уклон к функциям с параметрами и пляской от них, потому пошел таким путем ("что бы не выделяться" (с)) Понятно, но название неподходящее: bUserKeys/UserKeys - клавиша/ключ, дезориентировать будет.

SergKis: Петр пишет но название неподходящее: bUserKeys/UserKeys - клавиша/ключ, дезориентировать будет. Т.к. действия bUserKeys с новым методом схожи, то не должно дезориентировать. Что там обработка пользовательских клавиш\ключей, что тут, от этого и брал название. Но если есть подходящее название - нет возражений.

SergKis: gfilatov2002 В примере надо заменить _HMG_ThisControlName на This.Name - это будет правильнее.

Петр: SergKis пишет: Что там обработка пользовательских клавиш\ключей, что тут Там обработка клавиш, тут - клавиши\ключа Причем у вас обработка события по ключу может быть и не связанной с нажатием какой-либо клавиши. Название должно отображать суть того, что происходит. А что здесь происходит я лично определиться не могу

SergKis: Петр пишет я лично определиться не могу Тогда, отдадим на откуп Григорию ( типа, наша хата с краю )

SergKis: Петр пишет Причем у вас обработка события по ключу может быть и не связанной с нажатием какой-либо клавиши. В связи с отсутствием на окне механизма работы через очередь (городить свой обработчик не хочется к каждому окну), к примеру WM_USER + 55 и через Post\SendMessage(hWnd, WM_USER + 55, nIndex\hControl, 0) и на окно вешать подобный механизм UserKeys, приходится вешать клавиши в :UserKeys VK_F21, VK_F22, ... и делать oBrw:PostMsg(...) + oBrw:Cargo с данными. Нажатия клавиш существуют всегда, причем клиент ТРЕБУЕТ дублирование кнопок клавишами КАТЕГОРИЧЕСКИ

SergKis: Петр Может смущает наличие многих параметров в блоках и функциях (это в основном для информации в MsgBox(...)), так в реальности, можно, практически, обойтись без них (oBrw1 Public\Private):[pre2] oBrw:bLDblClick := {|| oBrw1:PostMsg( WM_KEYDOWN, oBrw1:nFireKey, 0 ) } oBrw:UserKeys(VK_RETURN, {|| oBrw1:PostMsg( WM_KEYDOWN, oBrw1:nFireKey, 0 ) }) или oBrw:UserKeys(VK_RETURN, {|obr| obr:PostMsg( WM_KEYDOWN, obr:nFireKey, 0 ) }) :UserKeys('SetMode_1' , {|obr| Set_Mode(obr, 1)}) :UserKeys('SetMode_2' , {|obr| Set_Mode(obr, 2)}) или :UserKeys('SetMode_1' , {|| Set_Mode(oBrw1, 1)}) :UserKeys('SetMode_2' , {|| Set_Mode(oBrw1, 2)}) или :UserKeys('SetMode_1' , {|| Set_Mod1()}) // внутри функций :UserKeys('SetMode_2' , {|| Set_Mod2()}) // используем oBrw1 ... [/pre2]

SergKis: gfilatov2002 пишет функция hb_HGetDef() недоступна в xHarbour Может вместо #ifndef __XHARBOUR__ #define __EXT_USERKEYS__ #endif сделать [pre2] #ifndef __XHARBOUR__ FUNC hb_HGetDef( hHash, xKey, xDef ) Local nPos := HGetPos( hHash, xKey ) Return iif( nPos > 0, HGetValuePos( hHash, nPos ), xDef ) #endif [/pre2]

SergKis: PS вернее #ifdef __XHARBOUR__ ...

gfilatov2002: SergKis пишет: вернее #ifdef __XHARBOUR__ Заменил вызов HGetValuePos() на HGetValueAt() и добавил переопределение еще для двух функций #ifdef __XHARBOUR__ /* Hash item functions */ #xtranslate hb_Hash( [<x,...>] ) => Hash( <x> ) #xtranslate hb_HSet( [<x,...>] ) => HSet( <x> ) #endif теперь UserKeys работает и под xHarbour Благодарю за помощь

Петр: SergKis пишет: Может смущает наличие многих параметров в блоках и функциях Вот как раз это меня не смущает И даже наоборот, смущает то, что, например, в Events параметры не передаются в оконные события.

SergKis: gfilatov2002 Дополнительно, что бы было #ifdef __XHARBOUR__ #xtranslate hb_HHasKey( h, k ) => HHasKey( h, k ) #xtranslate hb_HDel( h, k ) => HDel( h, k )

Петр: SergKis пишет: Дополнительно, что бы было Включите hbcompat.ch из contrib/hbxhb

Andrey: Вопрос по индексам в Tsbrowse. К базе подключёны индексы. 3 индекс создан с ключом = "DESCEND(STR(KView))+UPPER(NAME)" Добавляю запись в базу. [pre2] nOrderTek := INDEXORD() DBSetOrder( 1 ) .... DBAppend() nTekRec := (oBrw:cAlias)->(RecNo()) lAppend := .T. DBSetOrder( nOrderTek ) .... IF lAppend // была добавлена запись oBrw:Refresh(.T.) oBrw:GoToRec(nTekRec) ENDIF Form_1.oBrw.Setfocus RETURN Nil [/pre2] После добавления курсор НЕ становиться на добавленной записи, а становиться на первую запись по индексу. Как нужно правильно сделать установку на добавленную запись ?

Dima: Andrey пишет: nOrderTek := INDEXORD() DBSetOrder( 1 ) .... DBAppend() nTekRec := (oBrw:cAlias)->(RecNo()) lAppend := .T. DBSetOrder( nOrderTek ) А так ? [pre2] nOrderTek := (oBrw:cAlias)->(INDEXORD()) (oBrw:cAlias)->(DBSetOrder( 1 )) .... (oBrw:cAlias)->(DBAppend()) nTekRec := (oBrw:cAlias)->(RecNo()) lAppend := .T. (oBrw:cAlias)->(DBSetOrder( nOrderTek )) [/pre2] PS Вместо INDEXORD() лучше юзать ordsetfocus() ежели это CDX

Andrey: Dima пишет: А так ? Равнозначно. Можно и так написать. С обычным порядком в индексе у меня всё работает. А если поставить другой индекс с обратным порядком в ключе = "DESCEND(STR(KView))+UPPER(NAME)" То запись перестаёт вставать на правильное место.

Dima: Была такая кака. Пришлось базу открывать 2 раза с разными алиас , добавление и смену ордера делаем во вспомогательной базе и после в основной (бровс по ней живет) прыгаем куда надо , не меняя ордера естественно. Такую "фигню" под консолью делать не нужно.....

Dima: Andrey пишет: Можно и так написать Я имел в виду OrdSetFocus по имени тега

SergKis: Anderey пишет С обычным порядком в индексе у меня всё работает. Dima пишет Пришлось базу открывать 2 раза с разными алиас , добавление ... По мне, это нормальная практика, т.е. просмотр[ы] по одной, а ввод, удаление, edit по вновь открываемой. А учитывая "тонкости" TsBrowse, возможно, лучший вариант. Повторное открытие, для модификаций еще с s87 практикую.

Andrey: MiniGUI Extended Edition 17.05 У меня сделано так: [pre2] oBrw:aColumns[nJ]:bPrevEdit := {|| nRecBuff := (oBrw:cAlias)->(RecNo()), ; MyFieldEdit( oBrw:aColumns[oBrw:nCell]:Cargo ) } oBrw:aColumns[nI]:bPostEdit := {|| oBrw:GoToRec(nRecBuff), oBrw:Refresh(.T.) } [/pre2] К базе подключёно 3 индекса. Последний индекс типа: STR(KView)+STR(KFILI)+UPPER(FIO) Всё работает отлично, но после редактирования поля входящее в индекс (например FIO) - курсор прыгает на 6 позиции вниз. Правка столбцов полей KView и KFILI - происходит нормально. Почему ? В FUNCTION MyFieldEdit(aCargo) нет переходов по базе. Только редактирование поля в зависимости от условий: [pre2] IF lEditField // сетевой захват записи IF (oBrw:cAlias)->(RLock()) FieldPut( FIELDNUM( cPoleField ), cPoleEdit ) (oBrw:cAlias)->KOPERAT := M->nOperat DBCommit() DBUnlock() ENDIF ENDIF [/pre2]

Dima: Andrey пишет: Почему ? Покажи скрин до и после редактирования поля FIO

Andrey: Dima пишет: Покажи скрин до и после редактирования поля FIO Вот: Если редактировать последние записи в таблице, то курсор перескакивает НИЖЕ записей таблице и на экране становится дублирование записей... Совсем юзер пугается...

Dima: а если закоментить строку oBrw:aColumns[nI]:bPostEdit := {|| oBrw:GoToRec(nRecBuff), oBrw:Refresh(.T.) }

Dima: Andrey пишет: В FUNCTION MyFieldEdit(aCargo) нет переходов по базе. Только редактирование поля в зависимости от условий: IF lEditField // сетевой захват записи IF (oBrw:cAlias)->(RLock()) FieldPut( FIELDNUM( cPoleField ), cPoleEdit ) (oBrw:cAlias)->KOPERAT := M->nOperat DBCommit() DBUnlock() ENDIF ENDIF Прикольно Только RLOCK смотрит в правильный ALIAS , все что ниже х.... знает куда

Andrey: Dima пишет: а если закоментить строку Сделал так: oBrw:aColumns[nI]:bPostEdit := {|| /*oBrw:GoToRec(nRecBuff)*/, oBrw:Refresh(.T.) } Стало отлично ! Не перескакивает. НО ТЕПЕРЬ другой справочник не работает. Если к базе подключаю только 2 индекса и 2-ой индекс типа: UPPER(NAME), то при редактировании поля NAME и изменению его на другое значение (было: "ООО СтройСервис", стало "1ООО СтройСервис") то КУРСОР остаётся на текущем месте, а отредактированная запись улетает вверх. Как теперь быть ?

Andrey: Dima пишет: Только RLOCK смотрит в правильный ALIAS , все что ниже х.... знает куда Из терминалки перенёс. Как правильно сделать ?

Vlad04: В примере Tsb_lastrow динамически можно изменить высоту заголовка таблицы.А можно подобное делать с высотой строк таблицы ?

Andrey: Vlad04 пишет: А можно подобное делать с высотой строк таблицы ? Можно так (или по другому): oBrw:nHeightCell += INT(nNumberLines * nFontSize/2) // расчёт высоты строки

Dima: Vlad04 А ты уже задавал этот вопрос в 2005 году и Has ответил http://clipper.borda.ru/?1-1-0-00000399-000-10001-0-1418918839

Veeha: оффтоп Andrey пишет: Совсем юзер пугается... Изучай основы построения интерфейсов ...

Andrey: Veeha пишет: Изучай основы построения интерфейсов ... Это терминалка была, я сделал по другому на МиниГу - юзера потребовали вернуть обратно ! Спасибо за картинку !

Veeha: Andrey пишет: Это терминалка была, я сделал по другому на МиниГу - юзера потребовали вернуть обратно ! Если что - я про цвета ... Чурки твои пользователи ( а может и ты) ! Тут, на форуме, есть ещё тебе подобные - в том числе и админ Dima

Andrey: Veeha пишет: Чурки твои пользователи ( а может и ты) ! В г.Николаеве пользователи программы есть. Да и по России немало, где работают (я точно знаю) диспетчера-украинцы. Выводы у тебя просто хамские. Всех подряд как правило критикуют те - у кого нет нормальных и тиражируемых программ, только и могут на г... исходить.

Dima: Andrey пишет: Выводы у тебя просто хамские Veeha ушел копать картошку на луну

Vlad04: Dima Vlad04 А ты уже задавал этот вопрос в 2005 году и Has ответил В 2005 году не помню, не нашел , вряд ли. В 2005 я только с Харбор познакомился. А MiniGui - позже, тема начата в 2013.

Haz: Dima пишет: Veeha ушел копать картошку на луну А чего так далеко то ??? Мне мастер класс по основам построения интерфейсов пригодился бы

Haz: Haz пишет: В 2005 году не помню, не нашел , вряд ли. В 2005 я только с Харбор познакомился. А MiniGui - позже, тема начата в 2013. Ошибся Дима годом, бывает Но ссылку дал правильную. По которой написано что "почти все что в классе определено как DATA может быть переопределено во время исполнения бровса" nHeightCell определен как DATA и отвечает за высоту строк при ПРОРИСОВКЕ бровса , а раз так то в любой момент можно изменить значение и перерисовать бровс Добавьте на форму бровса код ниже и увидете магию DEFINE TIMER Timer_1 OF FORM_1 INTERVAL 1000 ACTION {|| oBrw:nHeightCell++, oBrw:Refresh(TRUE) } // Каждую секунду на 1 пиксель увеличиваем строки

Dima: Haz пишет: Ошибся Дима годом Точно Зрение подвело...



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